영상 링크 : https://www.youtube.com/watch?v=DwqwUsFmoCU

 

1. 무엇을 소개하는가?

토스 닥터라고 부르는, 스모크 테스트 자동화 툴을 소개한다.

메신저에서 /토스닥터 를 입력하고 몇가지 옵션을 선택하면 Appium을 이용해 테스트 스크립트를 실행하고, 테스트 결과를 출력하는 일종의 "딸깍" 하나에 20분치 업무를 수행해주는 툴이다.

*스모크 테스트 : 주요 기능 테스트를 빠르게 하는 것

2. 도입 배경

기존에는 수동 테스트에 너무 많은 인력 소모가 있었던 것 같다.

1회 릴리즈 할 때 평균 RC 빌드를 5회 발행하고,

1년간 Android와 iOS에서 RC 빌드를 540회 발행했으며,

기존 RC 빌드를 1회 수동 테스트하는 데에 평균 20분 걸린 것을 계산하여 총 179시간의 비용이 들었다고 한다.

**RC 빌드 : 출시 후보

하지만 토스 닥터 자동화 툴을 사용했을 때, 자동 테스트로 평균 10분 단축시키면서 두가지 확실한 이득을 볼 수 있었다.

  1. 총 RC 빌드 테스트 시간을 90 시간을 아낀다.
  2. 179시간 * 수동 테스트 참여 인원의 비용을 아낀다.

또한, RC 빌드가 발행되었을 때 기존 업무를 중단하고 다른 업무로 바꿀 때의 집중력 분산, 수동 테스트를 반복할 때에 오는 업무 피로감 등의 보이지 않는 이점 또한 얻을 수 있었다.

3. 주요한 세가지 특징

토스 닥터 컨퍼런스에서 세가지 주요한 세가지 특징을 소개했다.

  1. webdriver 세션 재사용하기
  2. 자동으로 테스트 결과 기록하기
  3. 실시간으로 테스트 진행 상황 모니터링하기

1번으로는, @pytest.fixture 이라고 부르는 데코레이터를 사용했다고 한다.

반복되는 세팅 (앱을 켜기, 로그인하기 등) 을 각 세션을 테스트 할 때 마다 실행한다면 반복되는 코드가 나올 뿐만 아니라 매번 재실행하는데에 시간 소요도 커지게 된다.

그런 낭비를 줄여주는 기능을 소개하는 것으로 보인다.

 

2번으로는, pytest의 testrail 플러그인을 사용해 테스트 결과를 testrail api로 전달하는 방식으로 구현했다고 한다.

테스트레일에 ID를 지정하고, pytest의 testrail 플러그인에 ID를 1대1 매칭해놓으면 testrail에 결과가 보고된다고 한다.

 

3번으로는, 테스트 자동화 중 테스트 시작, 성공, 실패, 경고를 통해 테스트 진행 상태를 실시간으로 볼 수 있게 구현했다.

2번에서 테스트 결과가 기록되더라도 "이걸 실시간으로 어떻게 보느냐?" 에 대한 해답을 내놓았다.

실제로 메신저에 구현한 것을 보면, 대강 이런식이다.

🎯 탭 노출 확인

✅ 로그인 (0.5s)     <- Pass

✅ 1번 탭 노출 확인 (0.3s)     <- Pass

✅ 2번 탭 노출 확인 (0.3s)     <- Pass

🔥 3번 탭 노출 확인 (0.3s)    <- Fail

⚠️ 4번 탭 노출 확인 (0.3s)    <-warn

이런식으로, 어떤 기능을 테스트하는지, 성공하였는지, Fail하였는지, 몇초 걸렸는지를 한눈에 볼 수 있게 완성도 높은 구현을 했다.

 

주요한 세가지 특징이라고 말을 했는데, 굉장히 훌륭하고 꼭 필요한 기능일 것 같다.

그리고, 굉장히 깔끔하다!

4. 느낀 점

첫 회사에서, 매 빌드마다 스모크 테스트와 같은 메뉴얼 테스트를 수동으로 한 경험이 있다.

그때 당시, 수동 테스트를 매번 반복하는 과정이 썩 즐겁지만은 않았고 기계가 된 기분이기도 했었다.

지금으로 와서, 토스 닥터와 같은 자동화에 영감을 받고 충분한 공부 시간과 역량을 갖춘다면 자동화를 구현해보고 싶을 것 같다.

하지만 과연 토스 닥터와 같이 "잘" 만들 수 있을까?

위의 주요한 세가지 특징 중 몇개나 구현이 가능할까?

한번 도전해보고싶다. 최근 시간 여유가 있는데, 한번 기획하고 만들어보는것도 좋을듯!

* 컨퍼런스 시청 후 개인적인 느낌을 서술한 감상문이다!
 
영상 링크 : https://www.youtube.com/watch?v=OeNGEB7AAfY

1. 무엇을 소개하는가?

QAMate Autoflow라는, 넥슨의 사내 툴을 소개하는 영상이다.
뭔가 완성도가 너무 좋아서 상용화 되지 않았을까? 하는 이유로 검색을 해봤는데, 아쉽게도 사내에서만 운용되는 툴 같다..
유튜브 영상을 직접 캡쳐해서 가져오면 뭔가 안될거같아서, 어떤 툴인가를 설명하자면

https://unity.com/kr/features/unity-visual-scripting

이런 느낌으로 노드(N)와 간선(E)을 이용해 스크립트를 짜는 툴이었다.
영상에서는 메이플스토리에서 서버를 선택하고 캐릭터를 선택한 후 로그인하는 과정을 자동화 하는 시연을 보여주었다.

사전 조건 : 서버 선택 페이지

  1. 클라이언트의 특정 좌표를 클릭하는 노드 #서버 선택
  2. 몇초간 기다리는 간선 #채널 선택 페이지 나올때까지 기다림
  3. 클라이언트의 이미지 좌표를 더블 클릭하는 노드 # 채널 선택
  4. 몇초간 기다리는 간선 # 캐릭터 선택 페이지 나올때까지 기다림

이런식으로 구성되어있고, "2차 비밀번호 입력" 과 같은 좌표나 이미지를 찾아가는 것으로는 구현하기 힘든 행동에 대해서는 "커스텀 노드" 또한 만들어서 활용하는 모습을 볼 수 있었다.
 

2. 도입배경

기존 QA들이 테스트 자동화를 시도할 때, 아래와 같이 진행 중이었다고 한다.

  1. 상용 솔루션 도입 검토
  2. 내부에서 업무 중에 개발
  3. 파이썬으로 직접 스크립팅

상용 솔루션 도입 검토를 하자니 비용의 문제 + 기껏 다 구축했는데 갑자기 서비스 종료를 하면 어쩌나 라는 걱정,
내부 업무 중 개발을 하자니 QA 업무 중 자동화까지 구현하기에는 너무 리소스 낭비,
파이썬으로 직접 스크립팅 하자니 러닝커브가 있어 신입 QA에게는 벽이 있었다고 한다.
이에 따라, 툴 프로그래머 이신 발표자는 아래와 같은 목표를 했다고 한다.

  1. 상용 솔루션보다 잘 만들어야 함
  2. 파이썬 배우기보다 더 쉬워야 함
  3. 범용성 있어야 함

3. 그래서 만든것

위 목표와 요구사항을 받아들여, 아래처럼 제작을 했다고 한다.

  1. 러닝커브 낮추기
    레고로 비유해서 처음에는 난이도가 낮은 레고를 구입했다가 점점 어려운 레고를 구입하는 것 처럼, 초창기 버전에서는 간단한 기능 (ex. 어디좌표/이미지 클릭) 정도로만 구현했다가 이후 복잡한 기능을 추가했다고 한다.
  2. 귀찮음 줄이기
    보통 자동화를 구현할 때, 여러 귀찮은 과정이 있는데 이러한 문제를 최대한 단순화 했다고 한다.
    - 좌표 찾기 귀찮다: 클라이언트 스샷으로 좌표를 빠르게 얻을 수 있다고 한다.
    - 이미지 따오기 귀찮다: 위와 마찬가지로 스샷으로 이미지를 빠르게 잘라서 파라미터로 세팅할 수 있다고 한다.
    - 노드 만들기 귀찮다: 유저의 액션을 녹화하면 노드로 자동 만들어지게 했다고 한다.(Record & Replay 라고 하나?)
  3. 노드의 조합
    마우스 클릭을 10번하는 이벤트 노드를 만들기보단, 마우스 클릭 + 10번 반복노드를 만드는 방식으로 만들었다.
  4. 단축키
    가장 재미있었던 부분인데, 스타크래프트 단축키를 사용해 B + T 키를 입력하면 Text Input 노드가 생성된다!

Starcraft 단축키

분명 실무자에게는 한계가 있을 수도 있지만, 실사용을 해볼 수 없는 입장에서는 진짜 강력한 툴이라고 생각된다!
이전 회사에서 자동화 구현 중, 모바일 기기 해상도가 각기 달라 정말 단순하게도 그림판을 켜서 좌표를 손수 따오는 나의 방식을 생각하면..

4. 그리고 재미를 주기 위해

  1. 크레딧을 만들었다.
    처음 개발 당시의 기여자에 대해 명단을 작성해준다.
  2. 커스텀이 실용적이면 정식 패치에 합류한다.
    자주 사용되거나, 엄청나게 복잡한 기능을 단순하게 구현해내는 노드를 만들면 정식 패치에 합류하고, 마우스 호버 기능으로 "○ ○ ○가 만듦"  같은 내용을 써주는 것 같다.
  3. 스크립트를 만들면 서버에 올라간다.
    내가 만든거에 대해 타인에게 공유하고, 타인이 만든 효율적인 스크립트를 내가 써보면서 하나의 작은 커뮤니티 역할을 하는 것 같다.

크레딧이나 커스텀에 내 이름이 적혀있고, 신입이 사용하다가 내 이름이 적혀있는걸 본다면 어깨가 절로 솟을 것 같다!
또, 서버에서 스크립트를 공유하면서 나와 타인의 자동화 아이디어를 공유하고, 교류하지 않을까??
 

5. 추가될 기능

Git의 Pull Request 형식으로 개발자의 첨삭을 받을 수 있다고 한다. 2년 전 글이니 만약 이 툴 사용이 폐기되지 않았다면! 아마 구현되지 않았을까 한다.

6. 느낀점

역시 국내 1위 게임회사 라는 생각을 했다.
이전에 독학으로 자동화를 만들어보곤 했지만, 항상 만들다 보면 정신이 없어지는 코드가 나오고 그러는데..
정말 깔끔하게 자동화를 해석하고 구현하는게 대단했다!
이런 툴을 만드는 것 까지는 아니더라도, 이런 기능을 모듈화하는 아이디어라던가? 그렇게 만들면 범용성 높게 만들 수 있었을 것 같다.
이런걸 두고 객체 지향이라고 하는걸까? 맞는 표현인지는 모르겠지만..
아무튼 짧지만 아주 좋은 컨퍼런스를 들어서 너무 유익했다!

'노트 > 컨퍼런스' 카테고리의 다른 글

[컨퍼런스] SLASH 24 - 토스 닥터 후기  (2) 2025.02.20

+ Recent posts