在Django StaticLiveServerTestCase期间显示测试输出中的服务器错误?

时间:2016-01-20 02:59:41

标签: python django python-3.x testing functional-testing

有没有办法在测试反馈中直接显示StaticLiveServerTestCase期间服务器上发生的错误?也就是说,当一些服务器函数调用错误和页面没有显示时,默认情况下测试执行不知道服务器错误。有没有办法将该输出传递给测试线程?

优选地,这些错误将出现在测试代码执行中直接出现错误的相同位置。如果这不是(轻松)可能的话,那么快速查看这些服务器错误的下一个最佳方法是什么?

谢谢!

代码(根据要求):

class TestFunctionalVisitor(StaticLiveServerTestCase):
    def setUp(self):
        self.browser = webdriver.Firefox()

    def tearDown(self):
        self.browser.quit()

    def test_visitor(self):
        self.browser.get(self.live_server_url)
        self.assertEqual(self.browser.title, "Something")

...

class Home(TemplateView):
    template_name = 'home.html'

    def get_context_data(self):
        context = {}
        MyModel = None
        context['my_models'] = MyModel.objects.all()
        return context

这已经被显着改变,使其变得简单和简短。但是当MyModelNone并尝试调用objects.all()时服务器出现服务器500错误,但我得到的只是来自测试输出的"Something" not in self.browser.title错误,当我&# 39;我希望在测试输出中看到NoneType has no...错误。

3 个答案:

答案 0 :(得分:4)

要立即查看错误,请在DEBUG模式下运行测试:

from django.test.utils import override_settings

@override_settings(DEBUG=True)
class DjkSampleTestCase(StaticLiveServerTestCase):
    # fixtures = ['club_app_phase01_2017-01-09_13-30-19-169537.json']

    reset_sequences = True

但是,还应该通过自定义django.core.handlers.base.BaseHandlerhandle_uncaught_exception()方法实现或通过哨兵来配置服务器端错误的记录。

答案 1 :(得分:0)

我使用以下方法覆盖默认记录器:

import logging
logging.basicConfig(level=logging.DEBUG, format='%(asctime)s - %(levelname)s -%(filename)s:%(lineno)d - %(message)s')

这将在您的终端上显示stderr。你甚至可以这样做:

logging.debug('My var %s', var)

我只是这样做进行调试,如果你想使用日志记录进行非调试,我建议你创建自定义记录器。

有关记录的更多详细信息:

答案 2 :(得分:-2)

这正是it is recommended比集成和UI /端到端拥有更多单元测试的原因。除了其他方面,后者不会为您提供具体的反馈,您通常需要更多时间调试和调查UI测试失败的原因。另一方面,当单元测试失败时,通常是失败或异常将您指向代码中的特定行 - 您立即得到“出了什么问题”的答案。

换句话说,重点是:用单元测试覆盖这个特殊问题让你的UI测试保持原样。

为了帮助您收集有关"Something" not in self.browser.title失败的更多信息,启用登录并尽可能详细记录。您也可以使用built-in Error Reporting,例如,让Django向您发送500错误的电子邮件。换句话说,收集所有详细信息并手动排除故障。