Pytest精通指南(28)钩子函数-测试报告(pytest-html)


文章目录

      • 前言
      • 应用场景
      • 插件安装
      • 参数分析
      • 使用方法
      • 拓展-定制化报告


请添加图片描述

前言

在软件开发过程中,测试是确保代码质量的关键环节。

测试报告则是测试过程中不可或缺的输出物,它为我们提供了关于测试用例执行情况的详细信息,帮助我们快速定位和解决问题。

pytest 是一个流行的 Python 测试框架,而 pytest-html 是一个为 pytest 提供的插件,用于生成 HTML格式的测试报告。

这个报告不仅包含了测试用例的执行情况,如成功、失败、跳过等,还会展示每个测试用例的输出信息、错误堆栈、截图等,使得测试结果更加直观和易于理解。

应用场景

项目交付与验收

  • 当项目即将交付给客户或进行验收时,提供一个详细的HTML测试报告
    可以帮助客户或团队成员快速了解软件的测试覆盖率和质量。

持续集成/持续部署(CI/CD)

  • CI/CD流程中,每次代码提交或构建都会触发自动化测试。
    pytest-html 可以生成易于阅读的HTML报告,帮助团队成员快速查看测试结果。

问题定位与调试

  • 当测试用例失败时,HTML报告中的详细信息可以帮助开发人员快速定位问题所在,提高调试效率。

回归测试

  • 在软件发布新版本时,确保之前的功能没有出现问题至关重要。
    pytest-html 可以帮助测试人员快速浏览之前的测试报告,了解哪些测试用例已经覆盖过相关功能。

插件安装

安装命令 pip install pytest-html

在这里插入图片描述

参数分析

pytest-html插件支持多种参数来定制生成的HTML报告。

以下是一些常用的参数:

–html=path/to/report.html

  • 指定生成的HTML报告的文件路径和名称。

–self-contained-html

  • 生成自包含的HTML报告
  • 即CSS、JavaScript、图片等都嵌入到HTML文件中,无需外部依赖。

–no-screenshots

  • 禁用失败测试用例的截图功能。

–metadata

  • 为报告添加元数据,如项目名称、版本信息等。

使用方法

示例代码

import pytestdef test_case_01():"""测试函数01"""print("测试函数01执行完成")def test_case_02():"""测试函数02"""print("测试函数02执行完成")def test_case_03():"""测试函数03"""print("测试函数03执行完成")assert False@pytest.mark.parametrize("data", [1, 3, 5, 7, 8])
def test_case_04(data):"""测试函数04"""print("测试函数04执行完成")assert data % 2 != 0, "偶数失败,奇数通过"

命令pytest -v -s --html=report.html --self-contained-html

执行结果

在这里插入图片描述

页面效果

在这里插入图片描述

拓展-定制化报告

pytest-html 插件生成的测试报告通常包含以下五个主要部分:

  1. Title(标题): 报告的顶部通常有一个标题,显示测试运行的基本信息,如运行时间、测试用例的总数等。
  2. Environment(环境): 这部分显示了运行测试时的环境信息,包括操作系统、Python 版本、pytest 版本以及任何通过配置添加的其他环境细节。
  3. Summary(摘要): 摘要部分提供了测试运行的概览,包括通过、失败、跳过和错误的测试用例数量。
  4. Results(结果): 结果部分详细列出了每个测试用例的执行情况,包括测试用例的名称、结果状态(通过/失败/跳过/错误)以及任何与测试相关的输出或错误消息。
  5. Results Table(结果表格): 结果表格是报告的核心部分,它以表格形式展示了每个测试用例的详细信息,包括持续时间、链接(如果有的话)和其他自定义列。

pytest-html 的钩子函数

pytest-html 插件提供了一系列钩子函数,允许用户定制报告的生成过程。

这些钩子函数需要在 conftest.py 文件中定义,以便在 pytest 运行时自动加载和使用。

钩子函数允许我们自定义报告的各个部分,例如:

  • 修改表格的头部:使用 pytest_html_results_table_header 钩子
  • 自定义表格的行内容:使用 pytest_html_results_table_row 钩子
  • 添加额外的报告细节:使用 pytest_html_report_sections 钩子

关于 pytest-metadata

某些高版本的 pytest 可能会推荐使用 pytest-metadata 插件来更好地管理测试元数据。

pytest-metadata 提供了一种机制来存储和检索与测试用例相关的元数据,这对于在报告中显示额外的信息非常有用。

如果需要使用 pytest-metadata,可以通过以下命令进行安装:

pip install pytest-metadata

在这里插入图片描述


官方文档:https://pytest-html.readthedocs.io/en/latest/user_guide.html#creating-a-self-contained-report

在这里插入图片描述


conftest.py文件示例代码

import os
import json
import pytest
import logging
from datetime import datetime
from pytest_metadata.plugin import metadata_key# 1、修改报告标题
def pytest_html_report_title(report):report.title = "我的测试报告标题"# 2、运行测试前修改环境信息
def pytest_configure(config):config.stash[metadata_key]["项目名称"] = "我的测试项目名称"config.stash[metadata_key]["接口模块"] = "我的测试接口模块"config.stash[metadata_key]["接口地址"] = "我的测试接口地址"# 3、动态生成log文件的名称,哪怕配置文件中配置了log_file选项也不会生效time_now = datetime.now().strftime('%Y%m%d%H%M%S')config.option.log_file = os.path.join(config.rootdir, 'log', f'{time_now}.log')# 4、修改摘要信息
def pytest_html_results_summary(prefix, summary, postfix):prefix.extend(["<p>所属部门: 测试xxx部门</p>"])prefix.extend(["<p>测试人员: 张三xxxxxx</p>"])# 5、修改测试结果表格中的列(插入列)
def pytest_html_results_table_header(cells):cells.insert(2, "<th>描述</th>")cells.insert(1, '<th class="sortable time" data-column-type="time">测试时间</th>')# 6、修改测试结果表格中的列(插入数据)
def pytest_html_results_table_row(report, cells):cells.insert(2, f"<td>{report.description}</td>")cells.insert(1, f'<td class="col-time">{datetime.utcnow()}</td>')# 7、获取测试函数中的doc注释
@pytest.hookimpl(hookwrapper=True)
def pytest_runtest_makereport(item, call):outcome = yieldreport = outcome.get_result()report.description = str(item.function.__doc__)# 8、获取测试函数中的异常错误信息if call.excinfo is not None:msg = {"module": item.location[0],"function": item.name,"line": item.location[1],"message": str(call.excinfo.value).replace("\n", ":")}logging.error(json.dumps(msg, indent=4, ensure_ascii=False))

pytest.ini文件示例代码

[pytest]
;打印详细日志,相当于命令行加 -vs
addopts = --capture=no --tb=long --html=report.html --self-contained-html --log-cli-level=INFO;日志开关 true/false
log_cli = true;输出到终端
;日志级别
log_cli_level = info
;日志格式
log_cli_format = %(asctime)s --> %(filename)-10s [line:%(lineno)-3d] --> %(levelname)-5s --> %(message)s
;日志时间格式
log_cli_date_format = %Y-%m-%d %H:%M:%S; 输出到文件
;日志文件位置
log_file = ./log/test.log
;日志文件等级
log_file_level = info
;日志文件格式
log_file_format = %(asctime)s --> %(filename)-10s [line:%(lineno)-3d] --> %(levelname)-5s --> %(message)s
;日志文件日期格式
log_file_date_format = %Y-%m-%d %H:%M:%S

test_case_01.py示例代码

import pytest
import logging
log = logging.getLogger(__name__)def test_case_01():"""测试函数01"""log.info("111")print("测试函数01执行完成")def test_case_02():"""测试函数02"""print("测试函数02执行完成")def test_case_03():"""测试函数03"""print("测试函数03执行完成")log.info(f"断言:1 == 2")assert False@pytest.mark.parametrize("data", [1, 3, 5, 7, 8])
def test_case_04(data):"""测试函数04"""print("测试函数04执行完成")assert data % 2 != 0, "偶数失败,奇数通过"

执行结果

在这里插入图片描述

页面效果

在这里插入图片描述

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

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

相关文章

二叉树的先序、中序和后序遍历,以及二叉树的高度

1、二叉树的三种遍历方式 前序遍历&#xff1a; 访问根节点前序遍历左子树前序遍历右子树示例&#xff1a;对于节点 A&#xff08;左子树为 B&#xff0c;右子树为 C&#xff09;&#xff0c;遍历顺序为 A -> B -> C。 中序遍历&#xff1a; 中序遍历左子树访问根节点中…

23年新算法,SAO-SVM,基于SAO雪消融算法优化SVM支持向量机回归预测(多输入单输出)-附代码

SAO-SVM是一种基于SAO雪消融算法优化的支持向量机&#xff08;SVM&#xff09;回归预测方法&#xff0c;适用于多输入单输出的情况。下面是一个简要的概述&#xff0c;包括如何使用SAO-SVM进行回归预测的步骤&#xff1a; 步骤&#xff1a; 1. 数据准备&#xff1a; 收集并准…

计算机服务器中了devicdata勒索病毒怎么处理,devicdata勒索病毒解密工具流程

随着网络技术的不断发展与应用&#xff0c;越来越多的企业离不开网络&#xff0c;通过网络可以开展各项工作业务&#xff0c;网络也为企业的生产运营提供各类极大便利&#xff0c;大大提高了生产效率&#xff0c;但网络在为企业提供便利的同时&#xff0c;也为企业的数据安全带…

机器学习中常见的数据分析,处理方式(以泰坦尼克号为例)

数据分析 读取数据查看数据各个参数信息查看有无空值如何填充空值一些特殊字段如何处理读取数据查看数据中的参数信息实操具体问题具体分析年龄问题 重新划分数据集如何删除含有空白值的行根据条件删除一些行查看特征和标签的相关性 读取数据 查看数据各个参数信息 查看有无空…

青否交互式数字人核心技术是什么?

交互式数字人核心技术 : &#xff08;1&#xff09;形象克隆 拍摄真人出镜&#xff0c;正视镜头说话的5-8分钟绿幕视频&#xff0c;即可复刻出口型、动作、神态等1:1的数字人形象&#xff0c;行业高精度中文唇形驱动技术&#xff0c;性能优势与性价比处于全国领先水平。 &#…

Photoshop 2024 25.4蓝猫版_支持参数滤波器和Ai神经滤镜

网盘下载 Photoshop 2024 (Beta) 蓝猫版v25.4.0(2426)全新功能&#xff1a;支持参数滤波器和AI神经滤镜。 最新的PS 25.4 Beta版新增了参数滤波器&#xff08;Parametric Filters&#xff09;功能&#xff0c;而正式版的PS 2024还没有这个功能&#xff0c;只有Beta版才有&…

WebSocket的原理、作用、API、常见注解和生命周期的简单介绍,附带SpringBoot示例

文章目录 原理作用客户端 API服务端 API生命周期常见注解SpringBoot示例 WebSocket是一种 通信协议 &#xff0c;它在 客户端和服务器之间建立了一个双向通信的网络连接 。WebSocket是一种基于TCP连接上进行 全双工通信 的 协议 。 WebSocket允许客户端和服务器在 单个TCP连接上…

【性能测试】ChaosTesting(混沌测试)ChaosBlade(混沌实验工具)(五)-jvm混沌实验

6. chaosblade-jvm实验场景 6.1 挂载 java agent blade prepare jvm 6.1.1 介绍 挂载 java agent&#xff0c;执行 java 实验场景必要步骤 6.1.2 参数 -j, --javaHome string&#xff1a; 指定 JAVA_HOME 路径&#xff0c;用于指定 java bin 和 tools.jar&#xff0c;如果…

科技赋能无人零售

科技赋能无人零售&#xff0c;使其具备以下独特优势&#xff1a; 1. 全天候无缝服务 &#xff1a;无人零售店依托科技&#xff0c;实现24小时不间断运营&#xff0c;不受人力限制&#xff0c;满足消费者随时购物需求&#xff0c;尤其惠及夜间工作者、夜猫子及急需购物者&…

TCP三次握手详解

目录 什么是TCP TCP头格式组成 三次握手 第一次握手 第二次握手 第三次握手 三次握手的好处 为什么需要三次握手&#xff1f; 什么是TCP 传输控制协议(TCP)是Internet一个重要的传输层协议。TCP提供面向连接、可靠、有序、字节流传输服务。 面向连接&#xff1a; 应用…

电磁仿真--基本操作-CST-(2)

目录 1. 回顾基操 2. 操作流程 2.1 创建工程 2.2 修改单位 2.3 创建 Shape 2.4 使用拉伸 Extrude 2.5 修改形状 Modify Locally 2.6 导入材料 2.7 材料解释 2.8 材料分配 2.9 查看已分配的材料 2.10 设置频率、背景和边界 2.11 选择 Edge&#xff0c;设置端口 2.…

ruoyi-nbcio-plus基于vue3的flowable收回任务后重新进行提交表单的处理

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码&#xff1a; https://gitee.com/nbacheng/ruoyi-nbcio 演示地址&#xff1a;RuoYi-Nbcio后台管理系统 http://122.227.135.243:9666/ 更多nbcio-boot功能请看演示系统 gitee源代码地址 后端代码&#xff1a…