python - 我可以在哪个 py.test 标注中找到 'item' 和 'report' 数据?

标签 python pytest

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/

相关文章:

python - 以敏捷/BDD 方式在 Django 中使用 Doctests 的示例

python - 执行所有测试后退出 pytest 中的驱动程序实例

python错误: urlopen error [Errno 11001] getaddrinfo failed

python - 字母尺度和随机文本上的马尔可夫链

python - 在 Flask 中,我可以在函数运行时显示一个模板并在函数完成后重定向到另一个模板吗?

java - 在 JSON 中包含文本文件

python-3.x - 使用 pytest 禁用在控制台上打印日志输出

python - 389 目录服务器测试与 lib389

pip - 使用 tox 安装 extra_requires

python - pytest.raises 失败 : DID NOT RAISE with try/except