Django:为什么我在运行LiveServerTestCase测试时无法获取错误的回溯?

20 投票
3 回答
3268 浏览
提问于 2025-04-17 13:57

我正在用Selenium写一些测试。

当我运行我的Selenium测试(LiveServerTestCase类型)时,如果我的代码里有错误(不是测试本身的错误,而是我用Selenium执行的代码,比如我访问的主页视图),我会看到500错误页面(通常在我设置DEBUG = False时会看到这个),即使我已经:

DEBUG = True 
INTERNAL_IPS = ('127.0.0.1',)

我对此感到困惑,无法看到我的测试为什么失败(因为在公开的500错误页面上我看不到具体的错误信息)。

为什么会这样呢?我该去哪里找解决办法?

当我运行runserver时,一切都正常(我能看到错误追踪信息)。

3 个回答

0

我对Selenium测试工具不是特别熟悉,但我知道如果你在部署应用程序时,你的IP地址没有被注册在“INTERNAL_IPS”这个设置里,即使DEBUG设置为True,你也可能看不到错误信息。当你使用Django的runserver命令时,它会自动把你的本地机器加入到INTERNAL_IPS设置中,但通常这个设置是空的。我猜Selenium没有为你做这个设置,这可能就是你看不到错误信息的原因。如果你还没做这个,可以试着加上。

像这样应该就可以正常工作:

INTERNAL_IPS = ('127.0.0.1',)

Django设置(INTERNAL_IPS)

8

我也遇到过同样的问题,现在可以覆盖设置了。

根据你的例子,你需要导入 override_settings,然后把这个装饰器放在类的上面:

from django.test import override_settings

@override_settings(DEBUG=True)
class SeleniumLiveServerTestCase(LiveServerTestCase):

    ...

详细信息可以查看 Django 文档

19

来自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

虽然这个方法不太优雅,但确实有效!

撰写回答