如何在运行Django测试时查看stdout?
当我用 ./manage.py test
运行测试时,任何通过 print
输出到标准输出的内容都不会显示出来。当测试失败时,我会看到每个失败测试都有一个“stdout”块,所以我猜测是Django把这些内容给捕获了(但是在测试通过时却不显示)。
5 个回答
28
有几个不同的详细程度可以选择,这会影响我们看到的信息量:
python manage.py test -v 2
其他可用的详细程度包括:
-v 0
: 最少的细节-v 1
: 默认设置-v 2
: 更多的细节,比如会包含打印语句。
43
这个问题是由 NoseTestSuiteRunner
引起的。添加 -- -s
这个选项有点麻烦,而且不是最好的解决办法。试着在 settings.py
文件中添加以下几行:
NOSE_ARGS = ['--nocapture',
'--nologcapture',]
这样做解决了我的问题。
48
我查看了 settings.py
文件里的 TEST_RUNNER
,发现它使用的是一个特定于项目的测试运行器,这个运行器会调用 Nose。Nose 有一个 -s
选项,可以阻止它捕获 stdout
(标准输出),但是如果我运行:
./manage.py test -s
这时候 manage.py
会先捕获这个参数,然后报出“没有这个选项”的错误。虽然 manage.py
的帮助信息里没有提到这一点,但我发现如果我运行:
./manage.py test -- -s
这样的话,它就会忽略 -s
,让我在自定义运行器那边捕获输出,并顺利地把它传递给 Nose。