[英]py.test logging for tests that pass
我一遍又一遍地在文档中,但我不知道如何让py.test写入日志以获得通过的测试。 例如,如果我运行“py.test --resultlog = mylog.txt myPytest.py” mylog.txt只为每个通过的测试都有一行。 我想在我的日志文件中记录的每个测试中添加其他内容,无论您是通过还是失败。 例如,我需要知道它们运行的时间,一些输出数据等。如何让py.test在py.test日志文件中包含有关测试(传递和失败)的数据?
您可以查看junitxml输出是否提供了更多信息。 但我怀疑,如果你想要实际时间而不是持续时间等,你将不得不编写自己的插件。 该文档为您提供了相关的钩子: http : //pytest.org/latest/plugins.html?highlight = hooks # reporting- hooks
pytest现在支持-s参数,以防止捕获日志调用以传递测试。
pytest -s
从文档 :
-s,-capture = no通常stdout和stderr被捕获,仅显示失败的测试。 -s选项可用于禁用捕获,显示打印语句的stdcalls,记录调用等。
你可以使用py-cov与pytest结合使用
py.test --cov $(MOD_NAME) --cov-config .coveragerc --cov-report xml --junit-xml=results.xml
在这里,您将获得所需的所有信息,因为我们习惯将coverage.xml文件推送到sonarqube并获取所有可用数据。
如果你真的需要来自你的测试函数的自定义数据/日志,只需传递-s
所以pytest将停止捕获输出,它将在控制台上打印它(你可以将它流式传输到文件,不是很好)
这个钩子是一个实验,只要断言通过就会调用它。 从文件 -
在传递断言后使用此钩子进行一些处理。 原始断言信息在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')
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.