我试图在一个Django LiveServerTestCase中运行多个测试.当我运行任何单个测试(其他人评论)时,一切都按预期工作.但是,当我运行带有两个测试的测试用例时,第一个工作正常,但第二个用“内部服务器错误”消息加载页面.
码:
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情况,除非我在一个LiveServerTestCase类中有多个测试或在一个.py中有多个测试用例时出现错误文件.
如何在tearDown上创建LiveServerTestCase空闲端口(如果是核心问题)?
有没有解决方法?我想要的只是在本地和远程服务器上运行的功能性selenium测试.
我使用的是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()上删除数据库中的所有数据,包括contenttypes和其他默认表.
这在尝试在下一次测试开始时加载灯具时会导致错误.
注:此行为实际上是由于TransactionTestCase(LiveServerTestCase继承的方式)在测试运行后重置数据库的方式:it truncates all tables.
到目前为止,我的解决方案是在每次测试运行时加载具有所有数据(也是“默认”Django数据,例如contenttypes)的灯具.
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()问题上指出这个刷新数据库!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。