unittest 모듈 기초

2019-05-30

unittest 모듈을 이용한 기능 테스트 확장

User story 사용자 관점에서 어떻게 APP이 동작해야 하는지 기술한 것, 기능 테스트 구조화를 위해 사용

from selenium import webdriver
from selenium.webdriver.firefox.firefox_binary import FirefoxBinary
import unittest

class NewVisitorTest(unittest.TestCase):

    def setUp(self):
        binary = FirefoxBinary('C:\Program Files (x86)\Mozilla Firefox\\firefox.exe')
        self.browser = webdriver.Firefox(firefox_binary=binary)
        self.browser.implicitly_wait(3)

    def tearDown(self):
        self.browser.quit()

    def test_can_start_a_list_and_retrieve_it_later(self):
        self.browser.get('http://localhost:8000')

        self.assertIn('To-Do', self.browser.title)
        self.fail('Finish the Test')
    
if __name__ == '__main__':
    unittest.main(warnings='ignore')

implicitly_wait는 암묵적 대기를 의미하며 괄호안에 있는 시간(초 단위)만큼 대기한다.

필요에 따라 특정 시간 대기 후 테스트를 진행하기 위해 작성한다.

setUp은 시작 전에 작동하는 메소드이며 tearDown은 동작 후에 작동한다.

그래서 테스트를 마치면 알아서 브라우저를 닫아준다.

그리고 테스트를 하는 함수의 이름은 항상 test_로 시작해야 한다.

저게 오타가 나면 ran 0 test in 이런 식으로 오류가 난다.

코드를 실행하면 아래와 같은 결과가 나온다.

PS C:\Users\pjs21\Desktop\TDD> python functional_test.py
F
======================================================================
FAIL: test_can_start_a_list_and_retrieve_it_later (__main__.NewVisitorTest)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "functional_test.py", line 18, in test_can_start_a_list_and_retrieve_it_later
    self.assertIn('To-Do', self.browser.title)
AssertionError: 'To-Do' not found in 'Django: the Web framework for perfectionists with deadlines.'

----------------------------------------------------------------------
Ran 1 test in 5.741s