在Django项目中,我使用selenium运行一些UI测试,使用LiveServerTestCase
。
我的一个测试用例失败了,当使用Firefox驱动程序时,我可以看到一个页面抛出“服务器错误(500)”,这意味着DEBUG
设置为False
这不是我运行本地开发服务器的情况。
测试服务器是如何启动的?为什么不使用定义DEBUG = True
的设置?
其他网址(例如主页网址)返回正常,因此服务器正在运行。但我只是不明白为什么它没有显示调试信息,以及它正在使用哪些设置。
我的测试用例供参考:
class LoginTest(LiveServerTestCase):
@classmethod
def setUpClass(cls):
try:
from selenium.webdriver import PhantomJS
cls.selenium = PhantomJS()
except:
from selenium.webdriver.firefox.webdriver import WebDriver
cls.selenium = WebDriver()
super(LoginTest, cls).setUpClass()
@classmethod
def tearDownClass(cls):
cls.selenium.quit()
super(LoginTest, cls).tearDownClass()
def test_fb_login(self):
self.selenium.get('%s%s' % (self.live_server_url, reverse('account_login')))
# TEST SERVER RETURNS 500 ON THIS URL WITH NO DEBUG INFO
答案 0 :(得分:6)
根据Testing Django Application - Django Documentation:
无论配置中DEBUG设置的值如何 文件,所有Django测试都以 DEBUG = False 运行。这是为了确保这一点 观察到的代码输出与将在a中看到的相匹配 生产设置。
仍然可以override this using:
with self.settings(DEBUG=True):
...
虽然我不推荐它,但它仍然有用。 (Thomas Orozco的评论)
答案 1 :(得分:0)
我遇到了同样的问题,可以用装饰器覆盖设置。
根据您的示例,您将导入override_settings
并将装饰器放在类上方:
from django.conf import settings
from django.test import override_settings
@override_settings(DEBUG=True)
class LoginTest(LiveServerTestCase):
...
<{3}} 中的详细信息
答案 2 :(得分:0)
您还可以在TestCase setUp()方法中更改设置。
from django.conf import settings
class MyTest(LiveServerTestCase):
def setUp(self):
# Change settings here
settings.DEBUG = True
# ...