UI 테스트 자동화 - Android 자동화 Script 작성(Appium / python / unittest)

Soyean·2023년 1월 4일
0

Appium 

목록 보기
4/4

UI 테스트 자동화 - 사전 세팅 을 통해 Appium / Android studio / JAVA / 환경 설정 완료
UI 테스트 자동화 - Android Emulator로 Appium Session 실행 을 통해 디바이스 설정 완료
테스트 프레임 워크 : unittest ( unittest-vs-pytest )
테스트 앱 : ApiDemos-debug.apk

▶︎ unittest

unittest는 단위 테스트를 위한 파이썬의 내장 모듈입니다.
파이썬이 설치되어 있다면 아래처럼 모듈을 불러와서 사용할 수 있습니다.

import unittest

unittest 코드 작성 방법

테스트 케이스는 class 기반 작성되어야 하고 unittest.TestCase를 서브 클래스해서 생성합니다.

각각의 테스트는 test 글자로 시작하는 메서드로 정의해야 합니다.
(test로 시작해야만 테스트 실행자가 해당 메서드를 테스트로 인지할 수 있습니다.)

아래는 테스트 메서드 전과 후에 실행될 명령어를 정의하는 Fixture 함수입니다.

  • setUp() :
    1개의 테스트마다 자동으로 호출하는 사전 코드
    setUp 실행 중 예외 발생 시 테스트 메서드는 실행하지 않음
  • tearDown() :
    테스트 메서드 실행 후 호출되는 코드
    setUp 성공한다면 테스트 성공 여부에 상관없이 실행됨

unittest를 활용한 예제 코드는 아래와 같습니다.

import unittest

class TestStringMethods(unittest.TestCase):
	def setUp(self): 
    	# 테스트 실행 전 실행하는 코드 
        self.widget = Widget('The widget')

    def test_upper(self):
  		# 테스트 메서드 1
        self.assertEqual('foo'.upper(), 'FOO')

    def test_isupper(self):
    	# 테스트 메서드 2
        self.assertTrue('FOO'.isupper())
        self.assertFalse('Foo'.isupper())
    
    def tearDown(self):
    	# 테스트 실행 후 실행하는 코드 
        self.widget.dispose()

if __name__ == '__main__':
    unittest.main() # 테스트 스크립트에 명령행 인터페이스를 제공 

▶︎ Appium Android 실행 코드

테스트 앱을 실행 후 Media 버튼을 클릭하는 간단한 코드를 작성했습니다.
Appium에서 주로 사용하는 메서드는 다음 포스팅에서 정리하겠습니다.

import unittest
import os
from appium import webdriver
from time import sleep
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from appium.webdriver.common.mobileby import MobileBy

class Test(unittest.TestCase):

    def setUp(self):
        app = os.path.join(os.path.dirname(os.path.abspath('__file__')), '/Users/user/Desktop/Study')
        app = os.path.abspath(app)
        self.driver = webdriver.Remote(
            command_executor='http://127.0.0.1:4723/wd/hub',
            desired_capabilities={
                'platformName': 'Android',
                'app': '/Users/user/Desktop/Study/ApiDemos-debug.apk',
                'avd': 'Pixel_3a_API_31'
            })    
    
    def test_method(self) : 
        element = self.driver.find_element(by=MobileBy.ACCESSIBILITY_ID, value='Media')
        element.click()
    
    def tearDown(self):
        self.driver.quit()

if __name__ == '__main__':
    suite = unittest.TestLoader().loadTestsFromTestCase(Test)
    unittest.TextTestRunner(verbosity=2).run(suite)

테스트 실행 시 아래처럼 결과가 노출됩니다.

test_method (__main__.Test) ... ok

----------------------------------------------------------------------
Ran 1 test in 8.496s

OK

참고 :
https://blog.naver.com/PostView.naver?blogId=kybw0123&logNo=222468913356
https://docs.python.org/ko/3/library/unittest.html

▶︎ Android Inspector에서 샘플 코드 구하기

세션 샘플 코드

Android Inspector 에서는 세션 시작된 상태에서 샘플 코드를 제공하고 있습니다. ( 세션 시작하는 방법 )
세션 시작 후 Session Information 클릭 시 노출되는 세션 정보 하단에는 해당 세션의 시작을 위한 샘플 코드가 있습니다.

샘플 코드

Android Inspector에서 Start Recording 기능을 이용하면 녹음 중 수행한 동작에 대한 코드를 확인할 수 있습니다.

ex1 : 네이버 페이지 > 상단 영역 클릭 동작

1) 왼쪽 화면 영역 > 네이버 : 상단 영역 클릭

2) Selected Element > Tab 버튼 클릭

3 ) Recorder 영역 > 코드 확인

el4 = driver.find_element(by=AppiumBy.XPATH, value="//android.view.View[@content-desc=\"3.1절\"]/android.view.View/android.widget.Image")
el4.click()

ex2 : 검색 영역 값 입력

1) 입력 필드 선택 & Selected Element > Send Keys 버튼 클릭

2) Recorder 영역 > 코드 확인

el5 = driver.find_element(by=AppiumBy.XPATH, value="/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.view.ViewGroup/android.widget.FrameLayout[1]/android.widget.FrameLayout[2]/android.webkit.WebView/android.view.View/android.view.View[1]/android.view.View[1]/android.view.View/android.view.View/android.view.View/android.view.View[2]/android.view.View/android.view.View[1]/android.view.View/android.widget.EditText")
el5.send_keys("샘플")

profile
주니어 QA 🐥

0개의 댓글