我正在使用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)
答案 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