当前位置: 首页 > news >正文

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

13af1243777629838c351d7232be160e.jpeg

在之前的文章中主要分享了 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 种,希望验证用户名和密码,就会涉及到 nm 种组合的测试用例,如果把这些数据一一的列出来,工作量也是非常大的。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 这个方法的返回数据。

免费领取:性能测试+接口测试+自动化测试+测试开发+测试用例+简历模板+测试文档


相关文章:

  • Java通过Zxing生成和解析二维码
  • 如何在手机浏览器中打开安卓APP
  • Postgresql 解决pg掉电后无法重启的问题
  • Git下载安装vue-antd-admin教程
  • dubbo服务暴露流程
  • 人老了才明白,走到最后,身边能依靠的不是老伴,也不是子女
  • PySpark SQL模块官方文档
  • 独立三方数据源!数据宝国有大数据为金融机构及物流企业提供双向赋能
  • Vuehtml2pdf的使用
  • java计算机毕业设计图书馆管理系统源码+系统+数据库+lw文档+mybatis+运行部署
  • 南京国家农创聚功能性农业主导产业 国稻种芯百团计划行动
  • A. Balance the Bits (思维构造)
  • k8s系列(二)——云计算相关概念
  • 数据挖掘学习笔记01——数据挖掘的基本流程
  • 分布式缓存Hazelcast的部署及与SpringBoot整合使用
  • 【译】JS基础算法脚本:字符串结尾
  • 2017前端实习生面试总结
  • CSS魔法堂:Absolute Positioning就这个样
  • Rancher-k8s加速安装文档
  • Spring Boot MyBatis配置多种数据库
  • SpringBoot几种定时任务的实现方式
  • Three.js 再探 - 写一个跳一跳极简版游戏
  • Webpack 4x 之路 ( 四 )
  • Work@Alibaba 阿里巴巴的企业应用构建之路
  • 对JS继承的一点思考
  • 给Prometheus造假数据的方法
  • 计算机常识 - 收藏集 - 掘金
  • 类orAPI - 收藏集 - 掘金
  • 前端技术周刊 2019-01-14:客户端存储
  • 时间复杂度与空间复杂度分析
  • 我从编程教室毕业
  • 无服务器化是企业 IT 架构的未来吗?
  • ​MPV,汽车产品里一个特殊品类的进化过程
  • ​你们这样子,耽误我的工作进度怎么办?
  • ​软考-高级-信息系统项目管理师教程 第四版【第14章-项目沟通管理-思维导图】​
  • ​水经微图Web1.5.0版即将上线
  • !! 2.对十份论文和报告中的关于OpenCV和Android NDK开发的总结
  • $con= MySQL有关填空题_2015年计算机二级考试《MySQL》提高练习题(10)
  • (04)odoo视图操作
  • (14)学习笔记:动手深度学习(Pytorch神经网络基础)
  • (30)数组元素和与数字和的绝对差
  • (LNMP) How To Install Linux, nginx, MySQL, PHP
  • (二)正点原子I.MX6ULL u-boot移植
  • (附源码)springboot 房产中介系统 毕业设计 312341
  • (规划)24届春招和25届暑假实习路线准备规划
  • (论文阅读31/100)Stacked hourglass networks for human pose estimation
  • (十一)JAVA springboot ssm b2b2c多用户商城系统源码:服务网关Zuul高级篇
  • (学习日记)2024.03.12:UCOSIII第十四节:时基列表
  • (一)eclipse Dynamic web project 工程目录以及文件路径问题
  • (一)kafka实战——kafka源码编译启动
  • (一)使用Mybatis实现在student数据库中插入一个学生信息
  • (原創) 如何讓IE7按第二次Ctrl + Tab時,回到原來的索引標籤? (Web) (IE) (OS) (Windows)...
  • (自用)learnOpenGL学习总结-高级OpenGL-抗锯齿
  • .NET Core 2.1路线图
  • .ui文件相关