Appium?
Appium은 다양한 플랫폼에서 모바일 app의 UI를 자동화할 수 있는 테스트 프레임워크다. Windows, Mac, Linux에서 모두 실행 가능하며, 하나의 테스트 스크립트로 Android와 iOS 앱을 모두 테스트할 수 있다. 테스트 스크립트 또한 Java, Python, Ruby, JS 등 자신이 익숙한 언어를 선택할 수 있다는 것도 큰 장점이다. 네이티브와 하이브리드 앱을 모두 테스트할 수 있고, 무엇보다도 오픈소스이기 때문에 무료로 사용할 수 있다. 따라서 현업에서도 앱 테스트시 CI/CD 파이프라인에 통합하여 가장 많이 사용하는 도구 중 하나다.
Appium의 아키텍처
Appium의 아키텍처는 위 그림과 같이 구성되어 있다. 각 구성요소를 살펴보자면,
- Appium Client: 사용자가 작성한 테스트 스크립트를 서버로 전달하는 역할
- Python, Java 등 다양한 언어의 스크립트 가능
- JSON Wire Protocol 또는 W3C WebDriver 표준을 사용해 서버와 통신
- 테스트 스크립트에는 디바이스 정보와 테스트 명령이 함께 포함됨
- Appium Server: 클라이언트로부터 받은 스크립트를 해석하고, 디바이스에서 실행되도록 처리
- Node.js로 구현된 HTTP 서버
- 클라이언트로 받은 요청을 각 플랫폼(Android/iOS)에 맞는 명령으로 변환
- Android는 UiAutomator2, iOS는 XCUITest와 같은 드라이버를 통해 디바이스와 상호작용
- End Device(디바이스): 테스트가 실행되는 실제 환경
- 실제 디바이스 연결 or 에뮬레이터(시뮬레이터)에서 테스트를 수행
- Android는 UiAutomator2, iOS는 XCUITest와 같은 드라이버로 명령을 처리함
Appium 설치 및 세팅
해당 설치 과정은 Ubuntu 24.04에서 진행했으며, Fitware Jay님의 블로그 글을 참고했다. 이 글에서는 Android 테스트에 대해서 다룰 예정이다.
1. Appium 서버 설치
Appium을 설치하기 전에, node.js, npm(서버 설치에 필요), JDK(appium은 java기반이므로), ADB(Android 디바이스 통신에 필요) 소프트웨어 설치가 필요하다. 다음 명령어로 설치 가능하다.
sudo apt update
# Node.js 및 npm 설치
sudo apt install -y nodejs npm
# Java JDK 설치
sudo apt install -y openjdk-11-jdk
# ADB 설치
sudo apt install -y adb
이후 npm을 통해 Appium 서버를 설치한다.
sudo npm install -g appium
# 설치 확인
appium --version
2. Appium Inspector 설치
UI 요소를 식별, 테스크 스크립트 생성 및 디버깅 등의 기능을 제공하는 Appium Inspector를 설치한다. 설치 파일은 Appium Inspector 공식 Github에서 다운로드 받을 수 있으며, Ubuntu의 경우 .AppImage 파일을 다운로드해 실행할 수 있다.
# 실행 권한 부여
chmod a+x ~/Downloads/Appium-Inspector-<version>-linux-x86_64.AppImage
# 실행
~/Downloads/Appium-Inspector-<version>-linux-x86_64.AppImage
Ubuntu 환경에서는 데스크톱 바로가기가 따로 생성되지 않기 때문에, 바로가기가 필요하다면 아래 과정을 통해 생성할 수 있다.
바로가기 생성하기
1. .desktop 파일 생성
vim /opt/share/applications/appium-inspector.desktop
2. .desktop 파일에 아래 내용 추가 (--no-sandbox 옵션은 Ubuntu 24.04 보안이슈로 인해 사용)
[Desktop Entry]
Version=1.0
Name=Appium Inspector
Exec=/path/to/Appium-Inspector-<version>-linux-x86_64.AppImage --no-sandbox # 파일경로
Icon=/path/to/icon.png # 아이콘 이미지 경로
Type=Application
Categories=Development;
Terminal=false
3. 파일 저장 및 실행 권한 부여
chmod +x /opt/share/applications/appium-inspector.desktop
4. 애플리케이션 메뉴 확인
3. Appium Python Client 설치
Python 언어로 된 스크립트를 읽을 수 있는 Appium Python Client 설치가 필요하다. 만약 다른 언어를 사용한다면, 해당 언어에 맞는 클라이언트 설치가 필요하다.
pip install Appium-Python-Client
4. Appium 드라이버 설치
Android에 사용하는 UiAutomator2, iOS에 사용하는 XCUITest 드라이버를 설치한다. 필요할 경우 Flutter 앱과 Windows 앱 테스트에 사용하는 드라이버도 설치할 수 있다.
# UiAtuomator2 설치
appium driver install uiautomator2
# XCUITest 설치
appium driver install xcuitest
# flutter 앱 테스트
appium driver install --source=npm appium-flutter-driver
# Windows 앱 테스트
appium driver install --source=npm appium-windows-driver
5. Android Studio 설치 & 에뮬레이터 생성
Android 기기 연결 또는 가상 에뮬레이터 실행을 위해서 Android Studio를 설치한다. 공식 홈페이지에서 설치를 진행할 수 있다.
이후 Android SDK 경로를 설정해준다. 자신이 사용하는 쉘에 따라서 아래와 같이 설정할 수 있다.
vi ~/.zshrc # 또는 ~/.bash_profile
# 아래 내용 추가
export ANDROID_HOME=~/Android/Sdk
export PATH=$PATH:$ANDROID_HOME/tools:$ANDROID_HOME/tools/bin:$ANDROID_HOME/platform-tools
설치 이후 Android Studio에서 가상 기기를 선택해 에뮬레이터를 생성할 수 있다. 공식 문서를 통해 에뮬레이터를 만들고 관리하는 법이 소개되고 있으나, 구버전을 기준으로 설명하고 있는 듯하다. 현재(2025.2) 기준 Linux 최신 버전은 아래와 사진을 참고해 생성할 수 있다. (Android Studio 우측 메뉴 중 Device Manager 선택)
테스트 실행
Android 테스트 - 샘플 테스트 앱(apk)
Android 앱 테스트를 위한 세팅을 마쳤다. 하지만 Appium으로 Android 앱을 테스트하기 위해선 .apk파일이 필요한데, 과거와 달리 요즘에는 .apk파일을 구하기가 꽤나 어렵다.
감사하게도, 최근 관심을 가지고 있는 QA를 재미있게 블로그에서 Sample Test App을 공유해주셨다. 해당 apk파일을 가지고 테스트를 진행해보려고 한다.
Appium Inspector 실행해 UI Element 확인
테스트 코드를 작성하기 전에, 앱의 UI Element가 어떤 값을 가졌는지 알아야한다. Appium Inspector를 실행하면 해당 요소들의 값을 알 수 있다.
1. Appium Server 실행
Appium Inspector가 앱에 접근하기 위해서는 서버가 실행되어 있어야 한다. 터미널에 아래 명령어를 통해 서버를 실행한다.
appium
2. Appium Inspector 실행
Appium Inspector를 실행시키면 위와 같은 화면이 노출된다. Host, Port 등은 default 세팅이니 이 과정에서는 그대로 둔다.
이후 JSON Representation 부분에 아래와 같이 Capability를 정의해주어야 한다. (실행 시에는 주석 제거)
{
"platformName": "Android",
"appium:automationName": "uiautomator2", // 안드로이드 전용 드라이버
"appium:deviceName": "emulator-5554", // 안드로이드 에뮬레이터는 이 이름으로 고정
"appium:app": ".../app.apk" // apk 경로
}
// iOS 기기
{
"platformName": "ios",
"appium:automationName": "XCUITest", // ios driver
"appium:platformVersion": "17.2",
"appium:deviceName": "iPhone12",
"appium:app": "../app.ipa", // 앱 경로
"appium:wdaBaseUrl": "http://xxx.xxx.xxx.xxx:8100", // wda 로컬 네트워크
"appium:xcodeSigningId": "iPhone Developer",
"appium:xcodeOrgId": "", // xcode org id
"appium:udid": "" // device UDID
}
// iOS 시뮬레이터
{
"platformName": "ios",
"appium:automationName": "XCUITest",
"appium:platformVersion": "17.2",
"appium:udid": "",
"appium:deviceName": "simulator",
"appium:bundleId": "" # 앱 번들 ID
}
이후 "Start Session" 버튼을 클릭하면 에뮬레이터에 앱이 설치되고, Appium Inspector에 앱 화면이 캡처된 형태로 보이게 된다.
테스트 스크립트 작성하기
위에서 알아낸 UI Element를 기반으로 테스트 스크립트를 작성할 수 있다. 테스트 스크립트는 Fitware-Jay님의 Github 코드를 참고해 작성했다.
먼저, 테스트 실행에 필요한 패키지를 설치한다.
pip install pipenv
pipenv install
로컬에서 실행하는 경우 아래 환경변수를 설정한다. (DeviceFarm에서 사용하는 경우 별도의 Capability 설정이 필요없음)
export use_device_farm=false
이후 아래 명령어를 통해 테스트를 실행한다.
# 전체 테스트 실행
pipenv run python -m pytest tests/
실행하면 아래 영상과 같이 테스트가 진행되는 것을 알 수 있다.
참고) 영상에서 디바이스 화면을 볼 수 있는 기능은 VSCode의 확장 기능 중 하나인 Android iOS Emulator이다.
NEXT STEP
이 글에서는 Appium을 간단하게 사용해보는 과정을 다뤄봤다. 다음 글에서는 iOS와 함께 다중 기기를 다루거나, 심화된 테스트 과정을 진행하는 법에 대해서 공부한 뒤 소개해보려고 한다.
'Minding's Programming > Knowledge' 카테고리의 다른 글
[OmniParserV2] LLM과 함께 사용할 수 있는 화면 인식 GUI 자동화 도구 (설치 및 실행 방법) (1) | 2025.02.25 |
---|---|
[Python 3.13] Python에서 GIL을 비활성화 할 수 있다? (0) | 2025.02.24 |
[프로젝트] Catch Me My Capital - 합리적인 투자 의사결정을 위한 금융 데이터 파이프라인 및 백테스팅 도구 (테스트 도입 편) (0) | 2025.02.18 |
[QA/Testing] Charles를 이용해 테스트해보기 (Throttle test, Breakpoint test) (0) | 2025.02.15 |
[Postman/Github Actions] Github Actions를 통해 API 테스트 자동화하기 (0) | 2025.02.13 |