我在Django中进行了很多单元测试,如果测试失败,我经常需要查看日志(如果可能的话,在控制台中)。我真的不能使用日志文件,因为它非常混乱
我现在所做的是:在settings.py
中激活控制台日志记录,并且只运行一个特定的测试。我希望有一个更方便的方法来做到这一点。我只想查看失败测试的记录内容,而不是完整的日志。
编辑:即使已经发布了答案 - 我已经接受了 - 我不太满意。我想只看到失败测试的日志输出。我一直在寻找PHPUnit提供的解决方案。它捕获完整的输出(用于记录+打印),并且只有在测试失败时才将其写入stdout
。
答案 0 :(得分:1)
设置根记录器仅在运行测试时使用控制台处理程序。最简单的检测方法是查看" test"是第二个argv参数。确保所有有趣的记录器都有"propagate": True
,以便他们将日志转发到根记录器。
# settings.py
import sys
if sys.argv[1] == 'test':
LOGGING['root'] = {
'handlers': ['console'],
'level': 'DEBUG',
}
答案 1 :(得分:1)
好吧,我刚想出如何解决它。
显然有一个-b
选项,"缓冲输出"除非在运行单元测试时测试失败。如果您的tests.py文件执行unittest.main()
,则非常容易使用。只需键入python tests.py -b
,即使测试失败,也会缓冲完整输出。
...........F
Stdout:
OK :)
OK :)
======================================================================
FAIL: testStr (__main__.MyTestCase)
----------------------------------------------------------------------
Traceback (most recent call last):
File "tests.py", line 93, in testStr
self.fail()
AssertionError: None
Stdout:
OK :)
OK :)
----------------------------------------------------------------------
Ran 12 tests in 0.005s
在这种情况下,每个测试都会向stdout打印一些内容,但只打印最后一个(显示失败的一个)。由于日志也可以打印到控制台(请参阅@ Thomas的答案),您只能看到相关的日志。
答案 2 :(得分:0)
在控制台上访问日志输出的快速而又脏的方法是使用补丁日志记录..例如,覆盖logging.info:
def monkey_print(*args):
print args
setattr(logging, 'info', monkey_print)
然后在完成后删除它。又脏又脏。它也适用于单元测试。