서론

Gamium은 두 가지 구성 요소로 이루어져 있습니다. Gamium Engine과 Gamium Client 입니다. 모든 테스트에는 시나리오가 있고, 게임 테스트 자동화 툴들은 이 테스트 시나리오 대로 동작할 수 있도록 도와주는데요. 이 테스트 스크립트가 동작하기 위해선 Game내부와 통신을 해야합니다.

graph RL; subgraph Game Program S[Gamium Engine] end C[Gamium Client] C -- Request -->S S -- Response -->C;

이 글에서는 이전에 설정한 Gamium Engine과 통신하는 Gamium Client를 이용하여 UI를 Click 등을 실행해볼 예정입니다.

Gamium Client 준비하기

Python 설치하기

  1. 3.x 버전의 Python을 설치해주세요. Download link

다운로드를 누른 후 자신의 운영체제에 맞는 installer를 다운받고 설치를 진행합니다.

Windows는 Powershell, MacOS는 Terminal을 실행해 python3 --version, pip --version을 입력했을 때 설치한 버전이 뜨면 설치가 정상적으로 완료된 것입니다

python3 --version
> 3.9.13

저는 파이썬 3.9.13 버전을 사용합니다

PIP 설치하기

방법 1) Powershell 또는 Terminal을 열고 curl https://bootstrap.pypa.io/get-pip.py | python3 명령어를 사용해 설치합니다.

방법 2) https://bootstrap.pypa.io/get-pip.py 에 접속해서 모든것을 복사한 후 get-pip.py 파일을 만들고 Powershell 또는 Terminal을 열고 get-pip.py 파일이 있는 경로에서 python3 get-pip.py 명령어를 통해 설치합니다.

IDE 설치하기

VSCode를 이용해서 스크립트를 작성하도록 하겠습니다. 홈페이지에서 설치파일을 다운로드 받고 설치를 완료합니다.

프로젝트 만들기

원하는 경로에 폴더를 하나 만듭니다. gamium-testing 이름의 폴더를 만들어 보도록 할게요. VSCode를 실행하고, Open folder 버튼 또는 메뉴를 클릭해 gamium-testing 폴더를 엽니다.

ctrl + ` 단축키를 통해 VSCode에서 터미널을 열고, 아래의 명령어를 입력해 파이썬 가상환경을 만들어 줍니다.

python3 -m venv .venv

이제 gamium-testing 하위에 .venv 라는 폴더가 생성된 것을 볼 수 있습니다.

다음은 이 가상환경을 활성화 해야합니다. 아래와 같이 명령어를 입력해 주세요.

# for Windows
.venv\Scripts\activate.bat

# for MacOS & Linux
source .venv/bin/activate

가상환경이 잘 활성화 되었는지 확인합니다. 터미널에서 (.venv) 현재경로: 로 보이시면 잘 활성화 된 것입니다.

Gamium 패키지 설치하기

파이썬 가상환경을 유지한 상태에서 아래 명령어를 입력하세요.

pip install gamium
혹은 requirements.txt 파일을 gamium-testing 폴더안에 생성하고 gamium>=2.0.5 내용을 쓴 후 저장합니다. 그 이후 pip install -r requirements.txt 명령어를 통해 설치할 수 있습니다.

selenium 패키지가 설치가 완료되었나요? 이제 스크립트를 작성할 수 있습니다!

버튼 클릭해보기

gamium-testing 하위에 test.py 파일을 만든 후 아래와 같이 작성해 봅니다.

from gamium import *

# 드라이버 세션을 시작합니다.
service = TcpGamiumService("127.0.0.1", 50061)
gamium = GamiumClient(service)
# 연결을 시작합니다.
gamium.connect()
# ui를 조작할 수 있는 객체를 가져옵니다.
ui = gamium.ui()

# 버튼을 클릭합니다.
ui.click(By.path("/Canvas[1]/Button[1]"))

Unity Editor창에서 Play버튼을 누릅니다.

VSCode 터미널에서 아래 명령어를 통해 실행해봅니다.

python3 test.py

이제 버튼이 클릭되어 아래와 같이 Clicked로 메시지가 변경하는것을 확인할 수 있습니다. 👏

👉
실제 게임UI를 테스트 자동화할때에는 다양한 케이스가 발생합니다. 가령 버튼을 클릭하려고 하는데 타이밍이 안 맞아 버튼이 나오지도 않았는데 실패하는 경우가 있습니다. 이럴 경우를 대비하여 ui.click(locator)를 호출할 경우 locator에 해당하는 오브젝트가 interactable할때까지 기다린 후에 click을 하게 됩니다.

Gamium Editor 사용하기

# 버튼을 클릭합니다.
ui.click(By.path("/Canvas[1]/Button[1]"))

위 줄은 어떤 의미일까요?
우선 "/Canvas[1]/Button[1]" 는 위 버튼이 위치한 GameObject의 Path입니다. 이 Path를 조회할 수 있는 방법을 아래에서 알아볼 예정이구요. ui.click(By.path("/Canvas[1]/Button[1]"))"/Canvas[1]/Button[1]" 경로를 통해 GameObject를 찾고 해당 GameObject를 클릭하라는 의미입니다. 따라서 가운데 버튼이 클릭된 것이었습니다!

그러면 위 버튼의 GameObject Path는 어떻게 조회할까요? GamiumEditor를 통해서 조회할 수 있습니다.

  • Unity에 Top Menu에서 Window > GamiumEditor 를 선택해주세요.
  • 아래와 같이 Gamium Editor 창이 나오게 됩니다. 이 창은 Unity 내에서 다른 창에도 붙일 수 있으니 드래그해서 원하는 창에 고정해주세요.
  • 이 상태에서 Hierarchy 창에 있는 Button을 다시 눌러볼까요? Gamium Editor 창에서 GameObject Path가 변경됨을 알 수 있습니다. 이렇게 해서 GameObject Path를 얻을 수 있습니다. 😊
    GameObject Path는 Hierarchy 창에 있는 GameObject의 경로를 나타내는 것이죠.
    앞으로도 다른 GameObject를 클릭하고 싶을 때는 이처럼 경로를 얻어내고 GamiumClient 에 넣어주게 되면 조작할 수 있습니다.

마치며

이번 글에서는 버튼을 만들고 해당 버튼을 게임프로젝트 외부에 있는 Python 스크립트를 통해 클릭해 보았는데요. 어떠셨나요? 좀 신기했을까요? 다음 글에서는 특정 GameObject가 나올 때까지 기다린 후에 클릭하고, Drag를 하는 등 추가기능에 관해 설명하겠습니다.