有没有办法在测试反馈中直接显示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
这已经被显着改变,使其变得简单和简短。但是当MyModel
为None
并尝试调用objects.all()
时服务器出现服务器500错误,但我得到的只是来自测试输出的"Something" not in self.browser.title
错误,当我&# 39;我希望在测试输出中看到NoneType has no...
错误。
答案 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.BaseHandler
类handle_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错误的电子邮件。换句话说,收集所有详细信息并手动排除故障。