목차
1. Appium 기동
2. 디바이스 설정
3. Python 스크립트를 통한 앱 동작
📌 1. Appium 기동
앱피움을 활용해 단말을 작동시키기 위해서는 Selenium Web driver 을 활용합니다.
Selenium Web driver는 웹 테스팅 도구로 많이 사용하는데요.
크롬 등 환경에서 웹 어플리케이션을 테스팅할 때 사용할 뿐만 아니라 앱 테스팅에도 사용하는 크롤링 드라이버입니다.
특히 아래에 구현된 것(driver.find_element_by_id(input).click())과 같이 driver를 활용해 클릭/입력 등 이벤트 등을 일으키고자 사용합니다. 추가로 Senium Webdriver를 활용해 Remote 하는 주소인 http://127.0.0.1:4723/wd/hub의 경우 Appium 서버 주소입니다. 아래는 Appium을 기동하기 위한 Python 스크립트입니다.
def run() :
desired_caps = setting("adb device name") #device name
driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)
driver.switch_to.context('NATIVE_APP')
#python test script
findElementClickByID(driver, "element ID")
driver.quit()
📌 2. 디바이스(Device) desired_capabilities 설정
Appium 테스트 드라이버에게 내 단말 및 환경 세팅을 알려주기 위해 desired capabilities라는 JSON 객체를 사용합니다.
desired capability는 Appium 관련 단말(Android/iOS) 정보 및 앱 정보가 들어가 있습니다.
desired capability 의 경우 setting() 함수를 별도 구현해 따로 관리할 수 있도록 구현했습니다.
* desired capability 파라미터
- platform_name : 사용할 모바일 OS
- platform_version : 사용할 모바일 플랫폼 버전
- device_name : 사용할 모바일 단말 이름 (adb list > adb 연결된 장치 이름)
- app_activity : 패키지에서 최초 실행할 앱 액티비티
- app : Appium 기동할 앱의 위치
- automationName : 자동화 엔진 이름 (Android의 경우 UiAutomator2)
- ignoreHiddenApiPolicyError : Security exception: Permission denial 경고 무시
- autoGrantPermissions : 권한 자동 허용
def setting():
device = {
"platform_name" : "Android",
"platform_version" : "11.0",
"device_name" : "",
"app_activity" : "com.test.main.mainActivity",
"app" : "../test.apk"
}
desired_caps = {
'platformName': device['platform_name'],
'platformVersion': device['platform_version'],
'deviceName': device['device_name'],
'app': device['app'],
'autoGrantPermissions': 'true',
'automationName': 'UiAutomator2',
'ignoreHiddenApiPolicyError': 'true',
'appActivity': device['app_activity']
}
return desired_caps
📌 3. Python 스크립트를 통한 앱 동작
Python 테스트 스크립트는 앱 구현 동작에 따라 아래와 같이 함수로 구현했습니다.
▷ def driverBack(driver): 디바이스 뒤로가기(Back) 버튼 동작
▷ def findElementClickByID(driver, input): 엘리먼트의 ID를 찾아 클릭 동작
▷ def findElementClickByXPath(driver, input): 엘리먼트의 Xpath 에 따라 클릭 동작
▷ def findElementClickByInput(driver, element, input): 입력값에 따라 입력 동작
추가로 time.sleep(1) 의 경우
이벤트가 연달아 발생할 경우 앱 동작이 정상적으로 작동되지 않을 수 있기 때문에 1초간 일시정지하도록 하였습니다.
def driverBack(driver):
try :
driver.back()
return True
except Exception as e:
print(e)
return False
def findElementClickByID(driver, input):
try:
driver.find_element_by_id(input).click()
time.sleep(1)
return True
except Exception as e:
print(e)
return False
def findElementClickByXPath(driver, input):
try:
driver.find_element_by_id(input).click()
time.sleep(1)
return True
except Exception as e:
print(e)
return False
def findElementClickByInput(driver, element, input):
try:
driver.find_element_by_id(element).send_keys(input)
time.sleep(1)
return True
except Exception as e:
print(e)
return False
[관련 게시글]
앱 테스트 자동화 (1) Appium 설치
앱 테스트 자동화 (2) 테스트 스크립트 구현
'BE > Appium' 카테고리의 다른 글
[Appium] 앱 테스트 자동화 (1) Appium 설치 (0) | 2021.11.02 |
---|---|
[Android] ADB 설치/실행/연결하기 (USB/WIFI) (0) | 2021.04.26 |
[Android] "zsh : command not found : adb" 오류 해결 (2) | 2021.04.24 |