Appium Capabilities 설정하기 (Mac OS + Android OS)

Seunghoon Yoo·2024년 4월 25일
0
post-thumbnail

Capabilities?

  • Appium 을 이용한 모바일 애플리케이션 자동화 테스트 수행 전, 사전 셋업 작업을 의미
  • 예를 들면 앱의 정보나 플랫폼 이름, 패키지 이름 등을 미리 세팅하여 사전 조건을 충족시키고 이를 Appium 서버에 전달한다.
  • 한 마디로, 어떤 모바일 디바이스에서 수행할 지, 어떤 버전의 운영체제를 사용할 지, 어떤 앱을 테스트할 지 등의 정보를 담은 딕셔너리
  • Android OS 와 iOS 의 Capabilities 키는 다르게 구성된다. 이 글은 Android OS 의 Capabilities 구성을 기록한다.

주요 Capabilities Key

  1. platformName
    • 사용하는 모바일 운영 체제를 지정 (ANDROID or IOS)
  2. platformVersion
    • 테스트할 디바이스의 운영체제 버전을 지정 (예시 : 14.0, 13.3) 등
  3. deviceName
    • 테스트할 디바이스의 이름을 지정
    • 실제 단말기는 정확한 이름이 필요
    • 에뮬레이터는 일반적인 모델명 사용
  4. app
    • 테스트할 모바일 애플리케이션의 경로 지정 (apk or ipa 파일이 있는 경로)
  5. udid
    • 디바이스의 고유 식별자를 지정
    • adb devices 명령어로 현재 실행 중인 디바이스의 udid 확인 가능
  6. noReset
    • true 로 설정하면 테스트 실행 전후로 앱 데이터를 초기화하지 않음. 테스트 사이의 데이터 유지가 필요할 때 유용
  7. fullReset
    • ture 로 설정하면, 테스트 시작 전에 앱을 완전히 삭제하고 다시 설치. 매번 깨끗한 캐시를 가진 상태로 테스트를 시작할 때 유용
  8. 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 서버를 띄우는 로직이 추가되었다.
profile
QA Engineer

2개의 댓글

comment-user-thumbnail
2024년 4월 28일

capabilities에 app의 액티비티 정보가 보이는데 삭제하시는게 바람직할 것 같습니다..

1개의 답글