有时,我只想在代码中插入一些打印语句,然后查看在执行该操作时打印出来的内容。我通常的“锻炼”方式是使用现有的pytest测试。但是,当我运行这些命令时,我似乎看不到任何标准输出(至少从我的IDE PyCharm内部)。
是否有一种简单的方法可以在pytest运行期间查看标准输出?
-s
switch禁用每次测试捕获。
在-s
至upvoted comment中,accepted answer问:
在UNIX中,通常称为Joe。理想情况下,py.test默认是发球而不是捕获。尽管Python很少支持tee teeing,但py.test或任何现有的第三方py.test插件(...有什么方法可以打印到控制台上吗?[[AND捕获输出以使其显示在junit报告中?
无论如何,我都知道
)都不支持tee。Monkey-patching py.test to doanything
不被支持是不平凡的。为什么?因为:_pytest
程序包在运行时引发模糊的异常。 非常感谢,py.test。您达到的真正强大的体系结构。pytest
API进行猴子补丁,您也必须这样做[[之前运行由外部[ C0]命令。您无法在插件中执行此操作(例如,测试套件中的顶级_pytest
模块)。到py.test懒惰地动态导入插件时,您想要进行猴子补丁的任何py.test类都已被实例化很久了,并且您[pytest
命令。相反,您必须使用自定义setuptools py.test
命令(按顺序)来包装该命令的运行:Monkey修补专用conftest
API。调用公共py.test
函数以运行test
命令。_pytest
和pytest.main()
选项,以捕获stderr但py.test
达到-s
。但是,显示这些测试的stderr可以防止py.test报告有关测试失败的异常回溯。这是完全没有帮助的。因此,我们强制py.test捕获stderr但not
stdout。--capture=no
命令。如果不这样做,请参见py.test编写良好的leycec页面的killall -9 py.test
小节。执行非
安装test
,这是第三方setuptools插件,提供了自定义setuptools Manual Integration命令,也调用了py.test。如果已经安装了pytest-runner,则可能需要卸载该pip3软件包,然后采用上面链接的手动方法。假设您按照上面突出显示的Good Practices中的说明进行操作,则您的代码库现在应包含pytest-runner方法。修改此方法使其类似:
test
Stderr但是stdout。漂亮!not
将上面的猴子补丁扩展到tee stdout和stderr,作为练习,留给读者一整桶的空闲时间。
py.test exampletest.py -s
使用'-r'选项显示额外的摘要信息:
--verbose
显示捕获的失败测试输出(默认行为)。
[-r的输出格式比-s的输出格式漂亮。