当我使用./manage.py test
运行测试时,无论我通过print
发送到标准输出的内容都没有显示。当测试失败时,我会在每个失败的测试中看到一个“stdout”块,所以我猜Django会捕获它(但是当测试通过时它不会显示它。)
答案 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.2
,django-nose==1.4.5
和nose==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
:更多详细信息,例如包括打印语句。