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属性来确定测试用例的状态。

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

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

相关推荐
传知摩尔狮30 分钟前
深入理解 Linux 虚拟文件系统(VFS)
linux·运维·服务器·性能优化
YBDDIE40 分钟前
Linux中的防火墙
linux·服务器·网络
不爱吃萝卜的嘤嘤怪1 小时前
如何删除vscod远程连接的服务器
运维·服务器·策略模式
2401_858286111 小时前
OSE2.【Linux】练习:查找项目的main函数入口
linux·运维·服务器
舰长1151 小时前
docker 镜像的导出和导入(导出完整镜像和导出容器快照)
linux·运维·服务器
遇见火星1 小时前
Linux下Systemd服务的核心功能及列出 Systemd 服务的方法!
linux·运维·服务器·systemd
GIS瞧葩菜1 小时前
HTTP 状态码是服务器对客户端请求的响应标识,用于表示请求的处理结果
服务器·网络协议·http
上海云盾商务经理杨杨1 小时前
2025年社交APP安全防御指南:抵御DDoS与CC攻击的实战策略
服务器·安全·web安全·ddos
新辞旧梦6 小时前
企业微信自建消息推送应用
服务器·python·企业微信
虎头金猫6 小时前
如何解决 403 错误:请求被拒绝,无法连接到服务器
运维·服务器·python·ubuntu·chatgpt·centos·bug