Python 通过测试的py.test日志

Python 通过测试的py.test日志,python,pytest,Python,Pytest,我已经一遍又一遍地阅读了文档,但我无法弄清楚如何让py.test写入日志以进行通过的测试。例如,如果我运行py.test--resultlog=mylog.txt myPytest.py“mylog.txt对于通过的每个测试只有一行。我想在日志文件中记录的每个测试中添加其他内容,不管您的测试通过还是失败。例如,我需要知道它们运行的时间、一些输出数据等。如何让py.test在py.test日志文件中包含有关测试(通过和失败)的数据?您可以查看junitxml输出是否提供了更多信息。但我怀疑,如果你

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

您可以查看junitxml输出是否提供了更多信息。但我怀疑,如果你想要实际的时间,而不是持续时间等,你将不得不编写自己的插件。该文档为您提供了相关的挂钩:

您可以使用py-cov与pytest组合

py.test --cov $(MOD_NAME) --cov-config .coveragerc --cov-report xml --junit-xml=results.xml
在这里,您将获得所需的所有信息,因为我们用于将coverage.xml文件推送到sonarqube并获取所有可用数据


如果您确实需要来自测试函数的定制数据/日志,只需传递
-s
,这样pytest将停止捕获输出,并在控制台上打印输出(您可以将其流式传输到一个文件,可能不是很好)

pytest现在支持-s参数,以防止捕获通过测试的日志调用

pytest -s
从:

-s、 –捕获=通常不捕获标准输出和标准输出,仅在测试失败时显示。-s选项可用于禁用捕获, 显示打印语句、记录调用等的stdcall


这个钩子是一个实验性的,只要断言通过,就会调用它。 从文件-

使用此钩子在传递断言后执行一些处理。原始断言信息在中提供 expl字符串中提供了orig字符串和pytest自省断言信息

此钩子必须由 启用\u断言\u传递\u钩子ini文件选项:

启用此选项时,需要清理项目目录和解释器库中的.pyc文件,如下所示: 断言需要重新编写

[pytest]
enable_assertion_pass_hook=true
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')