1

Selenium을 사용하여 장고 응용 프로그램을 테스트하고 싶습니다. 내가 읽은 것으로부터 Django는 이미 테스트 부분을 커버하고 자신 만의 테스트를 작성할 수 있습니다.django.test를 따라 Selenium을 사용하여 장고에서 웹 드라이버를 초기화하는 방법

, 여기 셀레늄과 함께 이것을 사용 할 의사가 입니다

<application>/test.py : 내가 셀레늄 로직 (TestTools)를 구현하는 파이썬 클래스를 작성했습니다, 그래서에서 테스트 코드 작성에 집중할 수

from some.path.to.my.utilitary.module import TestTools 


class FormTestCase(TestCase): 
    def setUp(self): 
     self.webui = TestTools() 

    def test_advanced_settings(self): 
     self.webui.go_to('home') 
     self.webui.click('id', 'button-advanced-settings') 
     self.webui.click('id', 'id_setting_0') 
     self.webui.click('id', 'id_setting_1') 
     self.webui.click('id', 'id_setting_2') 
     self.webui.click('id', 'id_setting_3', submit=True) 

    def test_zone_selector(self): 
     self.webui.go_to('home') 
     self.webui.click('id', 'button-zone-selector') 

내 장고 응용 프로그램 :

class TestTools(): 
    def __init__(self): 
     self.driver = webdriver.Firefox(...) 
     ... 

    # Those methods use self.driver to do things 

    def click(...): 
     ... 

    def go_to(...): 
     ... 

    def quit(...): 
     ... 

나는 내가 TestCase 아이의 __init__ 메소드를 오버라이드 (override) 할 수 없습니다 발견, 그래서 setUp 방법에 self.webui = TestTools()을 넣어. 그러나, 그것은 두 번 (각 테스트 방법에 대해 추측) 호출되므로 2 webdrivers를 만듭니다.

내가하고 싶은 일은 ./manage test입니다. 하나의 브라우저 만 열고 모든 테스트를 실행합니다. webdriver 초기화는 어디서 살아야합니까?

감사합니다.

답변

1

다음은 나의 통찰력입니다. 그런 다음

class SeleniumTestCase(LiveServerTestCase): 
    """ 
    A base test case for selenium, providing different helper methods. 
    """ 

    def setUp(self): 
     self.driver = WebDriver() 

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

    def open(self, url): 
     self.driver.get("%s%s" % (self.live_server_url, url)) 

, 내 모든 테스트 케이스는이 SeleniumTestCase에서 파생됩니다

나는 LiveServerTestCase에 따라 사용자 정의 TestCase를 작성하는 것을 선호합니다.

희망이 있습니다.

+0

모든 테스트 케이스가 'SeleniumTestCase'에서 파생 되었기 때문에 각 테스트 케이스가 다른 드라이버에서 실행되고 있다고 가정합니다. 그렇다면 같은 브라우저에서 모든 테스트 케이스를 테스트하는 것은 나쁜 일입니까? –

+2

글쎄, 엄밀히 말하자면, 모든 테스트마다 새로운 브라우저 인스턴스를 열어서 각각 다른 인스턴스를 격리해야합니다. 그러나 테스트를 실행하는 데 많은 시간이 필요하고 매우 중요합니다. 테스트간에 브라우저 인스턴스를 공유 할 수 있습니다. 그런 다음'setUp'을 classmethod'setUpClass'로 바꾸고'tearDown'을 classmethod'tearDownClass'로 대체하십시오. – alecxe