pytest参数化

一、@pytest.mark.parametrize介绍

@pytest.mark.parametrize(argnames, argvalues, indirect=False, ids=None)

参数说明:
argnames: 一个或多个参数名,用逗号分隔的字符串,如"arg1,arg2,arg3",参数名与用例入参数一致。
argvalues:参数值,必须是列表类型;如果有多个参数,则用元组存放值,一个元组存放一组参数值,元组放在列表中。
indirect:如果设置成True,则把传进来argnames的参数当函数执行,而不是一个参数
ids:用例的ID,传一个字符串列表,可以标识每一个测试用例,自定义测试数据结果的显示,为了增加可读性,ids的长度需要与测试数据列表的长度一致。
在这里插入图片描述

@pytest.mark.parametrize("para1",[1,2,3,4,5])
@pytest.mark.parametrize("para1,para2,para3",[(a,b,c),(1,2,3)])
@pytest.mark.parametrize("para1,para2,para3",get_list())

二、登录接口使用@pytest.mark.parametrize

1、将接口测试数据写道yaml文件中

以下为登录接口的三组数据

-feature: 用户管理story: 登录接口title: USER-登录-错误密码request:method: posturl: http://IP:81/api/loginheaders: ""data:username: admin@qq.compassword: 123456validate: 用户名或密码错误-feature: 用户管理story: 登录接口title: USER-登录-用户名错误request:method: posturl: http://114.55.135.15:81/api/loginheaders: ""data:username: adminpassword: passwordvalidate: 用户名不存在!-feature: 用户管理story: 登录接口title: USER-登录-成功request:method: posturl: http://114.55.135.15:81/api/loginheaders: ""data:username: admin@qq.compassword: pass123validate: 操作成功

2、编写读取测试用例yaml的工具类

以列表形式,返回3条数据[data1,data2,data3]

import yamldef read_yaml(path):with open(path,encoding="utf-8",mode='r') as f:value = yaml.load(f,yaml.FullLoader)return valueif __name__ == "__main__":print(read_yaml("./login_01.yaml"))

3、封装请求工具

使用RequestUtil类,作为所有请求发送的入口,可以在此类中,进入异常处理、日志监控、请求信息处理等。
类变量session,所有的请求都使用该session,可解决后续的Cookie关联问题

import requestsclass RequestUtil():session = requests.session()def  send_request(self,method,url,**kwargs):res = RequestUtil.session.request(method,url,**kwargs)print(res.json())return res

4、测试用例类

@pytest.mark.parametrize(‘casedata’,YamlReadUtil.read_yaml(“./testcases/login_01.yaml”))
从login_01.yaml文件中读到3条测试用例,循环将3组用例数据传递给casedata。

from TestPytest.testcases import YamlReadUtil
from TestPytest.testcases.RequestUtil import RequestUtilclass TestRequests():@pytest.mark.parametrize('casedata',YamlReadUtil.read_yaml("./testcases/login_01.yaml"))def test_01_login(self,casedata):method=casedata["request"]["method"]url = casedata["request"]["url"]data = casedata["request"]["data"]res = RequestUtil().send_request(method=method,url=url,data=data)result = jsonpath.jsonpath(res.json(),"$.message")[0]print(result)# assert casedata["validate"] == result

执行结果
在这里插入图片描述

三、将用例写在yaml文件的优点与问题

优点:

用例编写只用写yaml文件,不需要再编写代码

缺点:

(1)接口关联处理,如编写文章接口入参需要上一个接口返回的access_token,在yaml文件中不好提取对应值。
(2)接口需要上传文件数据,yaml文件中不能执行open函数,无法写对应的文件数据。

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

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

相关文章

单元测试——题目十三

目录 题目要求: 定义类 测试类 题目要求: 根据输入的三条边值判断能组成何种三角形。三条边为变量a、b、c,范围为1≤边值≤10,不在范围内,提示“输入边值不在范围内”。不满足任意两边之和必须大于第三边,提示“输入边值不能组成三角形”。输入边值能组成三角形,只有…

Android读写文件,适配Q以上

Android Q升级了文件系统,访问文件不仅仅是说动态权限了,有各种限制。权限什么的就不赘述了,下面介绍一下在10以上的系统中访问文件。 首先是打开文件管理器 /*** 打开文件管理器 存储卡和外接U盘都可以访问*/public void openFileManager()…

什么是JSON

什么是JSON JSON:JavaScript Object Notation 【JavaScript 对象表示法】 JSON 是存储和交换文本信息的语法。类似 XML。 JSON采用完全独立于任何程序语言的文本格式,使JSON成为理想的数据交换语言S 为什么需要JSON 提到JSON,我们就应该和…

代码块(Java)

代码块是类的成分之一,分为静态代码块和实例代码块 1.静态代码块:static{} 类加载时会自动执行一次,可以完成类的初始化,比如初始化赋值 2.实例代码块:{} 每次创建对象时,执行实例代码块,会…

探索圆的面积计算器:神秘数学背后的无限魅力

导语:自古以来,圆形在人类文明中扮演着重要角色。从建筑、工程设计到日常生活,圆的面积都是一个不可或缺的元素。本文将带您深入了解圆的面积,从起源、应用场景到计算方法,让您领略数学的无穷魅力。 一、圆的面积是什…

java金额数字转中文

java金额数字转中文 运行结果: 会进行金额的四舍五入。 工具类源代码: /*** 金额数字转为中文*/ public class NumberToCN {/*** 汉语中数字大写*/private static final String[] CN_UPPER_NUMBER {"零", "壹", "贰",…

CMake构建Qt工程

在https://blog.csdn.net/fengbingchun/category_12172633.html 上有直接通过vs2022建的Console、Widgets、Quick三个工程,这里增加通过CMake构建。 build.sh内容如下: #! /bin/bashif [ $# ! 1 ]; thenecho "Error: requires one parameter: Rele…

基于springboot网上书城交易平台源码和论文

在Internet高速发展的今天,我们生活的各个领域都涉及到计算机的应用,其中包括网上书城管理系统的网络应用,在国外网上书城管理系统已经是很普遍的方式,不过国内的书城管理系统可能还处于起步阶段。网上书城管理系统具有网上书城信…

Spring扩展点在微服务应用(待完善)

ApplicationListener扩展 nacos注册服务, 监听容器发布事件 # 容器发布事件 AbstractAutoServiceRegistration#onApplicationEvent # 接收事件吗,注册服务到nacos NacosServiceRegistry#register Lifecycle扩展 #订阅服务实例更改的事件 NamingService#…

MySQL数据库的一些缩写含义

DDL Data Definition Language,数据定义语言,用来定义数据库对象(数据库,表,字段) DML DML英文全称是Data Manipulation Language(数据操作语言),用来对数据库中表的数据记录进 行增、删、改操作。 添加数据&#x…

【开源】基于JAVA的学生综合素质评价系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 学生功能2.2 教师功能2.3 教务处功能 三、系统展示四、核心代码4.1 查询我的学科竞赛4.2 保存单个问卷4.3 根据类型查询学生问卷4.4 填写语数外评价4.5 填写品德自评问卷分 五、免责说明 一、摘要 1.1 项目介绍 基于J…

24校招,经纬恒润测试工程师PPT技术二面

前言 大家好,我是chowley,今天回顾一下之前参加的PPT工程师面试(doge) 面试官针对我的PPT进行提问,梦回大学课堂 时间:40min 平台:腾讯会议 过程 20minPPT展示PPT做了多长时间&#xff1f…

【数据结构】栈、队列、数组、列表

数据结构是什么? 数据结构是计算机存储、组织数据的方式 是指数据相互之间是以什么方式排列在一起的。 数据结构是为了更加方便的管理和使用数据,需要结合具体的业务场景来进行选择。一般情况下,精心选择的数据结构可以带来更高的运行或者…

MongoDB日期存储与查询、@Query、嵌套字段查询实战总结

缘由 MongoDB数据库如下: 如上截图,使用MongoDB客户端工具DataGrip,在filter过滤框输入{ profiles.alias: 逆天子, profiles.channel: },即可实现昵称和渠道多个嵌套字段过滤查询。 现有业务需求:用Java代码来查询…

LeetCode.2861. 最大合金数

题目 题目链接 分析 这道题目一定要多读几遍,才能理解。 大意就是你有钱budget 和 库存stock的金属零件,让你从一堆机器里面选择一种机器可以合成最多金属的数量是多少,这些机器合成金属需要的零件数目是不一样的,composition…

美易平台:金融市场的晴雨表与创新服务的融合

在金融市场中,利率的微妙变动往往预示着经济活动的脉动,而美国纽约联储发布的最新数据显示,上个交易日(1月25日)担保隔夜融资利率(SOFR)小幅上升至5.32%,而同期有效的联邦基金利率保…

程序员必备!10款实用便捷的Git可视化管理工具

前言 俗话说得好“工欲善其事,必先利其器”,合理的选择和使用可视化的管理工具可以降低技术入门和使用的门槛。我们在团队开发中统一某个开发工具的使用能够大大降低沟通成本,提高协作沟通效率。今天给大家分享10款实用便捷的Git可视化管理工…

数与抽象之抽象方法

抽象方法 几年前,《泰晤士报文学增刊》的一篇评论在开篇写道: 已知000以及1x11,就可以得到:平方等于自身的数是存在的。但是再进一步,我们就可以得到:数是存在的。经过这简简单单朴实无华的一步&#xff0…

STM32完全学习手册

1. 了解STM32微控制器 了解STM32系列: 了解STM32系列微控制器的不同型号和系列,以及它们的特点和应用领域。 学习基础理论知识: 学习嵌入式系统和微控制器(ARM)的基础知识,包括处理器架构、外设、时钟和中断等。 2.…

前端组件封装

组件封装是前端开发中常用的技术手段,它的目的是为了实现代码的重用、提高开发效率和代码质量。在组件封装过程中,需要注意以下几个方面: 分析布局:首先需要对布局进行分析,确定组件的结构和样式。了解组件在不同场景…