py.test记录通过的测试

时间:2015-01-09 03:10:59

标签: python pytest

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

4 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

pytest现在支持-s参数,以防止捕获日志调用以传递测试。

pytest -s

来自documentation

  

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

答案 2 :(得分:0)

你可以使用py-cov结合pytest

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

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

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

答案 3 :(得分:0)

此钩子是实验性的,每次断言通过时都会被调用。 从文档-

  

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

     

此挂钩必须由    enable_assertion_pass_hook ini文件选项:

[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')