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 초기화는 어디서 살아야합니까?
감사합니다.
모든 테스트 케이스가 'SeleniumTestCase'에서 파생 되었기 때문에 각 테스트 케이스가 다른 드라이버에서 실행되고 있다고 가정합니다. 그렇다면 같은 브라우저에서 모든 테스트 케이스를 테스트하는 것은 나쁜 일입니까? –
글쎄, 엄밀히 말하자면, 모든 테스트마다 새로운 브라우저 인스턴스를 열어서 각각 다른 인스턴스를 격리해야합니다. 그러나 테스트를 실행하는 데 많은 시간이 필요하고 매우 중요합니다. 테스트간에 브라우저 인스턴스를 공유 할 수 있습니다. 그런 다음'setUp'을 classmethod'setUpClass'로 바꾸고'tearDown'을 classmethod'tearDownClass'로 대체하십시오. – alecxe