我在哪里可以找到通过PY.Test测试的捕获的Stdout



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

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

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

在哪里可以找到通过的测试的捕获的Stdout?

谢谢。

编辑:来自源(_PyTest/Capture.py),似乎只有在测试未通过时才可用:

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

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

请注意,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