Capabilities?
- Appium 을 이용한 모바일 애플리케이션 자동화 테스트 수행 전, 사전 셋업 작업을 의미
- 예를 들면 앱의 정보나 플랫폼 이름, 패키지 이름 등을 미리 세팅하여 사전 조건을 충족시키고 이를 Appium 서버에 전달한다.
- 한 마디로, 어떤 모바일 디바이스에서 수행할 지, 어떤 버전의 운영체제를 사용할 지, 어떤 앱을 테스트할 지 등의 정보를 담은 딕셔너리
- Android OS 와 iOS 의 Capabilities 키는 다르게 구성된다. 이 글은 Android OS 의 Capabilities 구성을 기록한다.
주요 Capabilities Key
- platformName
- 사용하는 모바일 운영 체제를 지정 (ANDROID or IOS)
- platformVersion
- 테스트할 디바이스의 운영체제 버전을 지정 (예시 : 14.0, 13.3) 등
- deviceName
- 테스트할 디바이스의 이름을 지정
- 실제 단말기는 정확한 이름이 필요
- 에뮬레이터는 일반적인 모델명 사용
- app
- 테스트할 모바일 애플리케이션의 경로 지정 (apk or ipa 파일이 있는 경로)
- udid
- 디바이스의 고유 식별자를 지정
adb devices
명령어로 현재 실행 중인 디바이스의 udid 확인 가능
- noReset
- true 로 설정하면 테스트 실행 전후로 앱 데이터를 초기화하지 않음. 테스트 사이의 데이터 유지가 필요할 때 유용
- fullReset
- ture 로 설정하면, 테스트 시작 전에 앱을 완전히 삭제하고 다시 설치. 매번 깨끗한 캐시를 가진 상태로 테스트를 시작할 때 유용
- automationName
- 사용할 자동화 프레임워크 지정
- Android OS 의 경우에는 UiAutomator2
실제 capabilities 적용한 소스코드
- Appium 도 결국 모바일 애플리케이션 자동화 테스트를 위한 과정이므로, behave 프레임워크를 조합하여 사용하고자 한다.
- 이에 따라 behave에서 지원하는 environment.py 모듈에서 before_all 함수에 capabilities 를 셋업
- 테스트 시작 전 수행해야 하는 과정이기 때문
from appium import webdriver
from appium.webdriver.appium_service import AppiumService
appium_service = AppiumService()
BASE_DIR = os.getcwd()
app = os.path.join(BASE_DIR, 'apps', apps)
print("Base Dir : " + BASE_DIR)
print("App Path : " + app)
def before_all(context):
appium_service.start()
print("==================== appium service started ====================")
capabilities = {
"app": app,
"platformName": "ANDROID",
"appium:platformVersion": "14",
"appium:automationName": "UiAutomator2",
"appium:appActivity": ...,
"appium:appPackage": ...,
"appium:udid": "emulator-5554",
"appWaitActivity": "...",
"autoAcceptAlerts": "true",
"autoGrantPermissions": "true",
"disableWindowAnimation": "true"
}
context.driver = webdriver.Remote(
command_executor="http://127.0.0.1:4723",
desired_capabilities=capabilities
)
- 위에서는
autoAcceptAlerts
, appActivity
, appWaitActivity
같은 특수한 키가 들어가있는데, 액티비티는 안드로이드 애플리케이션에서 사용자 인터페이스의 한 화면을 칭한다.
- appActivity
는 테스트할 애플리케이션의 메인 액티비티를 지정
- appWaitActivity
는 애플리케이션 시작 시 기다려야 할 액티비티 목록 지정 (여러 액티비티를 콤마로 구분할 수 있음. 단 하나의 문자열로 전달해야 함)
- autoAcceptAlerts
는 자동으로 앱 알림을 수락할 지에 대한 여부를 설정. true로 설정되어 테스트 중 발생하는 모든 팝업이 자동으로 수락됨, 불필요한 시나리오를 생략할 수 있음
- autoGrantPermission
은 애플리케이션에 필요한 모든 권한을 자동으로 부여. true로 설정되어 앱 설치 시 요구되는 권한들이 모두 자동으로 승인됨
- disableWindowAnimation
은 애플리케이션에 기본적으로 구현된 애니메이션 기능을 비활성화함. true로 설정되어 있어 테스트 일관성과 성능을 개선할 수 있음
- 또한, 기본적으로 appium 서버가 실행되고 있는 상태를 유지해야 하지만, 수동으로 제어하기엔 번거로우므로 AppiumService 객체를 활용하여 behave 테스트 수행 시 자동으로 appium 서버를 띄우는 로직이 추가되었다.
capabilities에 app의 액티비티 정보가 보이는데 삭제하시는게 바람직할 것 같습니다..