pytest教程-42-钩子函数-pytest_runtest_makereport

领取资料,咨询答疑,请➕wei:  June__Go

上一小节我们学习了pytest_runtest_teardown钩子函数的使用方法,本小节我们讲解一下pytest_runtest_makereport钩子函数的使用方法。

pytest_runtest_makereport 钩子函数在 pytest 为每个测试生成报告时调用。这个钩子可以用来自定义测试结果的报告,例如添加额外的信息到报告中,或者修改报告的格式。以下是如何使用这个钩子函数的具体方法和代码示例:

首先,确保你的项目中有一个 conftest.py 文件。然后,在 conftest.py 文件中定义 pytest_runtest_makereport 钩子函数:

# conftest.pyimport pytestdef pytest_runtest_makereport(item, call):# 获取测试结果报告report = item.get_reportinfo()# 检查测试结果if report.when == "call":if report.passed:# 如果测试通过,添加自定义信息report.extra_info = "Test passed without any issues."elif report.failed:# 如果测试失败,添加自定义错误信息report.extra_info = "Test failed due to an error."elif report.skipped:# 如果测试被跳过,添加自定义跳过原因report.extra_info = "Test was skipped as per the skip condition."# 如果需要修改报告的格式,可以在这里进行# 例如,你可以修改 report.nodeid, report.duration 等属性# 返回修改后的报告信息return report

在这个示例中,我们首先获取了当前测试的报告信息。然后,我们根据测试的结果(通过、失败或跳过)添加了自定义的信息到报告中。这些自定义信息将在 pytest 的报告中显示。

请注意,pytest_runtest_makereport 钩子函数的参数 item 是当前测试的 Item 对象,它包含了测试的相关信息。call 是一个函数,它代表了要执行的测试函数。item.get_reportinfo() 方法用于获取当前测试的报告信息。

这个示例展示了如何使用 pytest_runtest_makereport 钩子函数来自定义测试报告。在实际应用中,你可能需要根据具体的测试需求来调整这些操作,例如添加更多的自定义信息或者修改报告的其他属性。

在这个更复杂的示例中,我们将使用 pytest_runtest_makereport 钩子函数来增强 pytest 的测试报告。我们将添加自定义的测试结果信息,包括测试用例的执行时间、是否使用了特定的 fixture,以及在测试执行期间捕获的任何异常或警告。我们还将展示如何根据测试结果修改报告的输出。

首先,确保你的项目中有一个 conftest.py 文件。然后,在 conftest.py 文件中定义 pytest_runtest_makereport 钩子函数:

# conftest.pyimport pytest
import time
from _pytest.terminalwriter import TerminalWriterdef pytest_runtest_makereport(item, call):# 获取测试结果报告report = item.get_reportinfo()# 获取测试用例的执行时间execution_time = call.duration# 检查测试结果if report.when == "call":if report.passed:# 如果测试通过,添加执行时间和是否使用了特定 fixture 的信息report.extra_info = f"Test passed. Execution time: {execution_time:.2f}s. Used fixtures: {', '.join(item.fixturenames)}"elif report.failed:# 如果测试失败,添加执行时间、错误信息和是否使用了特定 fixture 的信息report.extra_info = f"Test failed. Execution time: {execution_time:.2f}s. Error: {report.longrepr}. Used fixtures: {', '.join(item.fixturenames)}"elif report.skipped:# 如果测试被跳过,添加跳过原因和是否使用了特定 fixture 的信息report.extra_info = f"Test skipped. Reason: {report.reason}. Used fixtures: {', '.join(item.fixturenames)}"# 如果需要修改报告的格式,可以在这里进行# 例如,我们可以自定义报告的输出def pytest_report_teststatus(report):if report.passed:TerminalWriter().write(f"{report.nodeid}: passed (time={execution_time:.2f}s)\n")elif report.failed:TerminalWriter().write(f"{report.nodeid}: failed (time={execution_time:.2f}s)\n")elif report.skipped:TerminalWriter().write(f"{report.nodeid}: skipped ({report.reason})\n")# 返回修改后的报告信息return report# 这个钩子函数用于自定义 pytest 的终端报告输出
def pytest_terminal_summary(terminalreporter):# 在这里可以添加自定义的总结信息,例如测试覆盖率、性能指标等pass

在这个示例中,我们首先获取了当前测试的报告信息和执行时间。然后,我们根据测试的结果(通过、失败或跳过)添加了详细的自定义信息到报告中。这些自定义信息包括执行时间、错误信息(如果测试失败)、跳过原因(如果测试被跳过)以及使用的 fixture 名称。

我们还定义了一个 pytest_report_teststatus 钩子函数来自定义 pytest 的终端报告输出。这个钩子函数允许我们为每个测试用例的报告添加自定义的文本输出。

最后,我们定义了一个 pytest_terminal_summary 钩子函数,它可以在测试完成后的终端报告中添加自定义的总结信息。在这个示例中,我们没有添加具体的输出内容,但你可以根据需要添加测试覆盖率、性能指标等信息。

请注意,这个示例中的代码仅用于演示如何使用 pytest_runtest_makereport 钩子函数来增强测试报告。在实际应用中,你可能需要根据具体的测试需求来调整这些操作。

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走,希望可以帮助到大家!领取资料,咨询答疑,请➕wei:  June__Go

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/9240.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

交易复盘-20240509

仅用于记录当天的市场情况,用于统计交易策略的适用情况,以便程序回测 短线核心:不参与任何级别的调整,采用龙空龙模式 一支股票 10%的时候可以操作, 90%的时间适合空仓等待 百合花 (4)|[9:25]|[17717万]|1.93 时代万恒…

多线程学习D10 收尾了应该

线程安全集合类概述 重点介绍java.util.concurrent.* 下的线程安全集合类,可以发现它们有规律,里面包含三类关键词:Blocking、CopyOnWrite、Concurrent Blocking 大部分实现基于锁,并提供用来阻塞的方法 CopyOnWrite 之类容器修改…

代码随想录刷题随记31-贪心5

代码随想录刷题随记31-贪心5 435. 无重叠区间 leetcode链接 按照右边界排序,从左向右记录非交叉区间的个数。 此时问题就是要求非交叉区间的最大个数。 这里记录非交叉区间的个数还是有技巧的,如图: 左边界排序可不可以呢? 也是…

mysql安装及基础设置

关系型数据库 MySQL是一种关系型数据库管理系统,采用了关系模型来组织数据的数据库,关系数据库将数据保存在不同的表中,用户通过查询 sql 来检索数据库中的数据。 yum 方式安装 mysql # yum -y install mysql-server # systemctl start my…

信号槽机制

目录 信号槽机制 Qt 中的信号 槽函数 槽函数定义 通过代码创建槽函数 通过ui文件创建槽函数 自定义信号 带参数的信号与槽 信号槽断开绑定 信号槽机制 信号和槽机制是 Qt 中一个非常重要的一个机制, 因为有信号和槽机制, 就可以通过某些条件的触发来调用这些槽函数, …

ASP.NET信息安全研究所设备管理系统的设计与实现

摘 要 以研究所的设备管理系统为背景,以研究所设备管理模式为研究对象,开发了设备管理系统。设备管理系统是设备管理与计算机技术相结合的产物,根据系统的功能需求分析与定义的数据模式,分析了应用程序的主要功能和系统实现的主…

zabbix动作执行命令失效不起作用?

1. zabbix在web界面设置完主机组,主机,监控项,触发器,动作之后 监控项监控到了,触发器触发动作,但是执行的指令不起作用 流程 在zabbix-agent端将nginx服务down掉,zabbix会自动监控并执行重启的…

TypeScript学习日志-第二十一天(声明文件d.ts)

声明文件d.ts 在使用 Typescript 并使用第三方库 的时候 我们会发现会有很多的提示或补全,这都是声明文件起的作用,但是有写冷门的第三方库是没有声明文件的,这时候引用就会报错,我们就使用 express 库作为例子来展示一下&#x…

CMake创建跨平台OPenGL工程(学习笔记)

一、跨平台环境基本配置 1、环境搭建 1)linux OpenGL环境搭建参考:ubuntu18.04 OpenGL开发(显示YUV)_ubuntu opengl-CSDN博客 https://blog.51cto.com/cerana/6433535 2)windows下环境搭建 OpenGLVisual Studio20…

【Linux系统】进程控制

再次理解进程 进程:内核的相关管理数据结构(task_struct(进程控制块PCB),mm_struct(地址空间),页表) 代码和数据 那么如何理解进程具有独立性? 我们之前已经学习过进程控制块啊,地址空间啊,页表啊&…

GitHub Actions 手动触发方式

目录 前言 Star Webhook 手动触发按钮 前言 GitHub Actions 是 Microsoft 收购 GitHub 后推荐的一款 CI/​CD 工具早期可能是处于初级开发阶段,它的功能非常原生,甚至没有直接提供一个手动触发按钮一般的触发方式为代码变动(push 、pull…

【2024版】最新6款漏洞扫描工具来了!(附下载)看完这一篇就够了

目录 一、Nessus 二、AWVS 三、ZAP 四、w3af 五、北极熊 六、御剑 七、网络安全学习路线 (2024最新整理) 八、学习资料的推荐 1.视频教程 2.SRC技术文档&PDF书籍 3.大厂面试题 特别声明: 渗透测试收集信息完成后&#xf…

每日两题 / 104. 二叉树的最大深度 102. 二叉树的层序遍历(LeetCode热题100)

104. 二叉树的最大深度 - 力扣(LeetCode) 递归判断,当前节点的最大深度为1 max(左节点的最大深度,右节点的最大深度) /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* …

Ansible---inventory 主机清单

一、inventory 主机清单 1.1、inventory介绍 hosts配置文件位置:/etc/ansible/hosts Inventory支持对主机进行分组,每个组内可以定义多个主机,每个主机都可以定义在任何一个或多个主机组内。 1.2、inventory中的变量 Inventory变量名含义…

八、VUE内置指令

一、初识VUE 二、再识VUE-MVVM 三、VUE数据代理 四、VUE事件处理 五、VUE计算属性 六、Vue监视属性 七、VUE过滤器 七、VUE内置指令 九、VUE组件 v-text 向其所在的节点中渲染文本内容。 (纯文本渲染)与插值语法的区别:v-text会替换掉节点中的内容,{{x…

springboot3项目练习详细步骤(第一部分:用户业务模块)

目录 环境准备 用户模块 注册 注册接口文档 ​编辑 实现结构 Spring Validation 登录 登录的接口文档 实现登录逻辑 JWT令牌 完善登录认证 拦截器 获取用户详细信息 接口文档 Usercontroller类中编写方法接口 忽略属性返回 优化代码ThreadLocal 更新用户基本信…

ubuntu启动修复(BIOS无法找到GRUB | 引导加载器)

Ubuntu启动修复(无法找到GRUB|引导加载器) 问题: 笔者的一台双系统主机,里面有两个硬盘,1T的硬盘装的是windows系统,2T硬盘装的是ubuntu20.04系统。因为长期使用ubuntu系统,所以选择格式化了1T…

Adobe Premiere Pro安装

一、安装包下载 链接:https://pan.baidu.com/s/1aYqTSQQutDguKYZE-yNHiw?pwd72l8 提取码:72l8 二、安装步骤 1.鼠标右击【Pr2024(64bit)】压缩包(win11及以上系统需先点击“显示更多选项”)【解压到 Pr2024(64bit)】。 2.打开…

【计算机毕设】小型企业办公自动化系统+vue - 免费源码(私信领取)

免费领取源码 | 项目完整可运行 | v:chengn7890 诚招源码校园代理! 1. 研究目的 本项目旨在设计并实现一个小型企业办公自动化系统,利用Vue作为前端框架,为企业员工提供便捷的办公管理工具,提升…

mysql数据库调优篇章1

目录 1.认识数据库中日志的作用2.增加mysql数据库中my.ini 基本配置3.增加my.ini中参数配置4.查看已经执行过的sql语句过去执行时间5.找出慢查询的sql6. SHOW VARIABLES LIKE ‘innodb_read_io_threads’; SHOW VARIABLES LIKE ‘innodb_write_io_threads’; SHOW VARIABLES LI…