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

Hel*_*iro 42 python testing django debugging stdout

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

Hel*_*iro 38

TEST_RUNNER入后settings.py,它正在使用一个特定于项目的跑步者来呼唤Nose.Nose可以-s选择阻止它捕获stdout,但如果我运行:

./manage.py test -s

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

./manage.py test -- -s

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

  • 因为我使用的是contrib.sites框架,所以我为我的测试指定了--settings.当我这样做时,-s标志按预期运行,并传入另一个 - 在-s之前抛出OSError(没有这样的文件-s). (2认同)
  • 仅供记录.如果您在INSTALLED_APPS __after__ django_nose中安装了django_south,它将不允许您为nose提供选项(如-s).你需要将南__before__ django_nose放在INSTALLED_APPS中.这是我的问题 (2认同)

Wis*_*hou 38

是的,这个问题是由NoseTestSuiteRunner.添加-- -s是棘手的,而不是最好的解决方案.尝试在以下位置添加以下行settings.py:

NOSE_ARGS = ['--nocapture',
             '--nologcapture',]
Run Code Online (Sandbox Code Playgroud)

这解决了我的问题.

  • 这是正确的答案.`-s`方法会导致不良副作用. (4认同)

Sou*_*nha 12

有几个级别的详细程度会影响我们看到的详细信息:您可以尝试:

python manage.py test -v 2
Run Code Online (Sandbox Code Playgroud)

其他可用的级别是:

  • -v 0 : 最少的细节

  • -v 1: 默认

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


oiv*_*vio 6

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

./manage.py test --nocapture
Run Code Online (Sandbox Code Playgroud)

就足够了。

当然,你有

TEST_RUNNER = "django_nose.NoseTestSuiteRunner"
Run Code Online (Sandbox Code Playgroud)

在你的 settings.py