fixture固件和装饰器@pytest.mark.parametrize的参数化差异

server/2024/9/24 21:48:49/

fixture固件中有params参数可以进行参数化配置,装饰器@pytest.mark.parametrize也可以为用例进行参数化配置,它们都是pytest框架中用于参数化测试的机制,但它们之间还是有很大差异的,该篇文章就来讲一讲这二者的区别使用:

一、作用上的差异

pytest.fixture是用于提供测试依赖项(如初始化数据、资源、环境状态等)的函数。它们可以用来设置测试前的初始状态、准备必要的测试数据、创建和清理临时资源(如数据库连接、文件、网络连接等),确保测试的隔离性和可重用性。

pytest.mark.parametrize 是一个装饰器,用于直接为测试函数指定一组或多组具体的输入参数和(可选的)预期输出。它使测试函数能够根据提供的数据集执行多次,每次使用不同的参数值,从而实现测试用例的参数化

二、生命周期上的差异

pytest.fixture可以定义不同的作用域(如 function、class、module、session),决定其在何时被创建、何时被销毁。同一个 fixture 在其作用域内对所有使用它的测试函数都是共享的,除非显式指定为每次使用时重新创建(使用 autouse=True 或 scope='function')。

pytest.mark.parametrize每个使用 pytest.mark.parametrize 的测试函数实例仅在其自身的执行期间存在,不涉及任何共享状态或资源管理。参数化数据只影响测试函数的调用次数和传入的参数。

三、使用方式上的差异

pytest.fixture通过在测试函数的参数列表中直接引用 fixture 函数名,pytest 会在运行测试函数前调用对应的 fixture 函数来获取所需资源,测试完成后执行 fixture 中的 yield(或 return,对于异步 fixture 使用 async def 和 await)语句之后的清理代码。

pytest.mark.parametrizepytest.mark.parametrize 装饰器放置在测试函数定义之上,指定参数名和参数值列表(或生成器)。测试函数内部根据这些参数编写测试逻辑。

四、参数化方式差异

pytest.fixture自身可以通过 params 参数进行参数化,这样同名 fixture 会为每个参数值生成一个独立的版本,对应到不同的测试用例中。测试函数通过接收这些参数化的 fixture 来执行针对不同数据或环境状态的测试。

pytest.mark.parametrize参数化数据直接在装饰器中定义,可以是静态的列表、元组、字典等,也可以是从外部源(如文件、数据库、API)动态获取的数据。测试函数根据参数化数据的不同组合生成多个独立的测试用例。

五、差异总结

  1. 目的不同:fixture 主要用于管理和提供测试所需的依赖和资源,确保测试的可重复性和环境一致性;而 pytest.mark.parametrize 专注于对测试函数的输入参数进行多样化,以覆盖多种特定的测试场景。
  2. 生命周期管理:fixture 有明确的作用域概念,负责资源的创建、共享和清理;pytest.mark.parametrize 不涉及资源管理,只影响测试函数本身的执行次数。
  3. 使用位置:fixture 通过在测试函数参数列表中引用其名称来使用;pytest.mark.parametrize 通过装饰测试函数并指定参数名和参数值来使用。
  4. 参数化方式:fixture 通过自身定义中的 params 参数实现参数化pytest.mark.parametrize 直接在装饰器中定义参数化数据。

两者可以结合使用,一个测试函数既可以通过引用参数化的 fixture 来获取准备好的测试资源,又可以使用 pytest.mark.parametrize 来接收一组或多组不同的直接参数值,从而实现复杂测试场景的细粒度覆盖。这样的组合使用可以充分利用 pytest 提供的参数化能力,以灵活、高效的方式组织和执行测试用例。

希望这篇文章能有效帮助大家区分固件fixture的参数化和装饰器pytest.mark.parametrize


http://www.ppmy.cn/server/17454.html

相关文章

爱普生发布一款16位MCU产品用于大电流LED驱动

精工爱普生发布一款内置Flash存储器的16位微控制器S1C17M13 该新品可以提供最大56mA的驱动电流用于驱动发光二极管(LED) 以往爱普生的微处理器大多继承了液晶驱动器电路,但近来随着工业自动化和家用设备使用7段LED显示的数量大幅增加,爱普生也推出了对应…

大数据时代的引擎:大数据架构随记

大数据架构通常可以分为以下几层: 一、数据采集层 负责从各种数据源采集、清洗、转换、丰富以及格式化数据,可能包括结构化、半结构化和非结构化的数据。 1.1、常用的技术 在大数据领域,数据采集是一个关键的环节,常用的数据采集…

Django模型的继承

Django模型的继承 Django模型的继承,包括模型的抽象基类、Meta继承、related_name和related_query_name属性、多表继承、Meta和多表继承、继承与反向关系、代理模型、代理模型继承和未托管模型,以及多重继承等内容。本文讲解一下抽象基类继承&#xff0…

亚信安慧AntDB:数据浪潮领航者

随着大数据时代的蓬勃发展,对高效、稳定的数据库需求日益迫切。在这一背景下,国产数据库如雨后春笋般崭露头角,其中亚信安慧AntDB凭借其卓越的性能与创新能力,成为了行业内的佼佼者。AntDB不仅致力于技术的革新与突破,…

vue3图片展示实战

首先得有一个vue3项目 教程: vue3项目搭建 我测试存在两种方式可以将本地图片进行展示到页面 public文件夹下可以直接导入src下的asset文件夹下的图片导入方式(图中是的原因是在默认配置中将src配置为了,也可以写全路径)网页图片不可导入,应…

Linux setleds命令教程:如何控制键盘LED灯(附实例详解和注意事项)

Linux setleds命令介绍 setleds命令用于报告和更改VT的LED标志设置,即NumLock、CapsLock和ScrollLock。如果没有参数,setleds会打印当前的设置。有参数的话,它会设置或清除指定的标志(并保留其他标志不变)。 Linux s…

CDR2024版本免费Windows10包含免费激活码序列号

CorelDRAW2024作为一款专业的平面设计软件,专注于矢量图形编辑与排版,其强大的功能和丰富的工具集为设计师们提供了无限可能。在最新版本中,CorelDRAW引入了一系列令人瞩目的新功能,进一步提升了用户体验和工作效率。以下是对Core…

【Yolov系列】Yolov5学习(一)补充1.2:自适应锚框计算详解+代码注释

一、自适应锚框计算详解 自适应锚框计算的具体过程: ①获取数据集中所有目标的宽和高。 ②将每张图片中按照等比例缩放的方式到 resize 指定大小,这里保证宽高中的最大值符合指定大小。 ③将 bboxes 从相对坐标改成绝对坐标,这里…