我正在尝试将 TDD(测试驱动开发)与 pytest
一起使用。当我使用 print
时, pytest
不会 print
到控制台。
我正在使用 pytest my_tests.py
来运行它。
documentation
似乎说它应该默认工作: http ://pytest.org/latest/capture.html
但:
import myapplication as tum
class TestBlogger:
@classmethod
def setup_class(self):
self.user = "alice"
self.b = tum.Blogger(self.user)
print "This should be printed, but it won't be!"
def test_inherit(self):
assert issubclass(tum.Blogger, tum.Site)
links = self.b.get_links(posts)
print len(links) # This won't print either.
没有任何东西打印到我的标准输出控制台(只是正常的进度和多少测试通过/失败)。
我正在测试的脚本包含打印:
class Blogger(Site):
get_links(self, posts):
print len(posts) # It won't get printed in the test.
在 unittest
模块中,默认情况下会打印所有内容,这正是我所需要的。但是,出于其他原因,我希望使用 pytest
。
有谁知道如何使打印语句得到显示?
原文由 BBedit 发布,翻译遵循 CC BY-SA 4.0 许可协议
默认情况下,
py.test
捕获标准输出的结果,以便它可以控制它的打印方式。如果它不这样做,它会在没有测试打印该文本的上下文的情况下喷出大量文本。但是,如果测试失败,它将在生成的报告中包含一个部分,显示在该特定测试中打印到标准输出的内容。
例如,
结果如下:
注意
Captured stdout
部分。如果您想在执行时查看
print
语句,可以将-s
标志传递给py.test
。但是,请注意,这有时可能难以解析。