이전 포스팅을 통해서 Appium Server와 Android Studio 그리고 UIAutumator2, Appium-Python-Client를 설치했다.
관련해서 adb또한 정상적으로 동작하는지 또한 모두 확인을 마쳤다.
이번에는 Android Studio를 통해서 Emulator를 실행시키고, 이후 Python으로 작성된 Test Code를 Appium-Client를 통해서 Android Device를 제어할 수 있는지 확인해보자!
(여기서는 실제 단말이 아닌 Emulator를 의미하고, 실제 단말을 연결하면 실제 단말이 제어되리라 생각된다.)
먼저 터미널을 열어서 아래 명령어를 통해서 appium server를 실행시키도록 하자.
$ appium


Android Studio에서 프로젝트를 생성한 다음 가상단말을 실행시키면 된다.
이 상태에서 로컬에서 정상적으로 Emulator가 실행중인지 확인하기 위해 터미널에서 adb devices 명령어를 통해 확인한다.

adb가 정상적으로 되지 않는다면, Android SDK Platform-Tools를 다운로드받고 환경변수도 정상적으로 되어있는지 확인한다.
위와같이 adb devices 명령어를 통해 단말이 정상적으로 조회가 된다면 Python을 통해서 자동화 스크립트를 작성할 준비가 되었다!
Appium HomePage를 통해 아래와 같이 테스트 코드를 복사한 다음 실행시켜보자.
일단 아래 코드를 test.py 라고 저장해둔다.
import unittest
from appium import webdriver
from appium.options.android import UiAutomator2Options
from appium.webdriver.common.appiumby import AppiumBy
capabilities = dict(
platformName="Android",
automationName="uiautomator2",
deviceName="Android",
appPackage="com.android.settings",
appActivity=".Settings",
language="en",
locale="US",
)
appium_server_url = "http://localhost:4723"
class TestAppium(unittest.TestCase):
def setUp(self) -> None:
self.driver = webdriver.Remote(
appium_server_url,
options=UiAutomator2Options().load_capabilities(capabilities),
)
def tearDown(self) -> None:
if self.driver:
self.driver.quit()
def test_find_battery(self) -> None:
el = self.driver.find_element(by=AppiumBy.XPATH, value='//*[@text="Battery"]')
el.click()
if __name__ == "__main__":
unittest.main()
먼저 Appium Test 코드는 unittest를 기반으로 동작한다.
unittest는 python 기본 라이브러리로 테스트가 시작될때 setUp 함수가 시작되고 끝날때 tearDown 함수가 실행된다.
그리고 test_로 시작되는 함수가 실행되는데, 코드를 분석해보면 생각보다 간단하다.
Setting앱을 실행시키고 Battery를 터치하고 끝난다.
터미널에 python test.py 라고 입력 후 실행시켜보면, Android Studio내에 Emulator가 셋팅앱을 실행시키고 배터리를 누른다음 정상적으로 종료되는걸 볼 수 있다.

동시에 다른 터미널에 실행시켜 두었던 Appium Server도 열심히 일하는걸 볼 수 있다.
