在哪里可以找到通过py.test测试的捕获标准输出?

时间:2012-10-26 16:42:41

标签: pytest

我正在使用py.test报告挂钩(pytest_runtest_makereport()和pytest_report_teststatus())。

当py.test测试失败时,我可以在报告钩子中找到捕获的stdout数据(在report.sections [])。

当py.test测试通过时,report.sections []列表为空。

在哪里可以找到通过测试的捕获标准输出?

感谢。

编辑:从源代码(_pytest / capture.py)看起来只有在测试未通过时才可用:

def pytest_runtest_makereport(self, __multicall__, item, call):
    ...
    if not rep.passed:
        addouterr(rep, outerr)

1 个答案:

答案 0 :(得分:2)

事实证明,该信息在item.outerr中可用,它是两个Unicode字符串的元组;第一个是stdout,第二个是stderr。

请注意,py.test在setup,call和teardown报告中指定了这些字符串,其中一些字符串可能是空字符串。因此,为了保存输出,而不用空字符串覆盖它,逻辑需要是:

stdout = item.outerr[0]
if stdout and len(stdout):
    whatever.stdout = stdout

stderr = item.outerr[1]
if stderr and len(stderr):
    whatever.stderr = stderr