Django:为什么我在运行LiveServerTestCase测试时无法获取错误的回溯?
我正在用Selenium写一些测试。
当我运行我的Selenium测试(LiveServerTestCase
类型)时,如果我的代码里有错误(不是测试本身的错误,而是我用Selenium执行的代码,比如我访问的主页视图),我会看到500错误页面(通常在我设置DEBUG = False时会看到这个),即使我已经:
DEBUG = True
INTERNAL_IPS = ('127.0.0.1',)
我对此感到困惑,无法看到我的测试为什么失败(因为在公开的500错误页面上我看不到具体的错误信息)。
为什么会这样呢?我该去哪里找解决办法?
当我运行runserver时,一切都正常(我能看到错误追踪信息)。
3 个回答
我对Selenium测试工具不是特别熟悉,但我知道如果你在部署应用程序时,你的IP地址没有被注册在“INTERNAL_IPS”这个设置里,即使DEBUG设置为True,你也可能看不到错误信息。当你使用Django的runserver命令时,它会自动把你的本地机器加入到INTERNAL_IPS设置中,但通常这个设置是空的。我猜Selenium没有为你做这个设置,这可能就是你看不到错误信息的原因。如果你还没做这个,可以试着加上。
像这样应该就可以正常工作:
INTERNAL_IPS = ('127.0.0.1',)
我也遇到过同样的问题,现在可以覆盖设置了。
根据你的例子,你需要导入 override_settings
,然后把这个装饰器放在类的上面:
from django.test import override_settings
@override_settings(DEBUG=True)
class SeleniumLiveServerTestCase(LiveServerTestCase):
...
详细信息可以查看 Django 文档
来自Django文档的内容 https://docs.djangoproject.com/en/1.4/topics/testing/#other-test-conditions
目前似乎无法覆盖这个设置,即使使用了 https://docs.djangoproject.com/en/1.4/topics/testing/#django.test.utils.override_settings 也不行。
当返回500错误时,查看调试信息的唯一方法就是记录日志。
补充:我找到了一种方法可以在我的selenium测试中设置 DEBUG = True
。在我的子类中,我重写了构造函数并更改了设置。
from django.conf import settings
class SeleniumLiveServerTestCase(LiveServerTestCase):
def __init__(self, *args, **kwargs):
super(SeleniumLiveServerTestCase, self).__init__(*args, **kwargs)
if settings.DEBUG == False:
settings.DEBUG = True
虽然这个方法不太优雅,但确实有效!