[자동화] Airtest

·2022년 9월 27일
0

Unity Study

목록 보기
8/8

최근 검토한 자동화 도구 Airtest에 대한 간략한 내용을 기재합니다.

Airtest란?

NetEase games에서 개발한 OpenCV를 활용한 자동화 프레임워크이다. (중국)
IOS, Andriod 모두 사용 가능하고 web또한 자동화가 가능하다.
자동화 코드는 python 언어로 작성하며, Airtest IDE를 제공하기에 IDE에서 손쉽게 스크립트 작성이 가능하다.
또한 IDE에서 테스트 실행 및 테스트 보고서도 제공된다.

🧐 Poco ?
Poco는 Appium과 유사한 게임 자동화 프레임워크로, Unity3D및 Cocos2dx와 같은 게임엔진을 지원한다. (단 Poco-SDK를 프로젝트와 연결이 필요하다.)

🧐 OpenCV?
Open CV는 Open Source Computer Vision의 약자로 영상 처리에 사용할 수 있는 오픈 소스 라이브러리이다.1999년 인텔사에서 초기 개발을 시작했으며 2006년도에 처음 사용 가능한 1.0버전이 출시되었다.

Airtest 사용

사전 세팅

  • 디바이스 개발자모드 및 USB 디버깅 모드 ON
  • PC에 ADB 세팅
  • Airtest 홈페이지에서 Airtest IDE를 설치

Airtest IDE

  • 1.Airtest 보조창 - 주로 Airtest 프레임워크에서 코드를 생성할 때 사용
  • 2.스크립트 편집창 - 자동화 스크립트 작성 시 사용
  • 3.deivce 창 - 기본적으로 디바이스 연결을 위한 화면이 노출되고, 연결되면 디바이스 화면이 노출된다.
  • 4.Poco 보조창 - Appium Inspector 와 유사하게 요소 정보 캡쳐에 사용되며, Poco 프레임워크 코드 작성 시 사용
  • 5.로그 확인 창 - 코드가 실행되지 않고 있을 때 poco 보조창에서 선택된 요소의 정보를 표시하고, 코드가 실행된 후에는 런타임 코드가 표시된다.

Airtest 보조창

기본적으로 각 메뉴에 마우스 오버 시 사용 방법에 대해 안내를 해주고 있다.touch : 이미지 등 클릭 동작, 화면에서 이미지 영역을

wait : 이미지가 나타날 때 까지 대기,
swipe : 스와이프 동작, 스와이프 코드가 실행되면 이미지를 찾아 아래로 스와이프 한다.
exists : 이미지가 존재하는지 확인, True False 를 반환한다.
text : 텍스트를 입력
keyevent : home, back, 전원 버튼 등을 입력한다. adb shell input keyevent KEYNAME 와 동일하다
snapshot : 스크린 샷
sleep : 일정 시간 대기
( assertion )
assert_exists : (touch와 기능 같음) 이미지 존재 여부 확인. (텍스트의 경우 리포트에 남길 텍스트 기재)
assert_not_exist : (touch와 기능 같음) 이미지가 존재하지 않는 것 확인.
assert_equal : 같은지 확인.
assert_not_equal : 같지 않은지 확인.

Airtest 기본 사용법

📍 devices를 PC와 연결한다.

📍 정상적으로 연결됐다면 Airtest의 Devices 창에 연결된 디바이스가 노출되고, connect 를 누르면 디바이스 화면이 노출된다.

📍 Airtest 보조창을 이용해 테스트 하고자 하는 케이스 스크립트를 작성한다.
🙋 현재 맡고있는 프로젝트이기에 일부 블러 처리를 하였다.

(1) 앱 실행
(2) 로그인 씬이 모두 로드됨을 체크,
(3) A 버튼이 활성 상태일 경우 A 버튼을, 아닐 경우 B 버튼을 클릭
(4) 메인로비가 활성된 경우 (C버튼이 find 될 경우) C버튼 클릭

📍 작성이 완료된 후 테스트를 실행한다

📍 테스트 실행 후 생성된 리포트

📍 Airtest 프로젝트 파일 내부를보면 아래와 같이 Python 파일과 이미지가 저장되어 있다.

저장된 python 파일 내부 구조

# -*- encoding=utf8 -*-
__author__ = "SB"

from airtest.core.api import *

auto_setup(__file__)
start_app("com.**********")

wait(Template(r"tpl1663662808413.png", record_pos=(-0.425, -0.168), resolution=(2280, 1080)))
sleep(2)

loadBtnExst = exists(Template(r"tpl1663659090457.png", record_pos=(-0.003, 0.096), resolution=(2280, 1080)))

if loadBtnExst:
    touch(loadBtnExst)

else :
    touch(Template(r"tpl1663662908791.png", record_pos=(0.001, 0.044), resolution=(2280, 1080)))
    
wait(Template(r"tpl1663666884830.png", record_pos=(-0.462, -0.121), resolution=(2280, 1080)))
touch(Template(r"tpl1663666884830.png", record_pos=(-0.462, -0.121), resolution=(2280, 1080)))

Airtest 리포트

리포트는 스크립트가 실행된 후, 생성이 가능하다.
리포트는 자동으로 생성되지 않고 최초에는 log 파일만 생성된 상태이다.
log 파일 경로 (메뉴 > Options > Settings > Default Log Path)
Airtest IDE > 메뉴 > Run > View Report 를 선택하면 log 파일을 기준으로 리포트가 생성된다.

생성경로 : file:///C:/Users/{user}/AppData/Local/Temp/AirtestIDE/scripts/

리포트 기본 구조

  • 1.테스트 요약 - 테스트 성공,실패 및 스텝, 실행 시간 등
  • 2.테스트 스텝 이미지 퀵뷰
  • 3.테스트 결과 소팅 메뉴
  • 4.상세 테스트 스텝 및 결과

마무리

  • 이미지 인식 방식의 UI 테스트 자동화는 프로젝트가 안정화 된 후에 정식 프로세스로 도입해보는 것이 좋겠다...... ^^;
  • 중국사람들 짱이다 ..
  • 다음번에는 좀 더 자세한 스크립팅 포스트를 준비해봐야겠다 ...

📚 참고

profile
삶을 스스로 통제하고 있다는 느낌을 받을 때 더 행복하고 성공한다.🍃

1개의 댓글

comment-user-thumbnail
2023년 12월 6일

안녕하세요. 궁금한 사항이 있어 문의 남깁니다.
해당 프로그램이 모바일 앱에만 적용가능한 툴일까요..? 컴퓨터 프로그램에도 응용해서 사용이 가능할까요?

답글 달기