pytest钩子函数-pytest_runtest_logreport提取测试用例相关信息

问题:想在每个日志中记录测试用例开始结束时间,获取到测试用例的名称。

解决办法:使用钩子pytest_runtest_logreport

pytest中,想要在conftest.py文件中获取正在运行的测试用例的名称,可以使用pytest_runtest_logreport钩子函数。这个钩子函数会在每个测试用例运行之后被调用,并且提供了一个报告对象,其中包含了关于测试用例的各种信息,包括它的名称。

下面是一个如何在conftest.py中使用pytest_runtest_logreport钩子函数来获取并打印正在运行的测试用例名称的示例:

python 复制代码
# conftest.py

def pytest_runtest_logreport(report):
    if report.passed:
        print(f"测试用例 {report.nodeid} 执行成功")
    else:
        print(f"测试用例 {report.nodeid} 执行失败")

在上面的代码中,report.nodeid是测试用例的唯一标识符,它通常包含了测试文件的路径、文件名、测试函数名以及任何参数化信息。如果只关心测试函数的名称,您可以使用report.nodeid.split('::')[-1]来获取它。

例如,如果想要仅打印测试函数的名称,可以这样做:

python 复制代码
# conftest.py

def pytest_runtest_logreport(report):
    test_name = report.nodeid.split('::')[-1]
    if report.passed:
        print(f"开始执行测试用例: {test_name}")
    else:
        print(f"测试用例 {test_name} 执行失败")

    # 在测试用例结束后打印
    print(f"测试用例 {test_name} 已执行结束")

请注意,pytest_runtest_logreport钩子函数会在每个测试用例运行之后立即调用,包括那些由于某种原因(如前置条件失败)而被跳过的测试用例。因此,如果只想在真正执行的测试用例之后打印信息,可能需要检查report.outcome属性来确定测试用例的状态。

另外,这种方法打印的信息可能会在测试摘要和其他输出中混合,如果想要更精细地控制输出格式或位置,可能需要使用其他钩子函数或插件功能。

在控制台加了这个钩子后,可以很明显看出哪个用例失败了

相关推荐
HUT_Tyne2651 小时前
Linux 快速入门
linux·运维·服务器
鸠摩智首席音效师1 小时前
如何在 Linux 中使用 dd 命令 ?
linux·运维·服务器
wadesir5 小时前
当前位置:首页 > 服务器技术 > 正文Linux网络HSRP协议(实现路由器热备份与高可用性的实用指南)
linux·服务器·网络
泡沫·5 小时前
4.iSCSI 服务器
运维·服务器·数据库
胡八一5 小时前
解决PHP未检测到您服务器环境的sqlite3数据库扩展报错
服务器·数据库·php
不解不惑5 小时前
OpenAI whisper 语音识别服务器搭建
服务器·whisper·语音识别
gaize12135 小时前
适合业务规模较大的场景的服务器测评
服务器
悠悠121386 小时前
告别Zabbix?我用Netdata只花10分钟就搞定了50台服务器的秒级监控(保姆级实战)
运维·服务器·zabbix
天庭鸡腿哥6 小时前
大小只有4K的软件,可让系统瞬间丝滑!
运维·服务器·windows·microsoft·everything
虚伪的空想家6 小时前
华为昇腾Atlas 800 A2物理服务器开启VT-d模式
运维·服务器·ubuntu·kvm·vt-d·直通