unittest 로 테스트 케이스를 실행하려면 setUP
, tearDown
메서드가 필수적이다. 그러나 모든 테스트 케이스에 setUP
, tearDown
메서드를 포함하게되면 유지보수 및 코드 가독성이 저하된다. 따라서 다음과 같이 모듈을 분리하였다.
WebDriverSetup.py : 모든 테스트 케이스에 공통적으로 사용하는 setUP
, tearDown
메서드 정의한다. 그리고 각 테스트 케이스는 WebDriverSetup
를 상속받아 테스트 케이스만 구현한다
import unittest
import os
from appium import webdriver
class WebDriverSetup(unittest.TestCase):
def setUp(self):
app = os.path.join(os.path.dirname(__file__), '/Users/taekyeong.jung/Desktop/workspace/','myrealtrip.apk')
app = os.path.abspath(app)
self.driver = webdriver.Remote(
command_executor='http://127.0.0.1:4723/wd/hub',
desired_capabilities={
'app': app,
'platformName': 'Android',
'udid': 'emulator-5554',
'platformVersion': '11.0',
'automationName': 'uiautomator2',
'appPackage': 'com.mrt.ducati.dev',
'appActivity': 'com.mrt.ducati.LauncherActivity',
'chromeOptions': {'w3c': False}
})
def tearDown(self):
self.driver.quit()
if __name__ == '__main__':
unittest.main()
from TestBase.WebDriverSetup import WebDriverSetup
from Pages.page_splash import SplashPage
class LoginTest(WebDriverSetup):
def test_case_1(self):
splash = SplashPage(self.driver)
splash.click(SplashPage.btn_positive)
다이어그램으로 그려보면 이렇게..
구글링을 해보니 내가 원하는 자동화 구조 설계를 완벽히 지원하는 라이브러리가 있어 인스톨하였다. unittest
와 html-testRunnert
를 함께 사용하면 위 다이어 그램의 모든 스텝을 한번에 해결할 수 있다
pip3 install html-testRunner==1.2.1
import unittest
import HtmlTestRunner
from Tests.TEST_BASIC.BASIC_login import LoginTest
""" 테스트 로더로 테스트 케이스 불러오기 """
testcase = unittest.TestLoader().loadTestsFromTestCase(LoginTest)
""" 테스트 스위트 구성 """
testsuite = unittest.TestSuite([testcase])
""" 테스트 러너로 테스트 실행 """
HtmlTestRunner.HTMLTestRunner(
output="Reports", # 보고서 생성할 폴더 이름
report_name="Report", # HTML 파일 이름
report_title="Test Results", # HTML 파일 타이틀
combine_reports=True # True : 테스트 케이스가 여러개 일 때 보고서 하나로 합치기
).run(testsuite)
├── Config # 공통으로 사용하는 정보 정의 (계정 등)
│ ├── __init__.py
│ └── config.py
├── Drivers # 필요한 드라이버들 넣어주자
│ └── chromedriver
├── Pages
│ ├── __init__.py
│ ├── page_Base.py # 모든 페이지에서 공통으로 사용할 메서드 정의
│ └── page_splash.py # 스플래시 화면의 locator 와 이 화면에서만 사용할 메서드 정의
│ └── page_mainhome.py # 메인홈 화면의 locator 와 이 화면에서만 사용할 메서드 정의
├── Reports
│ └── Report_2022-01-16_10-24-14.html # html-testRunner로 생성된 리포트 저장
├── TestBase
│ ├── WebDriverSetup.py # 테스트 케이스에서 공통으로 사용하는 setUp(), tearDown() 메서드 정의
│ ├── __init__.py
├── Tests
│ ├── TEST_BASIC
│ │ ├── BASIC_login.py # 로그인 테스트 케이스
│ │ ├── __init__.py
│ ├── TEST_SCENARIO
│ │ ├── SCENARIO_login.py # 로그인 테스트 시나리오
│ │ └── __init__.py
│ ├── __init__.py
├── __init__.py
├── requiremenys.txt
└── runner.py # 테스트 러너로 테스트 실행
안녕하세요. app 자동화 테스트 구현에 큰 도움 받고있습니다.
한 개 클래스 내에 2개 메소드를 만들고 테스트러너를 돌리니 첫번째 메소드 완료되면 앱을 종료하고 앱을 재실행해서 두번째 메소드를 실행하는데요. 불필요한 앱 재기동을 없애고 싶은데 혹시 이런 경험있으신지 궁금합니다.