如何在运行Django测试时查看stdout?

61 投票
5 回答
41355 浏览
提问于 2025-04-15 13:24

当我用 ./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。

撰写回答