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

接口自动化测试(六)

一、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.xdnf.cn/news/709723.html

相关文章:

  • Kotlin委托机制使用方式和原理
  • ABP 框架集成 EasyAbp.Abp.GraphQL 构建高性能 GraphQL API
  • macOS 安装 Grafana + Prometheus + Node Exporter
  • React从基础入门到高级实战:React 生态与工具 - React 单元测试
  • 嵌入式软件--stm32 DAY 8.5 基础复习总结
  • Vue-列表过滤排序
  • 手机设备多?怎样设置IP保证不关联
  • [Redis] Redis:高性能内存数据库与分布式架构设计
  • 深入理解 Pinia:Vue 状态管理的革新与实践
  • 【MySQL】C语言连接
  • 十、【核心功能篇】项目与模块管理:前端页面开发与后端 API 联调实战
  • MySQL进阶篇(存储引擎、索引、视图、SQL性能优化、存储过程、触发器、锁)
  • 敏捷开发中如何避免迭代失控
  • 大数据学习(124)-spark数据倾斜
  • YOLOX 的动态标签分类(如 SimOTA)与 Anchor-free 机制解析2025.5.29
  • C++中IO文件输入输出知识详解和注意事项
  • Spring:从青铜到王者,你的Java修炼手册
  • MySQL入门笔记
  • AI新手入门解锁元生代MaaS平台:API工作流调用全攻略
  • 行业沙龙 | 博睿数据联合承办2025 湾区金科(FinTech)沙龙——智能运维专场,分享主题演讲
  • 基于Web的分布式图集管理系统架构设计与实践
  • grid网格布局
  • day40 python图像数据与显存
  • 嵌入式鸿蒙系统中水平和垂直以及图片调用方法
  • 纯数据挖掘也能发Microbiome?
  • pikachu靶场通关笔记07 XSS关卡03-存储型XSS
  • DeepSeek 赋能卫星遥感:AI 驱动数据分析新范式
  • ubuntu 22.04安装k8s高可用集群
  • 使用 Azure DevOps 管道部署到本地服务器
  • Java 中的 final关键字详解