在运行Django测试时如何将DEBUG设置为True?

时间:2011-09-16 15:38:26

标签: django

我目前正在运行一些Django测试,默认情况下看起来是DEBUG=False。有没有办法运行特定的测试,我可以在命令行或代码中设置DEBUG=True

6 个答案:

答案 0 :(得分:77)

对于测试用例中的特定测试,您可以使用override_settings装饰器:

from django.test.utils import override_settings
from django.conf import settings
class TestSomething(TestCase):
    @override_settings(DEBUG=True)
    def test_debug(self):
        assert settings.DEBUG

答案 1 :(得分:21)

Starting with Django 1.11 you can use --debug-mode to set the DEBUG setting to True prior to running tests.

答案 2 :(得分:11)

接受的答案对我不起作用。我使用Selenium进行测试,设置@override_settings(DEBUG=True)会使测试浏览器在每个页面上始终显示404错误。并且DEBUG=False不显示异常回溯。所以我找到了解决方法。

我们的想法是使用自定义DEBUG=True处理程序和内置的django 500错误处理程序来模拟500行为。

  1. 将此添加到 myapp.views:

    import sys
    from django import http
    from django.views.debug import ExceptionReporter
    
    def show_server_error(request):
        """
        500 error handler to show Django default 500 template
        with nice error information and traceback.
        Useful in testing, if you can't set DEBUG=True.
    
        Templates: `500.html`
        Context: sys.exc_info() results
         """
        exc_type, exc_value, exc_traceback = sys.exc_info()
        error = ExceptionReporter(request, exc_type, exc_value, exc_traceback)
        return http.HttpResponseServerError(error.get_traceback_html())
    
  2. urls.py:

    from django.conf import settings
    
    if settings.TESTING_MODE:
        # enable this handler only for testing, 
        # so that if DEBUG=False and we're not testing,
        # the default handler is used
        handler500 = 'myapp.views.show_server_error'
    
  3. settings.py:

    # detect testing mode
    import sys
    TESTING_MODE = 'test' in sys.argv
    
  4. 现在,如果您的任何Selenium测试遇到500错误,您将看到一个带有回溯和所有内容的错误页面。如果运行正常的非测试环境,则使用默认的500处理程序。

    灵感来自:

答案 3 :(得分:0)

好的,我想说我想为错误测试用例编写测试用例: -

<强> urls.py

if settings.DEBUG:
    urlpatterns += [
        url(r'^404/$', page_not_found_view),
        url(r'^500/$', my_custom_error_view),
        url(r'^400/$', bad_request_view),
        url(r'^403/$', permission_denied_view),
    ] 

<强> test_urls.py : -

from django.conf import settings

class ErroCodeUrl(TestCase):

    def setUp(self):
        settings.DEBUG = True

    def test_400_error(self):
        response = self.client.get('/400/')
        self.assertEqual(response.status_code, 500)

希望你有所了解!

答案 4 :(得分:0)

除了https://stackoverflow.com/a/1118271/5750078以外,对我没有任何帮助 使用Python 3.7

breakpoint() 

方法。 在pycharm上正常工作

答案 5 :(得分:-3)

运行单元测试时,您无法看到DEBUG=True的结果。页面不会显示在任何地方。没有浏览器。

更改DEBUG无效,因为网页(带有调试输出)在任何地方都不可见。

如果您想查看与失败的单元测试相关的调试网页,请执行此操作。

  1. 删除您的开发数据库。

  2. 重新运行syncdb以构建空的开发数据库。

  3. 运行各种loaddata脚本,在开发数据库中重建该测试的灯具。

  4. 运行服务器并浏览页面。

  5. 现在您可以看到调试输出。