pytest stdout从测试输出刷新到其他文件

2024-10-03 23:28:40 发布

您现在位置:Python中文网/ 问答频道 /正文

在这里我有测试.py包含:

import sys
sys.stdout = open('log2.log', 'w')


class TestH5Client:
    def test_something(self):
        print("Start")
        assert True
        print("End")

    def teardown_class(cls):
        print("OK")

我用下面的shell命令运行我的测试

pytest tests.py::TestH5Client::test_something >>log.log

我想要这个日志.log包含测试运行的信息,log2.log包含所有打印,但log2.log为空

的内容日志.log(内容如我所料):

^{pr2}$

log2.log的内容:文件为空

期望log2.log内容:

Start
End
OK

所以我的问题是我做错了什么,我如何才能让它这样工作,提前谢谢你。在


Tags: pytestimportlog内容defsysok
1条回答
网友
1楼 · 发布于 2024-10-03 23:28:40

我想默认的选项是py.测试通过重写系统标准输出,取消要重写的代码系统标准输出. 在

我测试了三种似乎可以解决您问题的选项:

  1. 而不是覆盖系统标准输出,您可以重写print函数,例如print = lambda x: open('log2.log', 'a').write(str(x)+"\n")
    • 不会递归地记录打印
    • 启用每个文件日志记录
  2. 你可以禁用py.测试的输出捕获,方法是将-s选项添加到执行命令中。
    • 将以递归方式打印所有测试中的所有打印
    • 未转换的打印件可能会使您的log.log-文件蒙上阴影
  3. 使用一个像样的记录器框架。在

尽管3是最大的努力,取决于你想达到什么,我相信这是最好的解决办法。在

相关问题 更多 >