在运行Django测试时,我如何查看标准输出(stdout)?

17 浏览
0 Comments

在运行Django测试时,我如何查看标准输出(stdout)?

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

0
0 Comments

问题的出现原因是在运行Django测试时,无法看到标准输出(stdout)。解决方法是通过调整verbosity级别来增加输出的详细程度。

在运行Django测试时,可以使用以下命令来增加输出的详细程度:

python manage.py test -v 2

除了-v 2级别外,还有其他可用的级别:

  • -v 0:最少的详细程度
  • -v 1:默认级别
  • -v 2:更多的详细程度,包括打印语句

使用--verbosity参数可以达到与-v参数相同的效果。这种方法比调整日志记录器更加方便。

0
0 Comments

这个问题的出现是由于NoseTestSuiteRunner引起的。在settings.py中添加下面的代码可以解决这个问题:

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

这是正确的解决方法,使用"-- -s"方法会导致不必要的副作用。

0
0 Comments

问题出现的原因:在运行Django测试时,希望能够看到标准输出(stdout),但是默认情况下Django会捕获stdout,导致无法直接查看输出。

解决方法:根据经验分享的内容,可以采用以下两种方法解决该问题:

1. 使用-s选项:在settings.py中检查TEST_RUNNER,如果使用的是一个特定于项目的runner(如Nose),则可以在运行测试时添加-s选项,例如:./manage.py test -s。但是,有些情况下(如在manage.py中),会先被捕获并抛出“no such option”错误。此时可以尝试使用--来忽略-s选项,例如:./manage.py test -- -s

2. 修改应用顺序:如果在INSTALLED_APPS中安装了django_south和django_nose,并且django_nose在django_south后面,可能会导致无法给nose传递选项(如-s)。解决方法是将django_south放在django_nose之前,即将south before django_nose放入INSTALLED_APPS中。

其他解决方法的尝试:还有一些其他的解决方法也被提到,但是并不是所有人都适用,例如使用print(...)可以正常显示输出,但使用pprint.pprint(...)却无法在控制台中显示输出。还有一些人尝试了其他的命令行参数,如./manage.py test --

通过以上的经验分享,我们可以了解到在运行Django测试时,如果希望看到stdout输出,可以尝试使用-s选项或修改应用顺序来解决该问题。

0