본문 바로가기

BE/Appium

[Appium] 앱 테스트 자동화 (2) 테스트 스크립트 구현

목차
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) 테스트 스크립트 구현