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

时间:2009-08-05 23:34:09

标签: python django debugging testing stdout

当我使用./manage.py test运行测试时,无论我通过print发送到标准输出的内容都没有显示。当测试失败时,我会在每个失败的测试中看到一个“stdout”块,所以我猜Django会捕获它(但是当测试通过时它不会显示它。)

5 个答案:

答案 0 :(得分:36)

是的,这个问题是由NoseTestSuiteRunner引起的。添加-- -s很棘手,而不是最佳解决方案。 尝试在settings.py中添加以下行:

NOSE_ARGS = ['--nocapture',
             '--nologcapture',]

这解决了我的问题。

答案 1 :(得分:34)

TEST_RUNNER中检查了settings.py,它使用了一个特定于项目的跑步者,该跑步者呼唤Nose。 Nose有-s选项阻止其捕获stdout ,但如果我运行:

./manage.py test -s

manage.py首先捕获它并抛出“没有这样的选项”错误。 manage.py的帮助没有提到这一点,但我发现如果我跑:

./manage.py test -- -s

它会忽略-s并让我在自定义跑步者身边捕捉它,并将其传递给Nose而没有任何问题。

答案 2 :(得分:4)

你可能有一些中间测试运行器,如Nose,拦截和存储stdout。尝试直接运行Django测试,或者写入stderr。

答案 3 :(得分:2)

使用所有相关软件包(Django==1.11.2django-nose==1.4.5nose==1.3.7)的当前版本,在运行测试时添加--nocapture标志就足够了。这样一个简单的

./manage.py test --nocapture

就足够了。

当然,你有

TEST_RUNNER = "django_nose.NoseTestSuiteRunner"

settings.py

答案 4 :(得分:2)

有多种级别的详细信息会影响我们看到的详细信息量: 您可以尝试:

python manage.py test -v 2

其他可用级别为:

  • -v 0:最少的详细信息

  • -v 1:默认

  • -v 2:更多详细信息,例如包括打印语句。