pytest(二)

1.pytest-html⽣成报告


        Pytest-HTML 是⼀个插件,它可以⽣成漂亮且易于阅读的 HTML 测试报告。下⾯是使⽤ pytest-html ⽣成报告的步骤:

        1. 安装 pytest-html 插件:
        

pip install pytest-html

2. 运⾏测试并⽣成报告

        

pytest --html=report.html

使⽤ --html 选项指定报告⽂件的名称和路径。在上述示例中,报告将⽣成为report.html ⽂件。


3. 查看⽣成的报告:


        打开⽣成的 HTML 报告⽂件,你将看到测试结果的摘要、详细的测试⽤例执⾏信息、失败⽤           例的堆栈跟踪等。报告通常包括以下内容

        

概述信息:显示运⾏的测试数量、通过的测试数量、失败的测试数量等概览信息。

测试⽤例列表:列出每个测试⽤例的名称、状态(通过、失败、跳过等)、执⾏时间等信息。

错误和失败详情:提供失败⽤例的详细信息、堆栈跟踪等,帮助你快速定位和解决问题。

图表和图形化统计信息:可视化展示测试结果、⽤例通过率、执⾏时间等数据。

4. ⾃定义报告的样式和配置:

        pytest-html 提供了许多配置选项,你可以在 pytest.ini ⽂件中添加如下配置来⾃定义报告的样式和⾏为:

        

[pytest] [pytest]
addopts = --html=report.html --self-contained-html
html_title = My Test Repor

addopts :设置⽣成报告的选项,包括报告⽂件的名称和路径。

html_title :设置报告的标题

也可以直接在main上进行设置

2.pytest-html在报告中添加图⽚
 

在 pytest 中,你可以使⽤ extra 参数和 extras 参数来向 pytest-html 报告添加⾃定义的额外信息,包括图⽚。
 


from pytest_html import extrasdef test_add_img(extra):  # extra ---》 pytest的默认的外部数据列表def image_to_base64(image_path):import base64"""这个函数是将图片转化为base64数据"""with open(image_path, "rb") as image_file:encoded_string = base64.b64encode(image_file.read())return encoded_string.decode('utf-8')# # 添加图片文件image_path = "E:\Python\资料\QQ浏览器截图20240303180637.jpg"  # 这里你可以换成你的图片路径extra.append(extras.jpg(image_path))  # 添加图片# 添加base64格式的图片base64_data = image_to_base64(image_path)extra.append(extras.image(base64_data))

3.Pytest获取⽤例结果流程

pytest_runtest_makereport 是 pytest 的钩⼦函数之⼀。它在每个测试⽤例运⾏完成后被调⽤,并提供了测试结果的详细信息。通过使⽤这个钩⼦函数,你可以⾃定义测试报告的输出,包括添加截图、⽇志等附加信息。
 

# file name: conftest.py
import pytest
@pytest.hookimpl(hookwrapper=True) # 写死的
def pytest_runtest_makereport(item, call): # 写死的
outcome = yield
report = outcome.get_result()
if report.when == "call": # 过滤 前置,和后置,只保留运⾏中的状态
print("⽤例执⾏结果:", report.outcome) # ⽤例执⾏结果

4.pytest-html的异常时添加图⽚实现

        


import pytest
from pytest_html import extras@pytest.hookimpl(hookwrapper=True)  # 写死的
def pytest_runtest_makereport(item, call):  # 写死的def image_to_base64(image_path):import base64"""这个函数是将图片转化为base64数据"""with open(image_path, "rb") as image_file:encoded_string = base64.b64encode(image_file.read())return encoded_string.decode('utf-8')outcome = yieldreport = outcome.get_result()extra = getattr(report, "extra", [])if report.when == "call":  # 过滤 前置,和后置,只保留运行中的状态print("用例执行结果:", report.outcome)  # 用例执行结果if report.outcome != "passed":"""失败截图数据"""image_path = "E:\Python\资料\QQ浏览器截图20240303180637.jpg"  # 这里你可以换成你的图片路径base64_data = image_to_base64(image_path)extra.append(extras.image(base64_data))report.extra = extra  # 替换数据中的 extra 对象

5.allure-pytest⽣成测试报告

        在官网下载allure

Central Repository: io/qameta/allure/allure-commandline (apache.org)

配置环境


        下载allure-pytest插件

        pip install allure-pytest
 

        环节⼀,得到测试结果数据:

        

import pytest
pytest.main(["--alluredir","./allure_results"])

        --alluredir : ⽤于指定⽣成 Allure 报告所需的数据⽂件的存储⽬录。 -- alluredir 后⾯的参数 ./allure_results 指定了存储⽬录的路径。你可以根据需要更改为其他⽬录路径。
 

环节⼆,根据结果数据⽣成测试报告:
 

import os
os.system(r"allure generate --clean ./allure_results -o
./allure_report")

allure generate : 是 Allure 命令⾏⼯具的命令,⽤于根据测试结果数据⽣成 Allure报告

--clean : 是⼀个选项,⽤于在⽣成报告之前先清理输出⽬录,以确保报告是最新的。

./allure_results : 是存储测试结果数据的⽬录路径。这个命令告诉 Allure ⼯具从该⽬录中读取测试结果数据。

-o ./allure_report : 是指定⽣成的 Allure 报告的输出⽬录路径。这个命令告诉Allure ⼯具将⽣成的报告存储在 ./allure_report ⽬录中。你可以根据需要更改为其他⽬录路径。

我们打开网页如下所示

6.allure-pytest的⾏为驱动标记

        在 Allure 报告中, feature 和 story 被称为⾏为驱动标记,⽤于描述测试⽤例所 属的功能和故事。

        feature 标记⽤于标识测试⽤例所属的功能或模块。它表示被测试的系统中的 ⼀个主要功能。可以将 feature 视为⼀个⼤的分类或主题,⽤于组织和描述相 关的测试⽤例

        story 标记⽤于进⼀步细分 feature ,描述测试⽤例所属的具体故事或场景。 它表示在功能中的⼀个具体情境或使⽤案例。可以将 story 视为 feature 的 ⼦分类,⽤于更详细地描述测试⽤例

例子如下

import allure
@allure.feature("⽤户管理")
@allure.story("创建⽤户")
def test_create_user():
assert True
@allure.feature("⽤户管理")
@allure.story("删除⽤户")
def test_delete_user():
assert True

在 Allure 报告中, feature 和 story 标记将以层次结构的形式显示,帮助你更好 地组织和理解测试⽤例的关系。这样的标记可以提供更丰富的上下⽂信息,使测试报 告更易读、易懂,同时也⽅便进⾏功能和故事的筛选和过滤。

如上图所示 ,我们分成了用户管理和用户管理22 这便是由feture来管理,而用户管理下面的创建用户和创建用户1 这些则是由story来进行管理

7.allure-pytest的步骤管理

        Allure-pytest 提供了步骤管理功能,可以帮助在测试⽤例中记录和展示测试步骤的执 ⾏情况。步骤管理可以提供更详细的测试过程描述,帮助定位问题和跟踪测试执⾏。

        下⾯是使⽤ Allure-pytest 进⾏步骤管理的简单步骤:

        1. 在测试⽤例中使⽤ @allure.step 装饰器定义步骤:

import allure@allure.step("步骤1:登录系统")
def step_login_system(username, password):# 登录系统的代码逻辑print("登录", username, password)@allure.step("步骤2:搜索商品")
def step_search_product(product_name):# 搜索商品的代码逻辑print("搜索商品", product_name)@allure.step("步骤3:添加商品到购物车")
def step_add_to_cart(product_id):# 添加商品到购物车的代码逻辑print("添加商品id:", product_id, "到购物车")@allure.step("步骤4:结算购物车")
def step_checkout_cart():# 结算购物车的代码逻辑print("结算购物车")@allure.step("步骤5:确认订单")
def step_confirm_order():# 确认订单的代码逻辑print("确认订单")

2. 在测试⽤例中按照顺序调⽤定义的步骤:

def test_shopping_flow():step_login_system("testuser", "password")step_search_product("iPhone")step_add_to_cart("12345")step_checkout_cart()step_confirm_order()assert True

3. 在 Allure 报告中,每个步骤都将被记录和展示,并且可以查看每个步骤的执⾏状 态、⽇志和截图等信息。这样的步骤管理可以帮助测试⼈员更好地理解测试过 程,快速定位和排查问题

 我们还可以在每个步骤中都创建出子步骤

        


import alluredef test_step_show():with allure.step("步骤1"):print("步骤1的逻辑代码")with allure.step("步骤2"):print("步骤2的逻辑代码")with allure.step("子步骤2.1"):print("子步骤2.1的逻辑代码")with allure.step("子步骤2.2"):print("子步骤2.2的逻辑代码")with allure.step("步骤3"):print("步骤3的逻辑代码")

8.allure-pytest在报告中添加图⽚

添加图⽚可以提供更直观的信息展示,帮助测试⼈员和利益相关者更好地理解测试结 果。

Allure-pytest 测试框架中使⽤ @allure.attach 装饰器将图⽚作为附件添加到报告 中。

通过以下步骤实现在 Allure 报告中添加图⽚:

1. 将图⽚准备好,可以是⽂件路径或者已经编码为 base64 的图⽚内容。

        

with open(image_path, 'rb') as image_file:
allure.attach(image_file.read(), name='Uploaded
Image', attachment_type=allure.attachment_type.PNG)

2. 使⽤ allure.attach ⽅法将图⽚作为附件添加到报告中。

3. 指定附件的名称和类型,通常是 PNG 或 JPEG 格式。

def test():image_path = "png.png"with open(image_path, 'rb') as image_file:allure.attach(image_file.read(), name='图片的名称', attachment_type=allure.attachment_type.PNG)

9.allure-pytest的异常时添加图⽚实现

@pytest.hookimpl(hookwrapper=True)  # 写死的
def pytest_runtest_makereport(item, call):  # 写死的outcome = yieldreport = outcome.get_result()if report.when == "call":  # 过滤 前置,和后置,只保留运行中的状态if report.outcome != "passed":"""失败截图数据"""image_path = "png.png"  # 这里你可以换成你的图片路径with open(image_path, 'rb') as image_file:allure.attach(image_file.read(), name='异常截图', attachment_type=allure.attachment_type.PNG)

10Pytest的数据驱动⽅案

数据驱动是⼀种常⻅的测试⽅案,它允许我们使⽤不同的测试数据来执⾏相同的测试 ⽤例。这种⽅法可以帮助我们提⾼测试覆盖率,减少代码冗余,并更好地组织测试代 码

        pytest⽀持多种数据驱动的⽅案,下⾯是⼏种常⻅的⽅法:

        1.使⽤@pytest.mark.parametrize装饰器:

        pytest提供了⼀个装饰器 @pytest.mark.parametrize ,它可以⽤来将测试函数参数 化。通过这个装饰器,我们可以指定多个参数值的组合,pytest会⾃动为每个组合⽣ 成⼀个独⽴的测试⽤例。

       

import pytest@pytest.mark.parametrize("input1, input2, expected", [(1, 2, 3),(5, 5, 10),(10, -2, 8)
])
def test_addition(input1, input2, expected):print("input1的数据", input1)print("input2的数据", input2)print("expected的数据", expected)assert input1 + input2 == expected

在上⾯的示例中, test_addition 函数被参数化为三个参数: input1 , input2 和 expected 。 @pytest.mark.parametrize 装饰器定义了参数值的组合,每个组 合都会⽣成⼀个独⽴的测试⽤例。

2..使⽤fixtures和数据⽂件:

我们可以结合pytest的fixtures来实现数据驱动。在这种⽅法中,我们可以使⽤fixture 读取和处理数据⽂件,并将数据作为参数传递给测试函数

        

import pytest@pytest.fixture(params=[(1, 2, 3),(5, 5, 10),(10, -2, 8)
], name="test_data")
def data(request):return request.param

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

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

相关文章

5月13号作业

使用消息队列实现的2个终端之间的互相聊天 并使用信号控制消息队列的读取方式: 当键盘按ctrlc的时候,切换消息读取方式,一般情况为读取指定编号的消息,按ctrlc之后,指定的编号不读取,读取其他所有编号的消息…

CCF-Csp算法能力认证,202209-1如此编码(C++)含解析

前言 推荐书目,在这里推荐那一本《算法笔记》(胡明),需要PDF的话,链接如下 「链接:https://pan.xunlei.com/s/VNvz4BUFYqnx8kJ4BI4v1ywPA1?pwd6vdq# 提取码:6vdq”复制这段内容后打开手机迅雷…

python内置函数exec()和eval()区别

在Python中,eval() 和 exec() 都是内置函数,用于执行存储在字符串或对象中的Python代码,但它们之间也有一些区别。 eval() 语法:eval(expression, globalsNone, localsNone) expression:需要求值的字符串表达式。可…

到底考不考CISP?纠结的看过来

专业认证如CISP(注册信息安全专业人员)成为了衡量专业水平的重要标准。 CISP的含金量懂的都懂,然而,是否要投入时间、精力和金钱去追求这样一个认证,对于许多人来说,依然是一个值得深思的问题。 那么到底…

第十一届蓝桥杯大赛软件类决赛 Java C 组

文章目录 发现宝藏【考生须知】试题 A: 美丽的 2试题 B: 合数个数试题 C: 扩散试题 D: 阶乘约数试题 E: 本质上升序列试题 F 天干地支试题 G 皮亚诺曲线距离试题 H 蓝肽子序列试题 I: 画廊试题 J 答疑 发现宝藏 前些天发现了一个巨牛的人工智能学习网站,通俗易懂&a…

Linux 操作系统多路IO复用

1.多路IO复用 多路I/O复用是通过一种机制,可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作。 这个机制能够通过select/poll/eroll等来使用。这些函数都可以同时监视多…

文件流-二进制文件(中北大学-程序设计基础(2))

目录 题目 源码 结果示例 题目 建立两个二进制磁盘文件f1.dat,f2.dat,编程实现以下工作: (1)将20个整数(可在程序中初始化),分别存放到两个磁盘文件中,前10个放到f1.dat中&…

Linux下网络命令

目录 需求1-查看本机是否存在22端口解法1解法2解法3 需求2-查看其他主机是否存在22端口解法1解法2解法3 需求3-查看TCP连接解法1/2 需求4-统计80端口tcp连接次数解法 需求5-查看总体网络速度解法 需求6-查看进程流量解法 需求7-dns解法 需求8-traceroute到baidu解法 需求9-查看…

任务通知理论和使用

文章目录 一、任务通知是什么?1.1任务通知的优势1.2任务通知的限制1.3通知状态和通知值 二、任务通知的使用2.1任务通知使用_轻量级信号量2.2任务通知使用_轻量级队列2.3任务通知使用_轻量级事件组 一、任务通知是什么? 我们使用队列、信号量、事件组等…

浅析视频汇聚EasyCVR视频融合云平台在机场安防智能检测建设中的应用

一、背景 机场作为国家交通枢纽和对外开放的窗口,其安全运行直接关系到乘客的生命安全、国家形象以及社会经济稳定。随着全球航空业的快速发展和人们出行需求的持续增长,机场作为重要的交通枢纽,其客流量和货运量均呈现出快速增长的态势。然而…

HCIP的学习(16)

BGP的状态机 ​ OSPF的状态机是在描述整个协议的完整工作过程,而BGP的状态机仅描述的是对等体关系建立过程中的状态变化。-----因为BGP将邻居建立过程以及BGP路由收发过程完全隔离。 ​ IGP协议在启动后,需要通过network命令激活接口,从而使…

SD-WAN供应商选择指南

企业网络日益演变,尤其是跨国企业、出海电商和外贸企业,其网络需求变得愈发复杂多样。SD-WAN技术因此备受瞩目,成为连接分支机构和数据中心的关键解决方案。然而,市面上的SD-WAN供应商众多,如何选择适合的服务商成为了…

gitignore配置不生效记录

第一种可能性: 在你所有的文件都通过了git add . 命令的情况下,使用指令git rm -r --cached .进行缓存清除,完成之后,再次通过git add . 然后通过git status去看提交的文件都有哪些。 第二种可能性 如果上面的不行就是你添加的…

【机器学习】Scikit-Learn:Python机器学习的瑞士军刀

Scikit-Learn:Python机器学习的瑞士军刀 一、Scikit-Learn简介二、Scikit-Learn的核心功能数据预处理模型选择模型评估模型部署 三、Scikit-Learn的中文社区与API四、代码实例:使用Scikit-Learn进行鸢尾花数据集分类 在当今这个数据驱动的时代&#xff0…

论文《Deep graph tensor learning for temporal link prediction》阅读

论文《Deep graph tensor learning for temporal link prediction》阅读 论文概况IntroductionRelated work动态图表示学习图张量表示 Preliminary张量生成建模 深度图张量学习模型A.基于图紧凑的空间表示B.时间模式表示C.时空特征聚合D.损失函数 实验数据集对比实验消融实验参…

鸿蒙ArkUI开发:常用布局【交叉轴】

交叉轴 垂直于主轴方向的轴线。Row容器交叉轴为纵向,Column容器交叉轴为横向。通过alignItems属性设置子元素在交叉轴(排列方向的垂直方向)上的对齐方式alignSelf属性用于控制单个子元素在容器交叉轴上的对齐方式,其优先级高于al…

M 有效算法

M 有效算法 本题考验二分知识&#xff0c;思路是二分k的取值&#xff0c;就按第一组样例来说当我们k取值为1的时候我们遍历数组想让|8-x|<k1的话x的取值范围是7-9&#xff0c;想让|3-x|<k2的话x的取值范围是1-5&#xff0c;两者x的区间不重合&#xff0c;说明肯定没有x能…

BGP—边界网关协议

BGP 动态路由协议可以按照工作范围分为IGP以及EGP。IGP工作在同一个AS内&#xff0c;主要用来发现和计算路由&#xff0c;为AS内提供路由信息的交换&#xff1b;而EGP工作在AS与AS之间&#xff0c;在AS间提供无环路的路由信息交换&#xff0c;BGP则是EGP的一种。 BGP是一…

打开深度学习的锁:(0)什么是神经网络?有哪些必备的知识点准备?

PS&#xff1a;每每温故必而知新 什么是神经网络&#xff1f; 一、一个单神经元的神经网络二、多个单神经元的神经网络三、到底什么是机器学习&#xff1f;&#xff08;重点&#xff09;1&#xff1a;什么是机器学习的训练&#xff1f;2&#xff1a;什么是模型&#xff1f;权重…

接口测试全流程扫盲..

一.为什么要做接口测试&#xff1f; ①.越底层发现bug&#xff0c;它的修复成本是越低的。 ②.前端随便变&#xff0c;接口测好了&#xff0c;后端不用变&#xff0c;前后端是两拨人开发的。 ③.检查系统的安全性、稳定性&#xff0c;前端传参不可信&#xff0c;比如京东购物…