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,一经查实,立即删除!

相关文章

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#…

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

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

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

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

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

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

LeetCode.2861. 最大合金数

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

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

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

(免费领源码)java#SSM#mysql疫情时期人员流调平台69124-计算机毕业设计项目选题推荐

目 录 摘要 1 绪论 1.1研究意义 1.2开发现状 1.3系统开发技术的特色 1.4 ssm框架介绍 1.5论文结构与章节安排 2 疫情时期人员流调平台系统分析 2.1 可行性分析 2.2 系统流程分析 2.2.1数据增加流程 2.2.2数据修改流程 2.2.3数据删除流程 2.3 系统功能分析 2.3.1…

VisionMaster图像拼接功能实现

由于硬件或安装环境限制,单个相机视野无法覆盖整个视野,但实际应用需要全视野图像时,可以拍摄物体的多个部分拼接成一张整图。VM提供图像拼接工具对图像进行拼接。 使用标定图进行标定建模是最重要的一步,成功标定后可以将图像无…

python222网站实战(SpringBoot+SpringSecurity+MybatisPlus+thymeleaf+layui)-帖子管理实现

锋哥原创的SpringbootLayui python222网站实战: python222网站实战课程视频教程(SpringBootPython爬虫实战) ( 火爆连载更新中... )_哔哩哔哩_bilibilipython222网站实战课程视频教程(SpringBootPython爬虫实战) ( 火…

【c++】高精度算法(洛谷刷题2024)扫雷游戏详解

系列文章目录 第二题:扫雷游戏 视频讲解:http://【洛谷题单 - 算法 - 高精度】https://www.bilibili.com/video/BV1Ym4y1s7BD?vd_source66a11ab493493f42b08b31246a932bbb 文章目录 目录 系列文章目录 文章目录 前言 一、题目分析以及思考 二、代…

多维时序 | Matlab实现CNN-BiGRU-Mutilhead-Attention卷积双向门控循环单元融合多头注意力机制多变量时间序列预测

多维时序 | Matlab实现CNN-BiGRU-Mutilhead-Attention卷积双向门控循环单元融合多头注意力机制多变量时间序列预测 目录 多维时序 | Matlab实现CNN-BiGRU-Mutilhead-Attention卷积双向门控循环单元融合多头注意力机制多变量时间序列预测效果一览基本介绍程序设计参考资料 效果一…

qemu的安装

1、简介 QEMU(Quick EMUlator)是一个开源的处理器模拟器,它可以在一种硬件平台上模拟另一种硬件平台,从而运行各种不同的操作系统。QEMU通过动态二进制翻译来实现高性能的模拟,这使得它可以在接近原生性能的速度下运行…

21.云原生之ArgoCD CICD实战(部分待补充)

云原生专栏大纲 文章目录 部署项目介绍项目结构介绍GitLab CI/CDGitLab CI/CD主要特点和功能 部署测试argocd的cd过程CICD工作流准备工作github中工作流文件创建gitlab中工作流文件创建【实操待补充】GitLab CI示例 数据加密之seale sealedBitnami Sealed Secrets介绍Bitnami …