【问题标题】:py.test logging for tests that passpy.test 记录通过的测试
【发布时间】:2015-01-09 03:10:58
【问题描述】:

我一遍又一遍地阅读文档,但我无法弄清楚如何让 py.test 写入日志以获取通过的测试。例如,如果我运行 "py.test --resultlog=mylog.txt myPytest.py" mylog.txt 对于通过的每个测试只有一行。我想在我的日志文件中记录的每个测试中添加其他内容,无论你是通过还是失败。例如,我需要知道它们运行的​​时间、一些输出数据等。如何让 py.test 在 py.test 日志文件中包含有关测试(通过和失败)的数据?

【问题讨论】:

    标签: python pytest


    【解决方案1】:

    pytest 现在支持 -s 参数以防止捕获记录调用以通过测试。

    pytest -s
    

    来自documentation

    -s, –capture=no 通常 stdout 和 stderr 会被捕获并仅在测试失败时显示。 -s 选项可用于禁用捕获, 显示打印语句、记录调用等的标准调用。

    【讨论】:

      【解决方案2】:

      您可以查看junitxml 输出是否提供更多信息。但我怀疑如果你想要实际时间而不是持续时间等,你将不得不编写自己的插件。该文档为您提供了相关的钩子:http://pytest.org/latest/plugins.html?highlight=hooks#reporting-hooks

      【讨论】:

        【解决方案3】:

        您可以将 py-cov 与 pytest 结合使用

        py.test --cov $(MOD_NAME) --cov-config .coveragerc --cov-report xml --junit-xml=results.xml
        

        在这里您将获得所需的所有信息,因为我们习惯于将 coverage.xml 文件推送到 sonarqube 并获取所有可用数据。

        如果您确实需要来自您的测试函数的自定义数据/日志,只需通过 -s 以便 pytest 将停止捕获输出并将其打印在控制台上(您可以将其流式传输到文件中,而不是那样不错)

        【讨论】:

          【解决方案4】:

          这个钩子是一个实验性的,只要断言通过就会被调用。 来自文档-

          在一个通过的断言之后使用这个钩子做一些处理。原始断言信息可在 orig 字符串和 pytest 自省断言信息在 expl 字符串中可用。

          这个钩子必须由 enable_assertion_pass_hook ini-file 选项:

          [pytest]
          enable_assertion_pass_hook=true
          

          启用此选项时,您需要清理项目目录和解释器库中的 .pyc 文件,如 断言将需要重写。

          import logging
          log = logging.getLogger(__name__)
          def pytest_assertion_pass(item, lineno, orig, expl):
             """
                Prints the log(log file) every time the assert passes
             """
             log.info(str(item) + ' | lineno: ' + str(lineno) + ' | ' + orig + ' | PASS')
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-03-10
            • 1970-01-01
            • 2014-09-13
            • 1970-01-01
            • 2023-03-24
            • 1970-01-01
            相关资源
            最近更新 更多