Django鼻子 - 在运行测试时需要捕获输出
问题描述:
我正在使用call_command
在管理命令中运行django-nose测试。我需要捕获输出并对其进行处理,具体取决于输出是否失败或通过。 我当前的代码管理命令:Django鼻子 - 在运行测试时需要捕获输出
content = StringIO()
try:
call_command('test', '--nologcapture', '-s', stdout=content)
# since its calling system exit
except BaseException:
pass
content.seek(0)
print content.read(), '<-- content'
# Check if test is passed and do something or else something else.
在我的情况下,内容始终是一个空字符串。
我尝试了很多鼻子插件,但无法获取输出。
谢谢。
答
问题的可能原因是在管理代码中,他们正在使用直接打印到sys.stdout
的打印语句,而不是使用管理命令实例的self.stdout
属性。
检查管理命令中的代码。这些脚印应该是这个样子:
self.stdout.write(...)
# or, perhaps ...
print(..., file=self.stdout)
如果不是这种情况下,你必须在管理命令的代码控制,那么修复起来使用self.stdout
。然后你应该看到你的当前代码在你的StringIO
实例中捕获的输出。
如果您无法控制管理命令中的代码,那么在调用命令之前,您必须通过重定向stdout
(使用上下文管理器)以另一种方式进行操作。
注意:从StringIO
实例检索输出的简单方法是使用content.getvalue()
,而不是查找和读取。