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

news2024/11/18 15:49:51

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

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

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

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

# conftest.py

import pytest

def 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.py

import pytest
import time
from _pytest.terminalwriter import TerminalWriter

def 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.coloradmin.cn/o/1657759.html

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

相关文章

使用HashMap实现,对一个字符集进行哈夫曼编码

最终达到的效果: 调用一个类 class HuffmanCodin{.....} 使用类中的静态方法&#xff0c;获取哈夫曼编码&#xff1a; 事前准备——哈夫曼树的节点定义 class Node implements Comparable<Node> {int weight;//权重Node left;Node right;char ch;//关键字&#xff0c…

Zabbix5.0——安装与部署

目录 一、zabbix-server(192.168.206.134) 监控方 1. 环境准备 2.安装zabbix 2.1 准备zabbix-repo 2.2清理缓存 2.3安装zabbix主包&#xff08;服务器和代理&#xff09; 2.4安装zabbix前端包 3. 数据库安装 3.1 授权zabbix账号 3.2导入数据库&#xff08;初始化zabbix&#x…

切实有效的提高VMWARE游戏性能-各版本通杀 vm17pro

这里的游戏性能&#xff0c;当然了&#xff0c;特别指出的是3D性能&#xff0c;毕竟现在2D也很少了。 因为平时没啥事&#xff0c;所以&#xff0c;无聊就跟朋友挂挂游戏&#xff0c;没事写点代码折腾下。所以&#xff0c;免不了跟VMWARE搭上边。走了很多的弯路&#xff0c;中…

Linux-信号执行

1. 信号什么时候被处理 当进程从内核态返回到用户态的时候&#xff0c;进行信号的检测和处理 什么内核态&#xff0c;什么又是用户态呢&#xff1f; 当进程在CPU上运行时&#xff0c;内核态&#xff1a;允许进程访问操作系统的代码和数据&#xff0c;用户态&#xff1a;进程只…

Kubernetes容器技术详解

kubernetes Kubernetes&#xff08;K8s&#xff09;由Google打造&#xff0c;是一款功能强大、灵活可扩展的容器编排平台&#xff0c;引领云原生技术潮流。 Kubernetes主要解决以下4大点&#xff1a; 1.自动化运维平台 如下图所示&#xff1a; Kubernetes携手Docker&#xf…

【go项目01_学习记录08】

学习记录 1 模板文件1.1 articlesStoreHandler() 使用模板文件1.2 统一模板 1 模板文件 重构 articlesCreateHandler() 和 articlesStoreHandler() 函数&#xff0c;将 HTML 抽离并放置于独立的模板文件中。 1.1 articlesStoreHandler() 使用模板文件 . . . func articlesSt…

【动态规划】:路径问题_地下城游戏

朋友们、伙计们&#xff0c;我们又见面了&#xff0c;本专栏是关于各种算法的解析&#xff0c;如果看完之后对你有一定的启发&#xff0c;那么请留下你的三连&#xff0c;祝大家心想事成&#xff01; C 语 言 专 栏&#xff1a;C语言&#xff1a;从入门到精通 数据结构专栏&…

怎么用AI软件设计字体

一 工具准备 软件&#xff1a;Adobe illustrator 如下网盘自取 链接&#xff1a;https://pan.baidu.com/s/1hlImpN4QlsSkOLLUxINOGA 提取码&#xff1a;love 安装的时候看不全界面&#xff0c;多按几下tab键就能看到按钮。 直接找一款喜欢的字体修改&#xff0c;字体包如下…

PyCharm安装教程(超详细图文教程)

一、下载和安装 1.进入PyCharm官方下载&#xff0c;官网下载地址&#xff1a; https://www.jetbrains.com/pycharm/download/ 专业版安装插件放网盘了&#xff0c;网盘下载即可&#xff1a;itcxy.xyz/229.html2.安装 1.下载后找到PyCharm安装包&#xff0c;然后双击双击.ex…

【连连国际注册_登录安全分析报告】

连连国际注册/登录安全分析报告 前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 暴力破解密码&#xff0c;造成用户信息泄露短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨…

【ytb数据采集器】按关键词批量爬取视频数据,界面软件更适合文科生!

一、背景介绍 1.1 爬取目标 用Python独立开发的爬虫工具&#xff0c;作用是&#xff1a;通过搜索关键词采集油管的搜索结果&#xff0c;包含14个关键字段&#xff1a;关键词,页码,视频标题,视频id,视频链接,发布时间,视频时长,频道名称,频道id,频道链接,播放数,点赞数,评论数…

Eigen求解线性方程组

1、线性方程组的应用 线性方程组可以用来解决各种涉及线性关系的问题。以下是一些通常可以用线性方程组来解决的问题&#xff1a; 在实际工程和科学计算中&#xff0c;求解多项式方程的根有着广泛的应用。 在控制系统的设计中&#xff0c;我们经常需要求解特征方程的根来分析…

链式二叉树的基本操作1

1.概念回顾 讲二叉树的基本操作之前&#xff0c;我们回顾一下二叉树的概念 在讲树之前&#xff0c;我们的每讲一种数据结构&#xff0c;无外乎就是在讲它们的增删查改&#xff0c;但是在树这里&#xff0c;就有了不小变化。 2.结点的定义 既然是链式二叉树&#xff0c;那必须…

Python sqlite3库 实现 数据库基础及应用 输入地点,可输出该地点的爱国主义教育基地名称和批次的查询结果。

目录 【第11次课】实验十数据库基础及应用1-查询 要求: 提示: 运行结果&#xff1a; 【第11次课】实验十数据库基础及应用1-查询 声明&#xff1a;著作权归作者所有。商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处。 1.简答题 数据库文件Edu_Base.db&#…

FreeRTOS的任务详解、创建与删除

目录 1、任务详解 1.1 什么是任务&#xff1f; 1.2 任务的特点 1.3 任务的状态 1.4 任务的优先级 1.5 任务的堆和栈 2、任务的创建与删除 2.1 相关API 2.2 函数解析 2.2.1 xTaxkCreate() 2.2.2 xTaskCreateStatic() 2.2.3 vTaskDelete() 3、实战案例 3.1 创建两个…

​Inf-DiT:Upsampling Any-Resolution Image、Vidu、MVDiff、Trio-ViT

本文首发于公众号&#xff1a;机器感知 ​Inf-DiT&#xff1a;Upsampling Any-Resolution Image、Vidu、MVDiff、Trio-ViT Inf-DiT: Upsampling Any-Resolution Image with Memory-Efficient Diffusion Transformer Diffusion models have shown remarkable performance in im…

C++:STL-string

前言 本文主要介绍STL六大组件中的容器之一&#xff1a;string&#xff0c;在学习C的过程中&#xff0c;我们要将C视为一个语言联邦&#xff08;摘录于Effective C条款一&#xff09;。如何理解这句话呢&#xff0c;我们学习C&#xff0c;可将其分为四个板块&#xff1b;分别为…

基于springboot实现医院药品管理系统项目【项目源码+论文说明】

基于springboot实现医院药品管理系统演示 摘要 身处网络时代&#xff0c;随着网络系统体系发展的不断成熟和完善&#xff0c;人们的生活也随之发生了很大的变化&#xff0c;人们在追求较高物质生活的同时&#xff0c;也在想着如何使自身的精神内涵得到提升&#xff0c;而读书就…

python-类和对象

1、设计一个 Circle类来表示圆,这个类包含圆的半径以及求面积和周长的函数。再使用这个类创建半径为1~10的圆,并计算出相应的面积和周长。 &#xff08;1&#xff09;源代码&#xff1a; import math class Circle: def __init__(self, r): self.r r #面积 def area(self): r…

嵌入式开发九:STM32时钟系统

时钟对于单片机来说是非常重要的&#xff0c;它为单片机工作提供一个稳定的机器周期从而使系统能够正常运行。时钟系统犹如人的心脏&#xff0c;一旦有问题整个系统就崩溃。我们知道 STM32 属于高级单片机&#xff0c;其内部有很多的外设&#xff0c;但不是所有外设都使用同一时…