从0开始python学习-46.pytest框架之通过yaml处理接口关联问题-针对变量处理

目录

1. 提取变量

1.1 提取方法

1.2 提取地方:响应的body,响应的cookie,响应头

1.3 提取方式:

1.4 示例:在能获取到对应token的yaml用例中写入

2.使用变量:封装一个通用extract_util.py

3. 调用测试用例,使用变量


1. 提取变量

1.1 提取方法

extract: 保存值的变量名: [提取地方,提取方式,提取之后的下标取值]

1.2 提取地方:响应的body,响应的cookie,响应头

print(res.text)            # 返回字符串类型的数据
print(res.content)         # 返回二进制类型的数据
res.json()                 # 把json字符串转化为字典格式返回
print(res.status_code)     # 状态码
print(res.reason)          # 状态信息
print(res.cookies)         # cookie信息
print(res.encoding)        # 编码格式
print(res.headers)         # 响应头
print(res.elapsed)         # 耗时
print(res.request.method)  # 请求方式
print(res.request.url)     # 请求路径
print(res.request.headers) # 请求头
print(res.request.body)    # 请求数据

1.3 提取方式:

正则表达式:re.findall(pattern, string)

jsonpath:jsonpath.jsonpath(obj, expr)

1.4 示例:在能获取到对应token的yaml用例中写入

extract: access_token: [json,"$.access_token",0]csrf_token: [text,'name="csrf_token" value="(.*?)"',0]

2.使用变量:封装一个通用extract_util.py

class ExtractUtil:# 解析提取变量def extract(self,res,var_name,attr_name,expr:str,index):# 通过深拷贝,将数据拷贝一份出来,且不影响源数据new_res = copy.deepcopy(res)# 将json()修改为json属性,用于反射使用,如果无法获取到new_res.json()抛出异常try:new_res.json = new_res.json()except Exception:new_res.json = {"msg":'response not json data'}# 通过反射获取属性的值data = getattr(new_res,attr_name)# 判断使用的是什么提取方式if expr.startswith('$'):# json提取方式list = jsonpath.jsonpath(dict(data),expr)else:# 正则提取方式list = re.findall(expr,data)# 通过下标进行取值,并写入extract.yaml文件中if list: # 当list不为空,即提取到了数据writer_yaml({var_name:list[index]})# 解析使用变量,把${access_token}替换从extract.yaml里面提取的具体的值def use_extract_value(self,request_data: dict):# 1.把字典转为字符串,因为使用替换的方法Template()里面的只能是stringdata_str = yaml.safe_dump(request_data)# 2.字符串替换,将extract.yaml中的所有获取到的数据,替换到需要使用${access_token}的yaml文件new_request_data = Template(data_str).safe_substitute(read_all())# 3.把字符串还原成字典,因为最后接收的还是dict,所以需要还原回去data_dict = yaml.safe_load(new_request_data)return data_dict

3. 调用测试用例,使用变量

1. extract()方法为通过接口的响应提取需要的变量,如token,所以是在请求之后执行

2. use_extract_value()方法为使用提取到的变量进行入参使用,所以是在请求之前执行

3. 一定要注意用例的执行顺序,不然这里可能就无法正确提取使用

def create_testcase(yaml_path):@pytest.mark.parametrize('caseinfo', read_testcase(yaml_path))def func(self,caseinfo):# 读取yaml文件中的请求四要素new_caseinfo = verify_yaml(caseinfo)# 使用提取的值new_request = eu.use_extract_value(new_caseinfo.request)# 发送请求res = RequestUtil().send_request(**new_request)# 在请求之后得到的响应去提取需要的变量if new_caseinfo.extract: # extract存在的情况,则将值获取for key,value in new_caseinfo.extract.items():eu.extract(res,key,*value)return func

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

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

相关文章

卸载流氓软件联软

这个流氓软件也是在更新的,下面是本人在联想邵阳笔记本下卸载流程,非常简单 注:按照本文卸载之后,我重新装了一次这个垃圾,但是发现重装完之后,系统启动之后就会进入黑屏,也就是说,…

【数据库基础】Mysql与Redis的区别

看到一篇不错的关于“Mysql与Redis的区别”的文章,转过来记录下~ 文章目录 一、数据库类型二、运行机制三、什么是缓存数据库呢?四、优缺点比较五、区别总结六、数据可以全部直接用Redis储存吗?参考资料 一、数据库类型 Redis:NOS…

Win10安装配置Redis,修改密码

一、下载Redis tporadowski 提供了 支持 Windows平台的 Redis 安装包,目前仍在维护,目前最新版本是 5.0.14,更新速度跟Redis官网也相差好几个大版本。 下载地址:https://github.com/tporadowski/redis/releases 二、Redis 安装 …

哈希-力扣202快乐数

题目 编写一个算法来判断一个数 n 是不是快乐数。 「快乐数」 定义为: 对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。如果这个过程 结果为 1&…

Spring AOP(详解)

目录 1.AOP概述 2.AOP相关术语 3.Spring AOP的原理机制 3.1JDK动态代理 3.2 CGLIB动态代理 3.3简单代码展示 3.3.1JDK动态代理 3.3.2CGLIB动态代理 4.Spring的AOP配置 4.1pom.xml 4.2增强方法 4.3切点 4.4切面 5.基于注解的AOP配置 5.1.创建工程 5.2.增强 5.3AOP…

Windows 环境多个JDK安装与切换

一、下载jdk 去Oracle官网上下载想要安装的jdk版本,https://www.oracle.com/java/technologies/downloads/。 二、安装jdk 双击.exe文件,选择好安装目录进行安装。多个版本的jdk重复这两步操作就好。 三、多版本的jdk都下载安装完成之后&#xff0…

串口基本知识

概述: RS232适用于短距离通信,RS485适用于长距离的多点通信,而RS422适用于中长距离的高速通信。选择适合的串口标准应根据具体应用场景的需求来进行。 RS232的优缺点 RS-232采取不平衡传输方式,即所谓单端通讯。RS-232是为点对…

docker部署firefox浏览器,实现远程访问

拉取firefox镜像,部署代码 docker run -d --name firefox -e TZAsia/Hong_Kong -e DISPLAY_WIDTH1920 -e DISPLAY_HEIGHT1080 -e KEEP_APP_RUNNING1 -e ENABLE_CJK_FONT1 -e VNC_PASSWORD12345678ABCabc -p 5800:5800 -p 5900:5900 -v /docker/firefox/config:/…

构建免费的Dokan和WooCommerce构建线上课程市场在线销售数字课程

我们知道创建良好的学习说明和材料很困难。但当涉及到销售时,就变得更加困难。如果您无法出售您的课程,那么没有什么比这更令人沮丧的了。 幸运的是,如果您使用的是 WordPress 网站,那么您可以非常轻松且免费地完成此操作。借助L…

Wargames与bash知识12

Wargames与bash知识12 Bandit20 关卡提示: 主目录中有一个setuid二进制文件,它执行以下操作:它在您指定为命令行参数的端口上连接到localhost。然后,它从连接中读取一行文本,并将其与前一级别的密码(band…

Ansys Zemax | 如何使用 ZPL 创建用户自定义求解

附件下载 联系工作人员获取附件 本文使用两个示例演示了如何使用 ZPL 创建用户自定义解。第一个示例介绍了如何创建 ZPL 解以确保序列文件中像面的曲率半径等于系统的 Petzval 曲率。第二个示例介绍了如何在非序列元件编辑器 ( Non-Sequential Component Editor ) 中基于其他…

含中间直流的三相电力电子变压器PET仿真模型

微❤关注“电气仔推送”获得资料(专享优惠) 背景: 目前高压电网中应用的绝大多数电力变压器都属于传 统电力变压器,传统变压器的优势在于工艺简单、安全性 较强。但传统变压器本身的弊端也非常突出,占地大、重 量大&…

从虚拟到现实:数字孪生驱动智慧城市可持续发展

随着科技的飞速发展,智慧城市已经成为未来城市发展的重要趋势。数字孪生技术作为智慧城市建设中的关键技术之一,正在发挥着越来越重要的作用。本文将探讨数字孪生如何从虚拟走向现实,驱动智慧城市的可持续发展。 一、数字孪生技术&#xff1…

【Vue3】2-6 : 计算属性与侦听器区别与原理(一)

本书目录:点击进入 一、计算属性 - computed:{} 1.1 目的 1.2 写法 代码 二、特征 2.1 调用时当属性调用 2.2 缓存 2.3 默认只读 2.4 可赋值:需要定义成对象,并写get,set方法 (类似于java) 三、原…

tryhackme--Command Injection(命令注入)

查看应用程序在哪个用户下运行。 任务1 简介(什么是命令注入?) 命令注入是滥用应用程序的行为,使用与设备上运行的应用程序相同的权限在操作系统上执行命令。例如,在以名为joe的用户身份运行的 Web 服务器上实现命令…

4.2 MATRIX MULTIPLICATION

矩阵-矩阵乘法,或简称矩阵乘法,在 i X j(i 行 by j 列)矩阵 M 和 j x k 矩阵 N 之间产生 i X k 矩阵P。矩阵乘法是基本线性代数子程序(BLAS)标准的重要组成部分(见第3章中的“线性代数函数”边栏…

gazebo安装版本--公元2024年1月

不好意思我误导了各位,顺便也误导了我自己。。。。。。。。。 harmonic版本只适合单独使用,不适合与ros2配合仿真。 到2024年1月,只有fortress版本能与ros2配合使用

如何将 element-ui 中的 el-select 默认展开

<el-form-item label"藕粉桂花糖糕" prop"state" required><el-selectref"mySelect"v-model"form.state"style"width: 280px"placeholder"请选择"><el-option label"藕粉" :value"…

Bito智能辅助编程体验报告

Bito智能辅助编程体验报告 1 Bito 能够为我们做些什么事&#xff1f; 号称 IDE 的“瑞士军刀”&#xff0c;可以提升开发 10 倍的效率; 生成代码&#xff1a;要求 Bito 使用自然语言提示生成任何语言的代码。&#xff08;例如&#xff0c;编写一个 Java 函数将数字从一种基数转…

【tensorflowflutter】自己写个机器学习模型用在项目上?

背景 拍摄APP项目上线有一阵了&#xff0c;每天的拍摄数据呈现波动上升状态、业务方需要对数据进行加工&#xff0c;如果能有对未来的数据量的预测就好了 。 目标 在端侧展示拍摄数据可视化趋势图等、并能推断数据&#xff08;选择预测日期&#xff09; 简单实现个demo gif背…