Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在Django StaticLiveServerTestCase期间在测试输出中显示服务器错误?_Python_Django_Python 3.x_Testing_Functional Testing - Fatal编程技术网

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

Python 在Django StaticLiveServerTestCase期间在测试输出中显示服务器错误?,python,django,python-3.x,testing,functional-testing,Python,Django,Python 3.x,Testing,Functional Testing,有没有办法直接在测试反馈中显示StaticLiveServerTestCase期间服务器上发生的错误?也就是说,当一些服务器函数调用错误和页面不显示时,测试执行默认情况下不知道服务器错误。是否有某种方法将该输出传递到测试线程 这些错误最好显示在测试代码执行中直接显示错误的同一位置。如果这(不容易)实现,那么下一个快速查看这些服务器错误的最佳方法是什么 谢谢 代码(根据要求): class TestFunctionalVisitor(StaticLiveServerTestCase): d

有没有办法直接在测试反馈中显示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()
时,服务器有一个server500错误,但我从测试输出中得到的只是self.browser.title中没有的
“Something”错误,当我想看到
NoneType在测试输出中没有错误。
这就是为什么要有比集成和UI/端到端多得多的单元测试的原因。除此之外,后者不会向您提供特定的反馈,您通常需要更多的时间来调试和调查UI测试失败的原因。另一方面,当单元测试失败时,它通常是一个失败或异常,将您指向代码中的特定行—您会立即得到“出了什么问题”的答案

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



要帮助您收集有关self.browser.title中没有的
“Something”故障的更多信息,请打开日志并记录尽可能多的详细信息。您还可以使用和,例如,让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.BaseHandler
class
handle\u uncaught\u exception()
方法实现,也可以通过sentry。我使用以下方法覆盖默认日志记录程序:

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)
我只为调试而这样做,如果您想将日志记录用于非调试的事情,我建议您创建自定义日志记录程序

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


你能展示一下你的代码吗?@MedhatGayed:我添加了一个(节略的)代码示例。我确实计划进行更多的单元测试。但我实际上正在尝试TDD,所以我正在编写功能测试,这将引导我下一步应该编写什么单元测试。所以这些单元测试很快就会开始。但是,没有一种特别好的方法可以让这些单元测试轻松地显示在输出中,而无需手动查看其他地方?(我主要谈论的是本地测试,如果这有什么区别的话)哎呀,也许我的IDE太“聪明”了一点。看起来我要查找的错误已经显示在控制台输出中,但当单击特定测试时,我只看到了测试的客户端部分的输出。@JennyShoars很高兴听到您发现服务器端错误已被记录。你可能应该添加一些细节,做出回答并接受它。希望我的回答至少有部分帮助。谢谢。确实是这样,但我打算再开放几天,因为有人可能会对其他日志选项有一个聪明的想法。