pytest_runtest_makereport() 有两个参数,item 和 call。从 item 中,我可以找到我为这个测试创建的 funcarg,从 call 中,我可以找到异常信息(如果有的话):
def pytest_runtest_makereport (item, call):
my_funcarg = item.funcargs['name']
my_funcarg.excinfo = call.excinfo
不幸的是,excinfo 被填充用于失败和跳过。为了区分,我需要查看 pytest_report_teststatus() 的报告参数:
def pytest_report_teststatus (report):
if report.when == 'call':
if report.failed:
failed = True
elif report.skipped:
skipped = True
else:
passed = True
这是很好的信息,但我无法将它与我为测试创建的 funcarg 相关联。我查看了报告参数(一个 TestReport 报告),但找不到任何方法返回到传递给 pytest_runtest_makereport() 的项目或我创建的 funcarg。
我在哪里可以访问两者?
最佳答案
有一些未记录的、有点非官方的方法,钩子(Hook)实现可以使用它与其他钩子(Hook)实现交互,例如对它们的结果进行后处理。在您的具体情况下,您可能会执行以下操作:
@pytest.mark.tryfirst
def pytest_runtest_makereport(item, call, __multicall__):
rep = __multicall__.execute()
# your code follows and you can use rep.passed etc.
return rep
注意事项:
- 一个钩子(Hook)调用通常会调用多个钩子(Hook)实现
- “tryfirst”标记指示钩子(Hook)调用以尽早调用您的实现
- multicall 参数表示正在进行的钩子(Hook)调用,可以
用于调用剩余的钩子(Hook)实现,然后
使用他们的结果进行进一步处理 - 你需要在这里返回“rep”,因为你隐藏了“真实”的创作
multicall API 很少真正使用,我怀疑可能有不需要它的解决方案适合您的用例。
HTH,霍尔格
关于python - 我可以在哪个 py.test 标注中找到 'item' 和 'report' 数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10754970/