Python 自动化测试(三): pytest 参数化测试用例构建

news/2025/1/11 9:50:27/

1080×501 27.2 KB


在之前的文章中主要分享了 pytest 的实用特性,接下来讲 Pytest 参数化用例的构建。
如果待测试的输入与输出是一组数据,可以把测试数据组织起来用不同的测试数据调用相同的测试方法。参数化顾名思义就是把不同的参数,写到一个集合里,然后程序会自动取值运行用例,直到集合为空便结束。pytest 中可以使用 @pytest.mark.parametrize 来参数化。
parametrize( ) 方法源码:

  • 主要参数说明
  • argsnames :参数名,是个字符串,如中间用逗号分隔则表示为多个参数名
  • argsvalues :参数值,参数组成的列表,列表中有几个元素,就会生成几条用例
  • 使用方法
  • 使用 @pytest.mark.paramtrize() 装饰测试方法
  • parametrize(‘data’, param) 中的 “data” 是自定义的参数名,param 是引入的参数列表
  • 将自定义的参数名 data 作为参数传给测试用例 test_func
  • 然后就可以在测试用例内部使用 data 的参数了
    创建测试用例,传入三组参数,每组两个元素,判断每组参数里面表达式和值是否相等,代码如下:
    运行结果:
    整个执行过程中,pytest 将参数列表 [(“3+5”,8),(“2+5”,7),("75",30)] 中的三组数据取出来,每组数据生成一条测试用例,并且将每组数据中的两个元素分别赋值到方法中,作为测试方法的参数由测试用例使用。
    同一个测试用例还可以同时添加多个 @pytest.mark.parametrize 装饰器, 多个 parametrize 的所有元素互相组合(类似笛卡儿乘积),生成大量测试用例。
    场景:比如登录场景,用户名输入情况有 n 种,密码的输入情况有 m 种,希望验证用户名和密码,就会涉及到 n
    m 种组合的测试用例,如果把这些数据一一的列出来,工作量也是非常大的。pytest 提供了一种参数化的方式,将多组测试数据自动组合,生成大量的测试用例。示例代码如下:
    运行结果:
    分析如上运行结果,测试方法 test_foo( ) 添加了两个 @pytest.mark.parametrize() 装饰器,两个装饰器分别提供两个参数值的列表,2 * 3 = 6 种结合,pytest 便会生成 6 条测试用例。在测试中通常使用这种方法是所有变量、所有取值的完全组合,可以实现全面的测试。
    下面讲结合 @pytest.fixture 与 @pytest.mark.parametrize 实现参数化。
    如果测试数据需要在 fixture 方法中使用,同时也需要在测试用例中使用,可以在使用 parametrize 的时候添加一个参数 indirect=True,pytest 可以实现将参数传入到 fixture 方法中,也可以在当前的测试用例中使用。
    parametrize 源码:
    indirect 参数设置为 True,pytest 会把 argnames 当作函数去执行,将 argvalues 作为参数传入到 argnames 这个函数里。创建“test_param.py”文件,代码如下:
    运行结果:
    上面的结果可以看出,当 indirect=True 时,会将 login_r 作为参数,test_user_data 被当作参数传入到 login_r 方法中,生成多条测试用例。通过 return 将结果返回,当调用 login_r 可以获取到 login_r 这个方法的返回数据。

 


http://www.ppmy.cn/news/6233.html

相关文章

C++中delete 和 delete []的真正区别

1.我们通常从教科书上看到这样的说明: delete 释放new分配的单个对象指针指向的内存 delete[] 释放new分配的对象数组指针指向的内存 那么,按照教科书的理解,我们看下下面的代码: int *a new int[10]; delete a; //方…

LeetCode HOT 100 —— 581. 最短无序连续子数组

题目 给你一个整数数组 nums ,你需要找出一个 连续子数组 ,如果对这个子数组进行升序排序,那么整个数组都会变为升序排序。 请你找出符合题意的 最短 子数组,并输出它的长度。 思路 方法一:双指针 排序 最终目的是让…

Python求多元函数的极小值

文章目录minimize_scalarminimize测试minimize_scalar 此为scipy中用于求函数最小值的方法,输入参数如下 minimize_scalar(fun, bracketNone, boundsNone, args(), methodbrent, tolNone, optionsNone)[source]其中,必选的参数只有一个,就是…

【算法】P1 算法简介

算法什么是算法正确与错误的算法算法可以解决什么问题本专栏有哪些算法什么是算法 算法 (Algorithm) 取某个值或集合作为 输入,并产生某个值或集合作为 输出。算法就是把输入转换为输出的计算,描述这个计算的过程来实现输入与输出的关系。 正确与错误的…

业聚医疗在港交所上市:市值约76亿港元,钱永勋、刘桂祯夫妇控股

12月23日,业聚医疗集团控股有限公司(下称“业聚医疗”,HK:06929)在港交所上市。本次上市,业聚医疗的发行价为8.80港元/股,全球发行发售5463.30万股,募集资金总额约为4.81亿港元,募资…

12【SpringMVC的异常处理】

文章目录六、SpringMVC的异常处理6.1 SpringMVC异常概述6.2 SpringMVC异常处理6.2.1 单个类处理方式6.2.2 处理全局异常6.2.3 注解方式实现全局异常六、SpringMVC的异常处理 6.1 SpringMVC异常概述 我们在处理异常时,通常使用try…catch块来处理程序中发生的异常&…

Hadoop综合项目——二手房统计分析(MapReduce篇)

Hadoop综合项目——二手房统计分析(MapReduce篇) 文章目录Hadoop综合项目——二手房统计分析(MapReduce篇)0、 写在前面1、MapReduce统计分析1.1 统计四大一线城市房价的最值1.2 按照城市分区统计二手房数量1.3 根据二手房信息发布…

直播弹幕系统(六)- SpringBoot + STOMP + RabbitMQ(使用MQ替代Spring代理)

直播弹幕系统(六)- SpringBoot STOMP RabbitMQ(使用MQ替代Spring代理)前言一. SpringBoot整合RabbitMQ代理Broker1.1 RabbitMQ安装STOMP插件(Docker)1.2 RabbitMQ相关准备1.3 其他代码二. 前端整合Rabbit…