使用pytest的 reporting特性来生成报告

2024-08-30 16:44

本文主要是介绍使用pytest的 reporting特性来生成报告,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

特性

1.HTML 报告:使用 pytest-html 插件,你可以生成 HTML 格式的测试报告。只需在项目的 pytest.ini 文件中添加以下内容:

[pytest]
addopts = --html=report.html

然后,在运行 pytest 时,将会生成一个名为 report.html 的 HTML 文件,其中包含了测试用例的详细信息和结果。

2.XML 报告:使用 pytest-xml 插件,你可以生成 XML 格式的测试报告。同样,在项目的 pytest.ini 文件中添加以下内容:

[pytest]
addopts = --xml=report.xml

运行 pytest 后,将会生成一个名为 report.xml 的 XML 文件,可供其他工具或系统使用。

3.JSON 报告:使用 pytest-json 插件,你可以生成 JSON 格式的测试报告。在 pytest.ini 文件中添加以下内容:

[pytest]
addopts = --json=report.json

运行 pytest 后,将会生成一个名为 report.json 的 JSON 文件,包含了测试用例的相关信息。

4.控制台报告:默认情况下,pytest 在控制台输出测试结果。你可以通过设置 pytest.ini 文件中的 verbosity 选项来控制报告的详细程度,例如:

[pytest]
verbosity = 2

这些 reporting 特性可以帮助你更好地了解测试的执行情况,并与其他团队成员或工具进行共享和分析。

如何在报告中添加自定义字段?

要在 pytest 的报告中添加自定义字段,你可以使用 pytest-html 插件来生成 HTML 格式的报告,并在报告中添加自定义字段。以下是一个示例,展示了如何在 HTML 报告中添加自定义字段 Environment 和 Execution Time:

import datetime
from py.xml import html
import pytest
import time
# 修改报告名称
def pytest_html_report_title(report):report.title = "接口自动化测试报告"
# 添加环境项
def pytest_configure(config):config._metadata('测试人员') = 'emily'
# 添加执行时间
def pytest_html_results_table_header(cells):cells.insert(0, html.th('用例编号'))cells.insert(1, html.th('所属模块'))cells.insert(2, html.th('用例名称'))cells.insert(3, html.th('接口路径'))cells.insert(5, html.th('执行时间', class_='sortable time', col='time'))cells.pop(6)cells.pop()
# 获取测试节点
def pytest_html_results_table_row(report, cells):url = 'http://xxx.com'testnode = report.nodeid.encode("utf-8").decode("unicode_escape")caseid = testnode.split('-')(3)cells.insert(0, html.td(caseid))module = testnode.split('-')(2)cells.insert(1, html.td(module))casename = testnode.split('-')(1)url = url+testnode.split('-')(4)(:-1)cells.insert(2, html.td(casename))cells.insert(3, html.td(url))cells.insert(5, html.td(datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S"), class_='col-time'))cells.pop(6)cells.pop()
# 在运行测试之前执行的钩子函数
@pytest.hookimpl(hookwrapper=True)
def pytest_runtest_makereport(item, call):outcome = yieldreport = outcome.get_result()report.casename = str(item.function.__code__.co_varnames)

首先,在 pytest_configure 函数中,使用 config._metadata 来添加一个名为 测试人员 的自定义字段,其值为 emily。接下来,在 pytest_html_results_table_header 函数中,向 HTML 报告的表头中添加了一个名为 执行时间 的新列。然后,在 pytest_html_results_table_row 函数中,从测试用例中获取相关信息,并将其插入到报告的行数据中。最后,使用 pytest_runtest_makereport 钩子函数来修改测试用例的名称,使其包含函数的参数名。

运行 pytest 命令后,将会生成一个名为 report.html 的 HTML 文件,其中包含了测试用例的详细信息和结果,并且包含了自定义字段 Environment 和 Execution Time。

如何在报告中添加图表?

可以使用一些第三方库或工具来实现。以下是一种常见的方法,使用 Python 的 Matplotlib 库来生成图表并将其嵌入到 HTML 报告中:

  1. 首先,确保你已经安装了 Matplotlib 库。

  2. 在你的测试用例中,使用 Matplotlib 绘制图表,并将其保存为图像文件(例如 PNG 格式)。

  3. 在 HTML 报告中,使用 HTML 和 CSS 来嵌入和显示图像。你可以在报告的适当位置添加 标签,并指定图像的路径。

以下是一个简单的示例,展示了如何在 HTML 报告中添加图表:

import pytest
import matplotlib.pyplot as plt
def test_sample_function():# 生成图表数据x = [1, 2, 3, 4, 5]y = [2, 4, 6, 8, 10]# 绘制图表plt.plot(x, y)plt.xlabel('X 轴')plt.ylabel('Y 轴')plt.title('图表示例')plt.savefig('chart.png')# 断言图表文件存在assert os.path.exists('chart.png')
@pytest.mark.parametrize('param', [1, 2, 3])
def test_with_params(param):# 在这里使用参数进行测试
# 修改报告名称
def pytest_html_report_title(report):report.title = "测试报告"
# 添加图表到报告中
def pytest_html_results_table_header(cells):cells.insert(0, html.th('用例编号'))cells.insert(1, html.th('所属模块'))cells.insert(2, html.th('用例名称'))cells.insert(3, html.th('图表', class_='sortable chart', col='chart'))
# 获取测试节点
def pytest_html_results_table_row(report, cells):url = 'http://xxx.com'testnode = report.nodeid.encode("utf-8").decode("unicode_escape")caseid = testnode.split('-')(3)cells.insert(0, html.td(caseid))module = testnode.split('-')(2)cells.insert(1, html.td(module))casename = testnode.split('-')(1)cells.insert(2, html.td(casename))cells.insert(3, html.td(html.Img(src='chart.png')))cells.pop(4)cells.pop()
# 在运行测试之前执行的钩子函数
@pytest.hookimpl(hookwrapper=True)
def pytest_runtest_makereport(item, call):outcome = yieldreport = outcome.get_result()report.casename = str(item.function.__code__.co_varnames)

在上述示例中,首先在测试用例中生成图表并保存为 chart.png。然后,在 HTML 报告的表头中添加了一个名为 图表 的新列。在报告的行数据中,使用 标签嵌入了图表图像。

感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:


这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!有需要的小伙伴可以点击下方小卡片领取   

这篇关于使用pytest的 reporting特性来生成报告的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1121373

相关文章

如何使用celery进行异步处理和定时任务(django)

《如何使用celery进行异步处理和定时任务(django)》文章介绍了Celery的基本概念、安装方法、如何使用Celery进行异步任务处理以及如何设置定时任务,通过Celery,可以在Web应用中... 目录一、celery的作用二、安装celery三、使用celery 异步执行任务四、使用celery

使用Python绘制蛇年春节祝福艺术图

《使用Python绘制蛇年春节祝福艺术图》:本文主要介绍如何使用Python的Matplotlib库绘制一幅富有创意的“蛇年有福”艺术图,这幅图结合了数字,蛇形,花朵等装饰,需要的可以参考下... 目录1. 绘图的基本概念2. 准备工作3. 实现代码解析3.1 设置绘图画布3.2 绘制数字“2025”3.3

Jsoncpp的安装与使用方式

《Jsoncpp的安装与使用方式》JsonCpp是一个用于解析和生成JSON数据的C++库,它支持解析JSON文件或字符串到C++对象,以及将C++对象序列化回JSON格式,安装JsonCpp可以通过... 目录安装jsoncppJsoncpp的使用Value类构造函数检测保存的数据类型提取数据对json数

python使用watchdog实现文件资源监控

《python使用watchdog实现文件资源监控》watchdog支持跨平台文件资源监控,可以检测指定文件夹下文件及文件夹变动,下面我们来看看Python如何使用watchdog实现文件资源监控吧... python文件监控库watchdogs简介随着Python在各种应用领域中的广泛使用,其生态环境也

Python中构建终端应用界面利器Blessed模块的使用

《Python中构建终端应用界面利器Blessed模块的使用》Blessed库作为一个轻量级且功能强大的解决方案,开始在开发者中赢得口碑,今天,我们就一起来探索一下它是如何让终端UI开发变得轻松而高... 目录一、安装与配置:简单、快速、无障碍二、基本功能:从彩色文本到动态交互1. 显示基本内容2. 创建链

springboot整合 xxl-job及使用步骤

《springboot整合xxl-job及使用步骤》XXL-JOB是一个分布式任务调度平台,用于解决分布式系统中的任务调度和管理问题,文章详细介绍了XXL-JOB的架构,包括调度中心、执行器和Web... 目录一、xxl-job是什么二、使用步骤1. 下载并运行管理端代码2. 访问管理页面,确认是否启动成功

使用Nginx来共享文件的详细教程

《使用Nginx来共享文件的详细教程》有时我们想共享电脑上的某些文件,一个比较方便的做法是,开一个HTTP服务,指向文件所在的目录,这次我们用nginx来实现这个需求,本文将通过代码示例一步步教你使用... 在本教程中,我们将向您展示如何使用开源 Web 服务器 Nginx 设置文件共享服务器步骤 0 —

Java中switch-case结构的使用方法举例详解

《Java中switch-case结构的使用方法举例详解》:本文主要介绍Java中switch-case结构使用的相关资料,switch-case结构是Java中处理多个分支条件的一种有效方式,它... 目录前言一、switch-case结构的基本语法二、使用示例三、注意事项四、总结前言对于Java初学者

Golang使用minio替代文件系统的实战教程

《Golang使用minio替代文件系统的实战教程》本文讨论项目开发中直接文件系统的限制或不足,接着介绍Minio对象存储的优势,同时给出Golang的实际示例代码,包括初始化客户端、读取minio对... 目录文件系统 vs Minio文件系统不足:对象存储:miniogolang连接Minio配置Min

使用Python绘制可爱的招财猫

《使用Python绘制可爱的招财猫》招财猫,也被称为“幸运猫”,是一种象征财富和好运的吉祥物,经常出现在亚洲文化的商店、餐厅和家庭中,今天,我将带你用Python和matplotlib库从零开始绘制一... 目录1. 为什么选择用 python 绘制?2. 绘图的基本概念3. 实现代码解析3.1 设置绘图画