我正在尝试在一个 Django LiveServerTestCase 中运行多个测试。当我运行任何单个测试(其他人评论)时,一切都会按预期进行。但是,当我通过两个测试运行测试用例时,第一个测试工作正常,但第二个测试加载带有“内部服务器错误”消息的页面。
Code:
from django.test import LiveServerTestCase
from selenium.webdriver.firefox.webdriver import WebDriver
class MyLiveServerTestCase(LiveServerTestCase):
"""
BaseCleass for my 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):
"""
Some 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)
# ...
如果我使用close()
代替quit()
它失败并显示“错误 98:地址已在使用中”,类似于this https://stackoverflow.com/questions/20619846/djangos-liveservertestcase-always-fails-due-to-conflicting-address-despite-a除非只有当我在一个 LiveServerTestCase 类中有多个测试或在一个 .py 文件中有多个测试用例时,我才会出现错误。
如何在tearDown 上使LiveServerTestCase 自由端口(如果这是核心问题)?
有什么解决方法吗?我想要的只是在本地和远程服务器上平等运行的功能性硒测试。
我正在使用 Django 1.6.7、Firefox 37.0、Selenium 2.45.0
upd
使用方法而不是类方法会导致同样的问题。
def setUp(self):
self.driver = WebDriver()
self.url = self.live_server_url
def tearDown(self):
self.driver.quit()
最后,出现“内部服务器错误”消息的原因是 WebDriver 从数据库中删除了所有数据quit()
, 包括内容类型和其他默认表.
当尝试在下一次测试开始时加载夹具时,这会导致错误。
N.B.这种行为实际上是由于方式TransactionTestCase
(从中LiveServerTestCase
继承)在测试运行后重置数据库:它截断所有表 https://docs.djangoproject.com/en/1.6/topics/testing/tools/#transactiontestcase.
到目前为止,我的解决方案是在每次测试运行时加载带有所有数据(也是“默认”Django 数据,例如内容类型)的固定装置。
class MyLiveServerTestCase(LiveServerTestCase):
"""
BaseClass for my 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()
感谢@help_asap 指出这个刷新数据库quit()
问题!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)