接口自动化测试(六)

article/2025/8/20 14:48:05

一、pytest参数化

 pytest: @pytest.mark.parametrize(argnames,argvalues)
参数化DDT:把对应的数据去进行提取出来进行统一维护 ---- 多组数据@pytest.mark.parametrize(argnames,argvalues)
@pytest.mark.parametrize("参数名",参数数据)
参数数据格式:中间的数据项有多少个,他就会自己执行多少次[数据1,数据2,数据3](数据1,数据2,数据3)[[],[],[]][(),(),()][{},{},{}]  -----推荐用它
import pytest
data=["hami","xiaoming"]
@pytest.mark.parametrize("name",data)
def test_01(name):print("当前运行的用户名是:",name)if __name__ == '__main__':pytest.main(['-vs'])

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

二、Yaml是什么

Yaml 可以看成一个普通的文件,比如excel、csv、txt等,有格式要求Yaml格式:
基本语法:(1)大小写敏感(2)使用缩进表示层级关系(3)缩进不允许使用tab,只允许空格(4)缩进的空格数不重要,只要相同层级的元素左对齐即可(5)# 表示注释Python所有的数据类型,他都可以进行维护:数字、字符、字典、列表都可以进行维护Yaml的配置文件的后缀名 .yaml或者 .yml字典: key:[空格]value列表:-[空格]valuehttps://tool.p2hp.com/tool-format-yaml/

运行多个文件 (为代码中的最后一段代码)

Yaml测试用例命名的规范:1、获取以context开头的.yaml结尾的内容,并放入到一个公共参数中去----全局变量文件2、用例编号_xxxx.yaml则认为是对应的测试用例需求:写一个方法,加载当前文件夹下的所有符合条件的测试用例
# 专门用例Yaml参数化
# 导入yaml的包# 读取yaml的数据
import yaml
import os
from day08.apirun_1.core.globalContext import g_context
# 加载单个yaml文件 -----舍弃掉
def read_yaml(file_path):"""返回yaml的数据:param file_path: yaml的路径:return:"""# 调用一下全局变量方法写入方法load_context_from_yaml(r"D:\办公\python\ljh_api\day07\apirun_1\example")case_infos=[]with open(file_path,'r',encoding='utf-8') as f:# 加载所有的数据case_info=yaml.full_load(f)case_infos.append(case_info) #[{yaml里面的数据}]return case_infos# res=read_yaml(r"D:\办公\python\ljh_api\day07\apirun_1\example\1_登录成功测试用例.yaml")
# print(res)import os
# 加载content.yaml文件的数据
def load_context_from_yaml(folder_path):""":param folder_path: 文件路径:return:"""try:yaml_file_path=os.path.join(folder_path,"context.yaml") # 把2个文本进行拼接with open(yaml_file_path,"r",encoding="utf-8") as f:# 加载所有数据data=yaml.load(f,Loader=yaml.FullLoader)print(f"装载的yaml数据内容:",data)# 如果数据不为空,则设置到全局变量中if data:g_context().set_by_dict(data)except AttributeError as e:print(f"装载yaml文件错误:{str(e)}")return  False# 加载我们满足条件的文件及数据
def load_yaml_files(config_path):"""返回满足条件的yaml文件列表及数据:param config_path: Yaml存放的路径:return:"""yaml_caseInfos=[] # 存储所有的数据suite_folder = os.path.join(config_path)# 存放在该路径的全局变量进行写入load_context_from_yaml(suite_folder)# 满足条件的列表 .yaml and 数字开头_file_names=[(int(f.split("_")[0]),f) for f in os.listdir(suite_folder) if f.endswith(".yaml") and f.split("_")[0].isdigit()]# 排序:只保留文件名即可file_names.sort()file_names=[f[-1] for f in file_names]print()# 加载每个文件的数据给到yaml_caseInfosfor file_name in file_names:file_path=os.path.join(suite_folder,file_name)with open(file_path,'r',encoding='utf-8') as f:# 加载所有的数据case_info=yaml.full_load(f)yaml_caseInfos.append(case_info) #[{yaml里面的数据}]return yaml_caseInfosdata=load_yaml_files(r"D:\办公\python\ljh_api\day08\apirun_1\example")
print(data)

在这里插入图片描述

考虑核心执行器,不仅可以执行Yaml 我们还需要执行Excel
所以我们需要一个规范进行统一的处理要求:
return{"case_infos":case_infos, #所有的测试用例"case_names":case_names #所有测试用例对应的标题
}

http://www.hkcw.cn/article/XVaVACLgoV.shtml

相关文章

LangChain【1】之认识框架和简单体验

文章目录 参考文章LangChain框架概述LangChain分层结构LangChain环境配置简单案例体验方式1:Api key单独文件配置方法2:直接设置Api KeyLangSmith的添加和使用 参考文章 通过类比, 十分钟快速掌握LangChain的架构LangChain入门教程,基本案例…

ESP8266-12S配置信息保存到文件SPIFFS示例

一、前言 利用SPIFFS保存参数(加载,读取,修改) vscodePlatformIO 二、代码片段 头文件引用 定义结构体 读取、保存、修改配置文件 初始化setup(),利用配置文件中的账号密码连接WIFI 循环体loop(),读取串口…

90后作家刘楚昕获奖后追忆病故女友 未竟的承诺

近日,90后作家刘楚昕的小说《泥潭》荣获第二届漓江文学奖虚构类奖。颁奖现场上,作家余华公布了这个好消息。而获奖者刘楚昕的感言因格外催泪动人在朋友圈里刷了屏。2017年,刘楚昕在武汉大学读博期间遇到了他的初恋女友。当时,他正朝着自己的文学梦马不停蹄地赶路。“每次我…

WPS 免登录解锁编辑

遇到 WPS 需要登录才能启用编辑功能? 如何免登录使用编辑功能? 方法一 解锁方法 1、关闭 WPS; 2、桌面右键→ “新建”→“文本文档”,粘贴以下内容(见最下面);编码保持默认(ANSI …

破局传统采购!采购文件编制审核系统为烟草行业数智化加速

在烟草行业错综复杂的商业生态系统中,采购环节扮演着至关重要的战略枢纽角色。它如同驱动精密机械运转的核心齿轮,其每一次高效的“啮合”都深刻影响着整条价值链的协同运作。卓越的采购效能不仅是提升企业整体运营效率的基石,更是实现精细化…

65常用控件_QListWidget的使用

目录 代码示例:使用ListWidget List Widget 使⽤ QListWidget 能够显⽰⼀个纵向的列表. 形如: 每个选项都可以被选中. 列表中的每个元素/每一项就称为是一个Item 更具体的说,通过QListWidgetItem类表示的~~ 核⼼属性 属性说明currentRow当前被选中的是第几行cou…

c++数据结构8——二叉树的性质

一、二叉树的基本性质 示图1: 性质1:层节点数上限 在一棵二叉树中,第i层至多有2^{i-1}个节点(首层是第1层) 这个性质可以通过数学归纳法证明: 第1层:2^{1-1}2^01个节点(根节点&am…

搭建frp内网穿透

前言 内网穿透的原理我就不多说了哈,既然会看到我这篇文章,想必都知道内网穿透是做什么的吧 frp分为服务端和客户端,服务端一般是搭在公网服务器中,客户端一般搭在本地或者局域网,需要提前在服务端搭好ftp server&am…

阿里云服务器ECS详细购买流程【新手购买手册】

1、打开云服务器ECS官方页面 打开阿里云服务器ECS页面 点击进入阿里云服务器 2、付费类型选择 阿里云服务器付费类型 3、地域节点 阿里云服务器全球28个地域,中国大陆地域如华北2(北京)、华东1(杭州)、华南1&#x…

广东虎门通报小车坠桥5人死亡 事故引发广泛关注

广东虎门通报小车坠桥5人死亡 事故引发广泛关注。近日,广东东莞环莞快速路虎门段发生了一起交通事故,引起了广泛关注。5月29日晚,虎门镇“519”事故工作专班发布了情况通报。广东虎门通报小车坠桥5人死亡 事故引发广泛关注。责任编辑:0882

SpringBoot:统一功能处理、拦截器、适配器模式

文章目录 拦截器什么是拦截器?为什么要使用拦截器?拦截器的使用拦截路径执行流程典型应用场景DispatcherServlet源码分析 适配器模式适配器模式定义适配器模式角色适配器模式的实现适配器模式应用场景 统⼀数据返回格式优点 统一处理异常总结 拦截器 什…

Spring Boot 3.5.0中文文档上线

Spring Boot 3.5.0 中文文档翻译完成,需要的可收藏 传送门:Spring Boot 3.5.0 中文文档

67常用控件_QTreeWidget的使用

目录 代码⽰例: 使⽤ QTreeWidget 使⽤ QTreeWidget 表⽰⼀个树形控件. ⾥⾯的每个元素, 都是⼀个 QTreeWidgetItem , 每个 QTreeWidgetItem 可以包含多个⽂本和图标, 每个⽂本/图标为⼀个 列. 可以给 QTreeWidget 设置顶层节点(顶层节点可以有多个), 然后再给顶层节点…

气象大模型如何影响端午节旅行?精准预报助力安全出行

端午节假期(5月31日至6月2日)即将到来,全国天气形势复杂多样,北方晴热多风,南方暴雨频繁,华南则面临高温闷热。在这一背景下,气象大模型(如中央气象台的“疾风模型”等)凭借其强大的数据分析和预测能力,为公众出行提供了更精准的天气参考,直接影响着旅行决策和安全保…

德约连续20年晋级法网32强 连胜纪录延续

北京时间5月30日,在2025年法国网球公开赛男单第二轮比赛中,6号种子德约科维奇以6-3、6-2、7-6(1)战胜本土选手穆泰,成功晋级32强。比赛持续了3小时5分钟,第三盘中德约科维奇一度因左脚不适申请医疗暂停,该盘耗时超过80分钟。这场胜利使德约科维奇在罗兰加洛斯的连胜纪录达…

马图伊迪希望大巴黎欧冠夺冠 加油巴黎!

巴黎圣日耳曼旧将马图伊迪在社交媒体上表达了对母队夺得欧冠冠军的期待。北京时间6月1日凌晨3点,巴黎圣日耳曼将与国际米兰争夺本赛季的欧冠冠军。马图伊迪表示,本周六巴黎圣日耳曼带着历史使命踏上赛场,相信整个法国都会支持球队,因为他们有机会成就一些特别的事情。他提到…

茅台铁粉基金经理转战泡泡玛特!

茅台铁粉基金经理转战泡泡玛特。随着在港交所挂牌的泡泡玛特凭借爆款IP上演“股价超十倍神话”,不少曾经重仓持有贵州茅台的“铁粉”基金经理,相继“转战”泡泡玛特。与此同时,众多基金经理开始迫切寻找能复制泡泡玛特神话的新消费标的。市场没有让人失望。近期,A股、港股市…

曝利雅得胜利欲引进迪亚斯 利物浦边锋成头号目标

利雅得胜利将利物浦边锋路易斯-迪亚斯视为今夏引援头号目标。利物浦方面已经了解到对方的兴趣,而迪亚斯本人则希望与红军续约。2022年1月,利物浦以3750万镑转会费从波尔图引进了迪亚斯,并与其签约六年。由于在2024-25赛季表现出色,迪亚斯吸引了多家俱乐部的关注。这位28岁的…

electron安装报错处理

electron安装报错 解决方法: 修改 C:\Users\用户名.npmrc下配置文件 添加代码 electron_mirrorhttps://cdn.npmmirror.com/binaries/electron/ electron_builder_binaries_mirrorhttps://npmmirror.com/mirrors/electron-builder-binaries/最后代码 registryhtt…

力扣刷题Day 63:组合总和(39)

1.题目描述 2.思路 Krahets佬一图胜千言: 按这张图来的话输出结果将是[[3, 3, 3], [4, 5], [5, 4]],而[4, 5]和[5, 4]实际是重复的,因此需要在搜索过程中剪枝,剪枝策略是:保证搜索过程中选择序列里的元素索引是递增的…