G+AIDER SOLUTION G+AIDER ScriptEngine ScriptEngine은 게임 자동화 테스트에 필요한 일련의 제어 기능을 수행하는 플랫폼입니다. 모바일 게임에 대한 테스트 시나리오 작성 시, 테스터가 원하는 기능을 블록으로 생성 및 실행하여 사용자에게 테스트 결과를 제공합니다.

시작하기

Script Engine의 가장 큰 특징은 구글 Blockly의 블록을 이용한 시나리오 작성입니다.

Blockly 는 구글에서 개발한 Visual Programming Editor 이며 Javascript 기반의 라이브러리입니다.
용도에 맞게 블록을 맞추어 프로그래밍할 수 있으며, 다양한 Default Block 을 제공하고,
웹/iOS/Android 상에서 WebView를 통해 구동 가능합니다.

사용 친화적인 Block UI를 위해 구글 Blockly 기반의 Scratch 3.0 블록 코딩 툴을 사용하고 있습니다.
해당 프레임워크는 전세계적으로 가장 널리 알려진 코딩 툴이며,
MIT 미디어랩의 Lifelong Kindergarten Group에서 프로젝트로 개발되고 있습니다.

스크립트엔진 히스토리

스크립트엔진 히스토리
Version Description Supported Release
G+AIDER Multi 다중 디바이스에서 자동화 테스트 가능한 상용화 버전
  • iOS Device 테스트
  • Multi-Device 자동화 테스트
  • Unity GameStateRecorder,
    UiRecorder 업데이트
2019.09(미정)
G+AIDER Mono 이미지 인식 기술을 이용해 게임 내 오브젝트를 인식하고 이를 활용해 다중 스크립트 실행이 가능한 기본 Beta 버전
  • Android Device 테스트
  • 이미지 인식 및 템플릿 피커
  • 다중 스크립트 실행
  • Unity Game 테스트
  • Unity Object Hierarchy 및 log
  • 디바이스 Dashboard 지원
  • 레포트 결과 및 스크린샷
2019.07.26

지원환경

1. Browser

Borwser 지원환경
Desktop Browsers Version on Windows Version on MacOS
Google Chrome 58+ N/A
Opera, Safari, Firefox, IE Not supported+

2. Others

Others 지원환경
Programming Language Version on Windows Version on MacOS
Node.js v 11.x + v 11.x +
Python v 2.7.x v 2.7.x

G+AIDER 스크립트엔진 GUI

Toolbars and Views

1. Toolbars

Toolbars는 크게 Workspace(Blockly), 대시보드, 레포트로 구성되어 있습니다.
Toolbars
ICON Description
블록을 드래그 앤 드롭하여 스크립트 생성 및 실행할 수 있는 워크스페이스입니다.
디바이스 현황 (가용 메모리/내부 스토리지/외부 스토리지) 및 Unity FPS 정보를 알 수 있는 대시보드입니다.
워크스페이스에서 실행한 블록 스크립트에 대한 테스트 결과값을 확인할 수 있는 레포트입니다. 사용자, 디바이스, 실행된 스크립트 요약, 결과값, 결과 스크린샷에 대한 정보를 확인할 수 있습니다.

2. Workspace View

1) Workspace ViewToolbox는 Blockly에서 제공하는 스크롤바, 쓰레기통, 크기 조절 등이 있습니다.

Workspace View
ICON Description
현 워크스페이스에 있는 블록 사이즈를 증가시킵니다.
현 워크스페이스에 있는 블록 사이즈를 줄입니다.
현 워크스페이스 위치를 가운데로 이동합니다.
사용하던 블록을 워크스페이스에서 제거를 원할 시, 해당 블록을 드래그 앤 드롭합니다.

2) Block Categories View

G+AIDER ScriptEngine에서 제공하는 블록 카테고리이며, 총 5개로 구성되어 있습니다. Logic Block은 구글 Blockly에서 제공되는 Default Block으로 조건문 및 반복문/연산/텍스트 등 제공됩니다. 이 외의 카테고리는 G+AIDER를 통해 자동화 테스트에 필요한 기능을 자체 개발한 Customized Block입니다. 카테고리 별 제공되는 블록의 총 개수는 39개입니다.
Block Categories View
Category Description
Gestures (5) 디바이스 내 빈도가 높은 일련의 행위를 나타낸 블록입니다.
(Click with X/Y, Click with IRS, LongClick, Drag, Swipe)
Interactions (2) 디바이스 기능들을 제공한 블록입니다.
Image Recognition (4) 이미지 인식과 관련된 블록입니다.
PreSet (1) 이미지 인식을 쉽게 사용할 수 있는 블록셋입니다.
Logic Blocks (27) 구글 Blockly에서 기본으로 제공되는 Default 블록입니다.
Connect Unity G+AIDER Unity 연결

3) Show Unity

Unity 블록 실행 시, 발생하는 실시간 게임 정보들을 제공합니다.
Show Unity
ICON Description
실행되고 있는 모바일 게임 내 모든 오브젝트들을 트리형식으로 제공합니다.
트리 내에서 오브젝트를 선택하면 디바이스 화면 내에서 해당 오브젝트의 아웃라인을 표시해주는 색상을 선택할 수 있습니다.
오브젝트 트리의 길이만큼 Width 조절할 수 있습니다.
  • Unity 로그 옵션입니다.
  • All : 모든 로그 출력
  • Error : Error된 로그만 출력
  • Warning: Warning된 로그만 출력
  • Info : Info된 로그만 출력
로그를 출력해주는 버튼입니다.
로그 출력을 정지시키는 버튼입니다.
출력된 로그들을 모두 삭제하는 버튼입니다.
출력된 로그들을 텍스트 파일로 다운받을 수 있는 기능입니다.

3. Dashboard View

1) Memory Capacity Layout

현재 실행하고 있는 디바이스의 메모리 용량을 그래프로 제공합니다.

2) Memory Capacity Layout

현재 실행하고 있는 디바이스의 내부 용량을 그래프로 제공합니다.

3) External Storage Layout

현재 실행하고 있는 디바이스의 외부 용량을 그래프로 제공합니다.

4) FPS (Frames Per Second) Layout

현재 실행하고 있는 게임의 FPS 정보를 그래프로 제공합니다.

5) Control Button 실시간 Pie Chart로 제공되는 정보들을 제어할 수 있는 기능입니다.

Control Button
ICON Description
실시간 변하는 값을 일시 정지하는 버튼입니다.
값을 새로 업데이트해주는 버튼입니다.

4. Report View

1) User Info

G+AIDER Studio에서 로그인된 계정에 대한 정보를 제공합니다.

2) Device Info

현재 연결된 디바이스 정보를 제공합니다.

3) Summary

스크립트 설명과 총 스크립트 실행 횟수 및 결과값, 총 실행시간을 한눈에 보여주는 요약 장표를 제공합니다.

4) Report Review

실행한 스크립트의 상위 경로와 단위 블록의 결과값 및 실행 시간, 수행시간, 해당 스크린샷을 제공합니다. 실패한 결과에 대해서는 해당 스크린샷을 표시해줌으로써 사용자에게 가시적인 결과값을 제공합니다.

5) Export to File

Control Button
ICON Description
현 레포트 페이지를 html 파일로 받아볼 수 있습니다.

Blocks 사용설명서

기본적으로 블록을 사용하는 방법은 다음과 같습니다.

  • 1. 드래그 앤 드롭하여 원하는 위치에 설정할 수 있습니다.
  • 2. 하나 이상의 블록은 현재 워크스페이스에 있는 블록의 바로 뒤에 위치합니다.
  • 3. 각각의 블록은 블록을 설명하는 Tooltip을 포함하고 있습니다.
  • 4. 블록의 오른쪽 마우스를 클릭하면 총 4가지의 기능을 포함하고 있습니다.
  • 1) Duplicate : 해당 블록의 복사본 생성
  • 2) Add/Remove Comment : 해당 블록에 코멘트를 작성/삭제
  • 3) Delete Block : 해당 블록 삭제
  • 4) Help : 블록 사용법 확인

Gestures & Interactions Blocks Gestures는 일반적으로 디바이스 내에서 자주 사용하는 행위들에 대한 블록이며, Interactions는 디바이스로부터 가져올 수 있는 정보 즉, 기본적인 디바이스 기능들에 대한 블록입니다.

Gestures & Interactions Blocks
Block Description
Click with X, Y X좌표, Y좌표 값에 해당하는 위치를 클릭합니다.
Click with IRS IRS Object 블록을 이용해서 해당 오브젝트를 클릭합니다.Ex)
LongClick with X,Y X좌표, Y좌표 값에 해당하는 위치를 길게 클릭합니다. (1초 이상)
Drag with X,Y X좌표, Y좌표 값에 해당하는 위치만큼 드래그합니다.
Swipe with X,Y X좌표, Y좌표 값에 해당하는 위치만큼 스와이프합니다.
OpenNotifications 디바이스 알림 정보를 제공합니다.
OpenQuickSettings 디바이스 설정 퀵을 실행합니다.
PressBack 뒤로가기를 실행합니다.
PressHome 홈 버튼을 실행합니다.
PressMenu 메뉴를 클릭합니다.
PressRecentApps 현재 실행되고 있는 앱을 제공합니다.
PressSearch 찾기 기능을 실행합니다.
Text Input Input 내에 텍스트를 입력하면 해당 텍스트가 디바이스에 입력됩니다.

Image Recognition Blocks이미지 인식 (Image Recognition) 기술을 활용한 블록입니다. 실행 중인 게임 내 오브젝트를 인식하여 이를 템플릿 리스트로 제공된 블록과 화면 내 문자를 인식하는 OCR 블록을 제공합니다.

Image Recognition Blocks
Block Description
Object List 현재 실행되고 있는 모바일 게임 오브젝트 리스트를 IRS로부터 전달받아 오브젝트명 / 이미지(템플릿)로 제공하는 블록입니다.
Validation Object List 블록에서 찾고 싶은 이미지를 선택하여 () 안에 Object List 블록을 넣습니다. 해당 이미지가 게임 내에 있는지 확인하는 블록입니다.Ex)
OCR 게임 화면 내에서 특정 영역에 있는 문자를 인식하는 블록입니다.
  • Default : 완전히 자동화된 페이지 분할
  • Text Line : 단일 텍스트 라인 인식
  • Word : 하나의 단어로 인식
  • Word in a circle : 원을 그리며 한 단어로 인식
  • Character : 하나의 문자로 인식
  • Orientation Script Detection : 방향 및 스크립트 감지
  • Page Segmentation with OSD : OSD를 통한 자동 페이지 분할
  • Page Segmentation with OCR : 자동 페이지 분할
  • Column of text of variable sizes : 텍스트 열 하나 인식
  • Uniform block of vertically aligned text : 수직 정렬된 텍스트의 단일 균일 블록 가정
  • Uniform block of text : 단일 균일한 텍스트 블록 가정
Find Text with OCR OCR 블록을 통해 확인한 영역에 특정 문자가 있는지 확인하는 블록입니다.Ex)

Unity BlockUnity Object를 인식하고 옵션에 따라 해당 Object를 클릭/토글/스크롤/슬라이드/드롭다운 가능한 블록입니다. Assert 는 Object 상태값 확인 및 비교하는 블록입니다.

Unity Block
Block Description
Object Action Unity Object Action을 실행하는 블록입니다. () 안에 Text 블록을 넣어 게임 내에서 특정 텍스트를 입력/클릭하는 블록입니다.Ex)

PreSet Block디바이스 화면에 해당 이미지가 있는지 확인 후 해당 이미지를 클릭할 수 있는 블록셋입니다. 해당 블록셋은 다른 블록들을 조합하여 사용자가 직접 만들 수 있습니다.

Unity Block
Block Description
Repeat, If, Validation, Object List, Click 블록을 조합하여, 화면 내 특정 이미지를 찾고, 해당 이미지를 클릭하는 블록셋 입니다.

Logic Blocks구글 Blockly에서 제공되는 Default Block으로 조건문 및 반복문/연산/텍스트 등 제공됩니다.

Logic Block
Block Description
If-Then-Do 다수 조건을 넣을 경우, if-else if-else-if · · · else와 같이 사용하는 블록입니다. () 클릭하면 else if 를 원하는 만큼 추가할 수 있습니다.
If-do-else If ()안에 특정 조건을 넣어 맞으면 "do 실행" 아니면 "else 실행" 수행하는 기본 if-else 블록입니다.
Repeat * times do do 문을 () 횟수만큼 반복적으로 실행하는 While 블록입니다. Default는 10이며, 사용자가 원하는 횟수를 입력할 수 있습니다.
Repeat while/until do repeat ()안에 특정 조건을 넣어 맞으면 "do 실행" 아니면 빠져나오는 기본 while 블록입니다.
Break out/Continue with next iteration of loop While 블록 안에서만 쓰이는 블록이며, 반복문을 강제적으로 중지시키는 블록입니다.
Logic Compare 양쪽 () 인자를 비교하는 블록입니다. 옵션은 " =, ≠, <, ≤, >, ≥ " 있으며 True / False 반환합니다.
Logic Operation 양쪽 () 에는 Logic Compare 블록을 이용해 조건을 넣습니다. 옵션은 and, or 이 있으며 and는 양쪽 조건이 모두 같으면 True를, or는 양쪽 조건 중 하나만 같아도 True 반환합니다.
Logic Boolean Boolean 타입의 True / False 블록입니다.
Math Number Number 타입의 숫자 블록입니다. 사용자가 원하는 숫자를 입력합니다.
Math Arithmetic Math Number 블록을 사용해 연산하는 블록입니다. 옵션은 +, -, x, /, ^ 있습니다.
Math Trig Math Number 블록을 사용해 삼각함수 연산하는 블록입니다. 옵션은 sin, cos, tan, asin, atan 있습니다.
Math Number Property Math Number 블록을 사용해 해당 숫자의 범위를 판별하는 블록입니다. 옵션은 even, odd, prime, whole, positive, negative, divisible by 있습니다. (even : 짝수, odd : 홀수, prime : 소수, whole : 자연수, positive : 양수, negative : 음수, divisible by : 약수)
Math Round Math Number 블록을 사용해 해당 숫자를 반올림하는 블록입니다. 옵션은 round, round up, round down 있습니다. (round : 반올림, round up : 올림, round down : 내림)
Type Convert Math Number 혹은 Text 블록을 사용해 타입을 변환해주는 블록입니다. 옵션은 String, Number, Boolean 있습니다.
Math on List Lists Create With 블록을 사용해 array 값들을 옵션에 따라 연산하는 블록입니다. 옵션은 sum, min, max, average, median, modes, standard deviation, random item 있습니다. (sum : 합계, min : 최소값, max : 최대값, average : 평균값, median : 중간값, modes : 미확인, standard deviation : 표준편차, random item : 랜덤값)
Math Constrain 특정 숫자 constrain ()가 최소값보다 낮으면 low ()값을, 최대값보다 높으면 high ()값을 출력해주는 블록입니다.
Math Random Int 지정한 두 개의 숫자 사이 범위에서 Int 타입의 랜덤으로 값을 출력해주는 블록입니다.
Math Random Float Float 타입의 값을 랜덤으로 출력해주는 블록입니다.
Text String 타입의 Text 블록입니다. 사용자가 원하는 문구를 입력할 수 있는 블록입니다.
Text Print Text 블록을 출력해주는 블록입니다. Text 뿐만 아니라 Number, Boolean 등 모두 String 타입으로 출력합니다. (Alert)
Variables Get Variables Set에서 선언한 Value를 독립적으로 사용할 수 있는 블록입니다.
Variables Set Value를 선언하는 블록입니다. 값을 설정할 수 있으며 Value 명을 변경 및 추가할 수 있습니다.
Lists Create With 해당 input 수만큼 array로 선언해주는 블록입니다. () 클릭하면 원하는 만큼 array 값을 추가할 수 있습니다.
Lists isEmpty Lists Create With 로 생성한 array 값이 비어 있는지 확인하는 블록입니다. True / False를 반환합니다.
Lists Length Lists Create With 로 생성한 array 의 길이를 출력해주는 블록입니다.
Percent Variable Get 블록 값의 확률을 구해주는 블록입니다. () 안에 variable get 블록을 넣고 Time 안에 전체 횟수를 입력해줍니다. Repeat * Times 블록과 같이 사용하는 것을 권장하며, OpenRandomBox에서 사용되는 블록입니다.
Log Text Print 블록과는 다르게 로그로 출력해줍니다. (console.log)

Block 실행

테스터는 블록이 실행될 때, 실행되고 있는 블록의 테두리 색상을 통해 확인 가능하며,
성공적으로 실행되었는지 실패되었는지 실시간으로 확인할 수 있습니다.

Kinds of Block with Highlighting

Block 실행
Border Color Status Description
초록색 성공 블록 실행의 성공을 의미합니다.
노란색 보류 블록 실행이 아직 진행되지 않음을 의미합니다.
빨간색 실패 블록 실행의 실패를 의미합니다.

Success Handling

블록은 차례대로 실행되며, 실행에 성공한 블록은 초록색 테두리로 표시됩니다. 아직 실행되지 않은 블록은 노란색으로 표시됩니다.

Failure Handling

반면, 실행에 실패한 블록은 빨간색 테두리로 표시됩니다. 이를 통해 스크립트 또는 다수 블록을 실행하면서 각각의 블록의 상태를 확인할 수 있어 테스터가 성공/실패 여부를 한 눈에 파악할 수 있습니다.

스크립트 생성 예시

앞서 소개해드린 Block을 활용하여, 실제 모바일 게임에서 스크립트 작성 및 실행 방법에 대한 예시를 소개하겠습니다.

What Will Do 자체 개발한 "랜덤박스" 모바일 게임에서 박스 클릭 시, 나오는 랜덤 아이템이 있는지 없는지 확인하는 스크립트를 작성합니다. (총 아이템 수 : 5개)

Create Script

  • ① 아이템 별 Value 선언 (Variable Set/Get 이용)
  • ② 박스 클릭 (Click with IRS 와 Object List 이용)
  • ③ 특정 아이템 있는지 확인 (Validation 이용)
  • ④ 특정 아이템이 있다면 Value + 1 증가
  • ⑤ 아이템 수만큼 ③, ④ 반복
  • ⑥ Value 별 나온 횟수에 대한 확률 계산 (Percent 이용)

Result of Script 스크립트 실행에 대한 결과, 실행시간, 런타임, 스크린샷을 레포트로 제공합니다.

확인한 이슈 및 제약사항

블록 실행 시, 예기치 못한 에러가 발생하는 경우가 있습니다. 현재까지 파악된 에러 발생 원인 및 해결방안은 다음과 같습니다.

Issue
Issue StaReason Solutiontus
java.lang.IllegalStateException: UiAutomation not connected! Agent 연결 오류 Run Agent 재실행하여 디바이스 연결 요망
TypeError : Failed to fetch Connection Settings 오류로 인한 API 호출 불가 Agent, IRS, Umgts의 IP/Port 재확인 요망

물음표

궁금한 사항이 있으신가요?