Django - 测试失败时记录日志
3 个回答
0
一种快速简单的方法来查看你在控制台上的日志输出,就是对日志功能进行一些临时的修改。比如,如果你想要覆盖掉日志中的info信息,可以这样做:
def monkey_print(*args):
print args
setattr(logging, 'info', monkey_print)
完成后只需删除这些修改就可以了。这种方法简单有效,也适用于单元测试(unittest)。
1
在运行测试的时候,设置根日志记录器只使用控制台处理器。最简单的方法是检查第二个参数是否是“test”。确保所有重要的日志记录器都设置了 "propagate": True
,这样它们就能把日志转发到根日志记录器。
# settings.py
import sys
if sys.argv[1] == 'test':
LOGGING['root'] = {
'handlers': ['console'],
'level': 'DEBUG',
}
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 的回答),所以你只会看到相关的日志信息。