4

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

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

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

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

谢谢。

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

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

1 回答 1

2

事实证明,该信息在 item.outerr 中可用,它是两个 Unicode 字符串的元组;第一个是标准输出,第二个是标准错误。

请注意,py.test 在设置、调用和拆卸报告中指定了这些字符串,其中一些可能是空字符串。所以为了保存输出,而不用空字符串覆盖它,逻辑需要是:

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

stderr = item.outerr[1]
if stderr and len(stderr):
    whatever.stderr = stderr
于 2012-10-30T20:25:06.143 回答