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

2024-04-19 23:57:57 发布

您现在位置:Python中文网/ 问答频道 /正文

有没有一种方法可以直接在测试反馈中显示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错误,这时我想在测试输出中看到NoneType has no...错误。在


Tags: 方法selfbrowser服务器nonegetobjectstitle
3条回答

我使用以下命令覆盖默认记录器:

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

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

^{pr2}$

我只在调试时才这样做,如果您想将日志用于非调试,我建议您创建自定义记录器。在

有关日志记录的详细信息:

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

换句话说,重点是:用单元测试来解决这个问题,让UI测试保持原样。在


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

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

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()方法实现或通过sentry配置服务器端错误的日志记录。在

相关问题 更多 >