上海宝山手机网站制作/百度普通下载
在设计自动化测试框架的时候,我们会经常将测试数据保存在外部的文件(如Excel、YAML、CSV),或者数据库中,实现脚本与数据解耦,方便后期维护。目前非常多的自动化测试框架采用通过Excel或者YAML文件直接编写测试用例,通过脚本读取出来驱动自动化测试代码执行。至于采用Excel还是YAML格式各位小伙伴都有不同见解,比如用Excel维护直观、修改数据方便,劣势是通过Git这样的版本控制工具不太好比较历史版本差异(因为是二进制格式);YAML的优势是支持数据格式完备、版本控制管理方便(文本格式),劣势是没有Excel这么直观。Excel这种方式大家比较熟悉了,本文带着大家来了解如何基于YAML设计自动化测试框架。
YAML格式测试用例设计
以接口自动化为例,用YAML编写测试用例要实现的基本功能需求:
- 一个YAML文件能够支持多个用例存储需求,不然几千个用例对应几千个YAML文件管理起来也受不了
- 用例中能够支持单接口测试用例也能支持业务场景用例(多个接口调用组合)
- 用例中需要包含所属模块、用例名、请求信息、断言信息、提取响应(实现接口关联)等信息
基于上述需求我们来设计一版YAML格式用例:
- casename: 登录成功module: 用户模块teststeps:- name: 正确用户名、密码进行登录request:method: POSTurl: /loginheaders:Content-Type: application/jsonjson:username: lemon_autopassword: lemon123456appType: 3loginType: 0extract:token: access_tokenvalidate:- eq: ["status_code", 200]- eq: ["nickName", "lemon_auto"]
casename与module字段简单,我们来看下teststeps,为什么teststeps是数组类型?
因为用例中包含一个/多个接口请求步骤,也就是一个TestCase包含了多个teststep,每一个teststep就是一个接口请求。
request中指定接口请求信息,包括接口请求方法、请求地址、请求头、请求参数;其中不同的请求参数类型我们需要进行区别,上述的是json传参,如果是form表单、查询参数传参我们都可以约定为类似的key-value结构,只需要将json改为formparam、queryparam。
需要注意的是文件上传接口的参数会比较特殊,一般来说我们只需要设置要上传文件路径即可,所以我们可以这样设计:
- casename: 上传图片module: 用户模块teststeps:- name: 正常上传图片request:method: POSTurl: /p/file/uploadheaders:Content-Type: multipart/form-datafile: src/test/resources/upload.pngextract:resourcesUrl: resourcesUrlfilePath: filePathvalidate:- eq: [ "status_code", 200 ]
extract字段为要提取的响应数据字段,传递给后续的接口使用。一般我们要求能够支持JsonPath表达式或者正则表达式来提取,对应的key为要提取的字段名,对应的值为要提取的字段表达式。
validate字段是断言信息,也就是验证响应结果是否符合预期。这里我们需要支持常用的判断方法包括:等于、大于、小于、大于等于、小于等于,通过简写eq代替equals(等于)判断,其他的类似:大于等于(ge)、小于等于(le)、小于(lt)、大于(gt)。
上述的是单接口测试用例,我们看下多接口串联(业务场景)用例编写的样式:
ModifyUserProfile.yaml
- casename: 修改用户头像module: 用户模块teststeps:- name: 登录成功request:method: POSTurl: /loginjson:username: lemon_autopassword: lemon123456appType: 3loginType: 0headers:Content-Type: application/jsonextract:token: access_tokenvalidate:- eq: ["status_code", 200]- eq: ["nickName", "lemon_auto"]- name: 进入到个人中心request:method: GETurl: /p/user/userInfoheaders:Authorization: ${token}validate:- eq: ["status_code", 200]- name: 上传头像request:method: POSTurl: /p/file/uploadheaders:Authorization: ${token}Content-Type: multipart/form-datafile: src/test/resources/upload.pngextract:resourcesUrl: resourcesUrlfilePath: filePathvalidate:- eq: ["status_code", 200]
在多接口测试中重要的是要能够支持参数传递,这里我们在前一个接口使用extract提取接口的响应字段,在后续要使用的接口中通过${token}方式进行引用,熟悉Jmeter接口测试工具的同学应该非常熟悉这种格式。
脚本读取YAML数据
在读取YAML文件数据之前,我们首先需要了解两个概念:序列化与反序列化
- 把对象转换为字节序列的过程称为对象的序列化;
- 把字节序列恢复为对象的过程称为对象的反序列化。
而我们读取YAML的过程就可以称之为反序列化。
主流的编程语言都能实现对YAML的解析,接下来以Java语言为例讲解如何读取YAML文件的内容:
Java中能够实现YAML序列化和反序列化的库有很多,包括SnakeYaml、Jackson、jYaml等,使用起来大同小异。以使用Jackson为例:
步骤一:Maven POM文件中添加库的坐标
<dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.10.2</version>
</dependency><dependency><groupId>com.fasterxml.jackson.dataformat</groupId><artifactId>jackson-dataformat-yaml</artifactId><version>2.10.2</version>
</dependency>
<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.12</version><scope>provided</scope>
</dependency>
这里用到了jackson-databind与jackson-dataformat-yaml,其中jackson-databind是Jackson的主库,jackson-dataformat-yaml是支持YAML数据格式的库,在这里同时引入了lombok,是为了后面编写实体类时简化一些代码的书写:
Lombok可以来帮助我们简化一些必须有但显得很臃肿(比如get/set方法)的Java代码的工具,通过使用对应的注解,可以在编译源码的时候自动生成对应的方法。
步骤二:编写YAML实体类
对照YAML文件内容比如字段名(比如 “姓名”)和字段的数据类型(比如字符串),创建一个对应的类,用来在 Java 中表示YAML文件的信息。目的是为了能够将YAML文件保存到Java对象中(反序列化)。
TestCase实体类:
@Data
@NoArgsConstructor
@AllArgsConstructor
public class TestCase {private String casename;private String module;private List<Teststep> teststeps;
}
Teststep实体类:
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Teststep {private String name;private Request request;private HashMap<String,String> extract;private List<Validate> validate;
}
Request实体类:
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Request {private String method;private String url;private HashMap<String,Object> json;private HashMap<String,Object> formparam;private HashMap<String,Object> queryparam;private String text;private String file;private HashMap<String,Object> headers;
}
Validate实体类:
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Validate {private List<Object> eq;private List<Object> gt;private List<Object> ge;private List<Object> lt;private List<Object> le;
}
通过Jackson读取YAML文件内容并保存到TestCase实体类对象中
public static List<TestCase> loadYaml(String path){ObjectMapper objectMapper = new ObjectMapper(new YAMLFactory());List<TestCase> cases = null;try {cases = objectMapper.readValue(new File(path), new TypeReference<List<TestCase>>() {});} catch (IOException e) {System.out.println(path+"格式非法,请检查配置");e.printStackTrace();}return cases;
}
其中new TypeReference<List<TestCase>>() {}是因为读取到的YAML文件中有多个TestCase用例,所以我们需要定义为List集合类型来接收。
来看看读取之后的效果:
后续即可通过返回的testCase发起接口请求(比如通过REST-assured)、进行接口断言、提取响应字段等操作。
相关文章:

基于 YAML 接口自动化测试框架设计
在设计自动化测试框架的时候,我们会经常将测试数据保存在外部的文件(如Excel、YAML、CSV),或者数据库中,实现脚本与数据解耦,方便后期维护。目前非常多的自动化测试框架采用通过Excel或者YAML文件直接编写测…...

团体程序设计天梯赛 L2-031 深入虎穴
L2-3深入虎穴 分数 25 名的王牌间谍 007 需要执行一次任务,获取敌方的机密情报。已知情报藏在一个地下迷宫里,迷宫只有一个入口,里面有很多条通路,每条路通向一扇门。每一扇门背后或者是一个房间,或者又有很多条路&a…...

基于Givens旋转完成QR分解进而求解实矩阵的逆矩阵
基于Givens旋转完成QR分解进而求解实矩阵的逆矩阵 目录 前言 一、Givens旋转简介 二、Givens旋转解释 三、Givens旋转进行QR分解 四、Givens旋转进行QR分解数值计算例子 五、求逆矩阵 六、MATLAB仿真 七、参考资料 总结 前言 在进行QR分解时,HouseHolder变换…...

学习使用xbox手柄控制小乌龟节点移动
使用xbox手柄控制小乌龟,首先要下载joy功能包,发布sensor_msgs话题也就是手柄和ros通信的话题。 下载的步骤就根据官方文档即可 joy/Tutorials/ConfiguringALinuxJoystick - ROS Wiki 这里我提供一下具体步骤 第一步 安装joy 首先安装对应系统版本的…...

OpenLayers6实战,OpenLayers绘制特殊图形,OpenLayers绘制四角形(菱形),OpenLayers绘制菱形
专栏目录: OpenLayers实战进阶专栏目录 前言 本章讲解如何使用OpenLayers6实现绘制特殊图形,以绘制四角形(菱形),OpenLayers绘制菱形的功能为例。 本章核心代码不依赖任何第三方插件,只依赖OpenLayers。 需要注意的是两个操作按钮需要引入ElementUI 二、依赖和使用 &q…...

虚拟机如何在原有磁盘上扩容
虚拟机未开启状态–菜单栏–虚拟机–快照–拍摄快照–拍摄快照– 菜单栏–虚拟机–快照–快照管理器–点击刚刚的快照1–删除–是– 文件–新建或者打开–硬盘(以本人Win 10.64.3GL为例)–虚拟机设置–硬件– 硬盘(SATA)–磁盘实…...

2024-03-27 作业
作业要求: 整理课上代码整理思维导图完成下面类 作业1: 完成了 作业2: 作业3: class myString {private:char *str; //记录c风格的字符串int size; //记录字符串的实际长度public://无参构造myString():si…...

C语言二叉树和堆(个人笔记)
二叉树和堆 二叉树1二叉树的概念和结构1.1特殊的二叉树1.2二叉树的性质(规定根节点的层数为1)1.3二叉树的存储结构 2.二叉树的顺序结构和实现2.1二叉树的顺序结构2.2堆的概念和结构2.3堆的实现2.4堆的应用2.4.1堆排序 2.5TOP-K问题 3.二叉树的遍历4.二叉…...

重学SpringBoot3-Profiles介绍
更多SpringBoot3内容请关注我的专栏:《SpringBoot3》 期待您的点赞👍收藏⭐评论✍ 重学SpringBoot3-Profiles介绍 Profiles简介如何在Spring Boot中使用Profiles定义Profiles激活ProfilesIDEA设置active profile使用Profile-specific配置文件 条件化Bean…...

Transformer 论文阅读笔记
文章目录 前言论文阅读研究现状工作内容模型架构训练过程实验结果模型代码 其他评价 前言 Transformer可以说是深度学习领域最重要的,里程碑式的工作之一,发表于2017年的NIPS。该模型开创了自MLP(多层感知机)、CNN(卷…...

Vue 3中ref和reactive的区别
🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…...

oracle19c adg搭建
一、环境搭建 主机IPora19192.168.232.111ora19std192.168.232.112 本文结合:https://blog.csdn.net/weixin_63131036/article/details/136635553 1.配置网络yum源 1.删除redhat7.0系统自带的yum软件包; rpm -qa|grep yum >oldyum.pkg 备份原信息 …...

关闭Elasticsearch built-in security features are not enabled
禁用Kibana安全提示(Elasticsearch built-in security features are not enabled) Kibana提示#! Elasticsearch built-in security features are not enabled. Without authentication, your cluster could be accessible to anyone. See https://www.e…...

MC0248 密码判断器(判断强弱密码)
原题链接<---- islower 小写字母判断 isupper 大写字母判断 isdigit 数字判断 题目: 小码哥在是一位密码领域的初学者,有一天他的老师给他了一串密码,要他判断这个密码是否是强密码,老师和他说强密码就是需要同时达到以下要求࿱…...

vue3+threejs新手从零开发卡牌游戏(十六):初始化对方手牌
添加对方手牌区时注意位置调整,以及手牌应该是背面朝上,加个rotateX翻转即可,其他代码和p1.vue代码一致,game/hand/p2.vue代码如下: <template><div></div> </template><script setup lan…...

网页无插件视频播放器,支持录像、截图、音视频播放,多路播放等,提供源码下载
前言 本播放器内部采用jessibuca插件接口,支持录像、截图、音视频播放等功能。播放器播放基于ws流,分屏操作支持1分屏、4分屏、6分屏、9分屏方式。 jessibuca工作原理是通过Emscripten将音视频解码库编译成Js(WebAssembly,简称was…...

Openstack创建和操作实例,实现与外部网络通信
一、熟悉OpenStack图形界面操作 1、了解Horizon项目 Horizon项目 各OpenStack服务的图形界面都是由Horizon提供的。Horizon提供基于Web的模块化用户界面。Horizon为云管理员提供一个整体的视图。Horizon为终端用户提供一个自主服务的门户。Horizon由云管理员进行管理与控制&a…...

dubbo 源码系列之-集群三板斧---负载均衡(二)
在上一课时我们了解了 LoadBalance 接口定义以及 AbstractLoadBalance 抽象类的内容,还详细介绍了 ConsistentHashLoadBalance 以及 RandomLoadBalance 这两个实现类的核心原理和大致实现。本课时我们将继续介绍 LoadBalance 的剩余三个实现。 LeastActiveLoadBala…...

【一周一篇小题解】洛谷P1035级数求和
还是很简单的…… 首先,输入k,再定义一个双精度浮点数s,不停的循环 for(i1;;i) 每次循环加上1.0/i s1.0/i; 如果大于k就停止循环,并输出,也可以输出后直接结束程序 写法一: if(s>k) { printf("%…...

2024-03-26 AIGC-大模型学习路线
摘要: 2024-03-26 AIGC-大模型学习路线 大模型学习路线 建议先从主流的Llama开始,然后选用中文的Qwen/Baichuan/ChatGLM,先快速上手体验prompt工程,然后再学习其架构,跑微调脚本 如果要深入学习,建议再按以下步骤&am…...

QGraphicsView的使用,view坐标,scene坐标,item坐标
Graphics View绘图构架 QGraphicsScene(场景):可以管理多个图形项QGraphicsItem(图形项):也就是图元,支持鼠标事件响应。QGraphicsView(视图):关联场景可以让…...

from_pretrained 做了啥
transformers的三个核心抽象类是Config, Tokenizer和Model,这些类根据模型种类的不同,派生出一系列的子类。构造这些派生类的对象也很简单,transformers为这三个类都提供了自动类型,即AutoConfig, AutoTokenizer和AutoModel。三个…...

2024/03/27(C++·day3)
一、思维导图 二、完成下面类 代码 #include <cstring> #include <iostream>using namespace std;class myString { private:char *str; // 记录C风格的字符串int size; // 记录字符串的实际长度public:// 无参构造函数myString() : size(10){str new char[si…...

Multimodal Chain-of-Thought Reasoning in Language Models阅读笔记
论文(2023年)链接:https://arxiv.org/pdf/2302.00923.pdf GitHub项目链接:GitHub - amazon-science/mm-cot: Official implementation for "Multimodal Chain-of-Thought Reasoning in Language Models" (stay tuned a…...

C语言例4-15:从键盘输入一个整数,求其绝对值并输出。
代码如下: //从键盘输入一个整数,求其绝对值并输出。 #include<stdio.h> int main(void) {int n;printf("输出一个整数: \n");scanf("%d",&n); //从键盘输入一个整数保存至变量nif(n<0) //…...

【Linux】调试器-gdb的使用说明(调试器的配置,指令说明,调试过程说明)
目录 00.背景 01.安装 02.生成调试信息 03.调试过程 00.背景 在软件开发中,通常会为程序构建两种不同的版本:Debug模式和Release模式。它们之间的区别主要在于优化级别、调试信息、错误检查等方面: 1.Debug 模式: 优化级别低…...

Oracle AI Vector Search Multi-Vector Similarity Search 即多向量相似度检索学习笔记
Oracle AI Vector Search Multi-Vector Similarity Search 即多向量相似度检索学习笔记 0. 什么是多向量相似度检索1. 多向量相似度检索的示例 SQL2. 执行多向量相似度检索3. 分区行限制子句的完整语法 0. 什么是多向量相似度检索 多向量相似度检索涉及通过使用称为分区的分组…...

白板手推公式性质 AR模型 时间序列分析
白板手推公式性质 AR模型 时间序列分析 视频讲解:https://www.bilibili.com/video/BV1D1421S76v/?spm_id_from.dynamic.content.click&vd_source6e452cd7908a2d9b382932f345476fd1 B站对应视频讲解(白板手推公式性质 AR模型 时间序列分析)...

零基础学python之高级编程(6)---Python中进程的Queue 和进程锁,以及进程池的创建 (包含详细注释代码)
Python中进程的Queue 和进程锁,以及进程池的创建 文章目录 Python中进程的Queue 和进程锁,以及进程池的创建前言一、进程间同步通信(Queue)二、进程锁(Lock)三、创建进程池Poorpool 类方法: End! 前言 大家好,上一篇文章,我们初步接触了进程的概念及其应…...

184. 部门工资最高的员工
文章目录 题意思路代码 题意 题目链接 查出每个部门最高工资 思路 子查询group by 代码 select b.name as Department,a.name as Employee,salary from Employee as a left joinDepartment as b ona.departmentId b.id where(a.departmentId, salary) in(select departme…...