python - Django LiveServerTestCase fails to load a page when I run multiple tests -
i trying run multiple tests within 1 django liveservertestcase. when run single test (with others commented) works expected. when run test case 2 tests first 1 works fine second 1 loads page "internal server error" message.
code:
from django.test import liveservertestcase selenium.webdriver.firefox.webdriver import webdriver class myliveservertestcase(liveservertestcase): """ basecleass selenium test cases """ @classmethod def setupclass(cls): cls.driver = webdriver() cls.url = cls.live_server_url super(myliveservertestcase, cls).setupclass() @classmethod def teardownclass(cls): cls.driver.quit() super(myliveservertestcase, cls).teardownclass() class admineditformtest(myliveservertestcase): """ test case """ def test_valid_data(self): """ test when user enters correct data """ self.driver.get(self.url) # ... def test_invalid_data(self): """ test when user enters incorrect data """ self.driver.get(self.url) # ... if use close() instead of quit() fails "error 98: address in use" similar this case except have error when have multiple tests in 1 liveservertestcase class or multiple test cases in 1 .py file.
how make liveservertestcase free port on teardown (if core problem)?
is there workaround? want functional selenium tests running equally on local , remote servers.
i using django 1.6.7, firefox 37.0, selenium 2.45.0
upd
using methods instead of classmethods leads same issue.
def setup(self): self.driver = webdriver() self.url = self.live_server_url def teardown(self): self.driver.quit()
finally, reason "internal server error" message webdriver deletes data database on quit(), including contenttypes , other default tables.
this leads error when trying load fixtures @ begin of next test.
n.b. behaviour due way transactiontestcase (from liveservertestcase inherits) resets database after test runs: it truncates tables.
so far, solution load fixtures data (also "default" django data, e.g. contenttypes) on every test run.
class myliveservertestcase(liveservertestcase): """ baseclass selenium test cases """ fixtures = ['my_fixture_with_all_default_stuff_and_testing_data.json'] @classmethod def setupclass(cls): cls.driver = webdriver() cls.url = cls.live_server_url super(myliveservertestcase, cls).setupclass() @classmethod def teardownclass(cls): cls.driver.quit() super(myliveservertestcase, cls).teardownclass() thanks @help_asap pointing out flushing database on quit() problem!
Comments
Post a Comment