基于YAML的接口自动化测试框架设计怎么做?来听听专业人士怎么说
创始人
2025-05-28 15:56:08
0次

目录

前言 

YAML格式测试用例设计

脚本读取YAML数据


前言 

在设计自动化测试框架的时候,我们会经常将测试数据保存在外部的文件(如Excel、YAML、CSV),或者数据库中,实现脚本与数据解耦,方便后期维护。目前非常多的自动化测试框架采用通过Excel或者YAML文件直接编写测试用例,通过脚本读取出来驱动自动化测试代码执行。至于采用Excel还是YAML格式各位小伙伴都有不同见解,比如用Excel维护直观、修改数据方便,劣势是通过Git这样的版本控制工具不太好比较历史版本差异(因为是二进制格式);YAML的优势是支持数据格式完备、版本控制管理方便(文本格式),劣势是没有Excel这么直观。Excel这种方式大家比较熟悉了,本文带着大家来了解如何基于YAML设计自动化测试框架。

2023最新合集Python自动化测试开发框架【全栈/实战/教程】合集精华,学完年薪40W+icon-default.png?t=N176https://www.bilibili.com/video/BV1AF411T7qJ?p=1&vd_source=6e2d6c374fd551babe1ac6a5e60c5a75                  

 

YAML格式测试用例设计

以接口自动化为例,用YAML编写测试用例要实现的基本功能需求:

  1. 一个YAML文件能够支持多个用例存储需求,不然几千个用例对应几千个YAML文件管理起来也受不了
  2. 用例中能够支持单接口测试用例也能支持业务场景用例(多个接口调用组合)
  3. 用例中需要包含所属模块、用例名、请求信息、断言信息、提取响应(实现接口关联)等信息

基于上述需求我们来设计一版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接口测试工具的同学应该非常熟悉这种格式。

               2023最新合集Python自动化测试开发框架【全栈/实战/教程】合集精华,学完年薪40W+icon-default.png?t=N176https://www.bilibili.com/video/BV1AF411T7qJ?p=1&vd_source=6e2d6c374fd551babe1ac6a5e60c5a75

        

 

脚本读取YAML数据

在读取YAML文件数据之前,我们首先需要了解两个概念:序列化与反序列化

  • 把对象转换为字节序列的过程称为对象的序列化;
  • 把字节序列恢复为对象的过程称为对象的反序列化。

而我们读取YAML的过程就可以称之为反序列化。

主流的编程语言都能实现对YAML的解析,接下来以Java语言为例讲解如何读取YAML文件的内容:

Java中能够实现YAML序列化和反序列化的库有很多,包括SnakeYaml、Jackson、jYaml等,使用起来大同小异。以使用Jackson为例:

步骤一:Maven POM文件中添加库的坐标

com.fasterxml.jackson.corejackson-databind2.10.2
com.fasterxml.jackson.dataformatjackson-dataformat-yaml2.10.2

org.projectlomboklombok1.18.12provided
作者:shakebabe
链接:http://testingpai.com/article/1669799619811
来源:测试派
协议:CC BY-SA 4.0 https://creativecommons.org/licenses/by-sa/4.0/

这里用到了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 teststeps;
}

Validate实体类:

@Data
@NoArgsConstructor
@AllArgsConstructor
public class Validate {private List eq;private List gt;private List ge;private List lt;private List le;
} 

通过Jackson读取YAML文件内容并保存到TestCase实体类对象中

public static List loadYaml(String path){ObjectMapper objectMapper = new ObjectMapper(new YAMLFactory());List cases = null;try {cases = objectMapper.readValue(new File(path), new TypeReference>() {});} catch (IOException e) {System.out.println(path+"格式非法,请检查配置");e.printStackTrace();}return cases;
}

其中new TypeReference>() {}是因为读取到的YAML文件中有多个TestCase用例,所以我们需要定义为List集合类型来接收。

来看看读取之后的效果:

后续即可通过返回的testCase发起接口请求(比如通过REST-assured)、进行接口断言、提取响应字段等操作。

        2023最新合集Python自动化测试开发框架【全栈/实战/教程】合集精华,学完年薪40W+icon-default.png?t=N176https://www.bilibili.com/video/BV1AF411T7qJ?p=1&vd_source=6e2d6c374fd551babe1ac6a5e60c5a75

                                                               

 

相关内容

热门资讯

在大吉订购APP订购交易亏损被...   近期,不少投资者反映在“大吉订购App”上投资白银、铂金等商品遭遇严重亏损。该平台宣称提供现货订...
铂银壹号APP商品订购交易亏损...   许多中小投资者误以为网上的“商品现货订购”是合规合法的理财渠道,殊不知这背后隐藏着巨大的合规风险...
兴鑫淘金APP贵金属订购交易亏...   白银、贵金属或其他商品类投资,除国家批准的正规期货交易场所及持牌期货公司外,市面上大量第三方交易...
铂银掘金APP无资质的违规平台...   铂银掘金等平台的投资者,往往是被“注册送现金”“充值返现券”“首单免亏”等广告话术吸引,进而下载...
八方淘金APP订购交易不合规,...   “八方淘金APP”“铂银掘金APP”“铂银壹号APP”等软件被指以“现货订购”为名,实际采用高杠...
在指尖订购APP订购商品亏损被...   指尖订购APP这类平台,表面是“订购交易”,实则是披着电商外衣的非法期货陷阱。绝大多数投资者被蒙...
在犀贝易购APP做商品订购交易...   市面上打着“现货投资”“贵金属交易”旗号的APP并不少,但真正合规、受监管的平台并不多。犀贝易购...
易达淘金APP虚假商品订购交易...   易达淘金APP存在严重的虚假宣传与违规交易行为。该平台打着“商品订购”的旗号,实则通过不合规的交...
大浪淘金APP白银订购亏损被骗...   大浪淘金APP最隐蔽的套路,在于其完全封闭的内盘交易系统。表面上,它宣称与国际贵金属市场接轨;实...
一品好购APP上订购白银出现亏...   一品好购APP原名“一品订购”,运营方为上海宝智未来信息技术有限公司。近期不少投资者反映在该平台...
九州订购APP贵金属订购投资骗...   九州订购APP正通过抖.音、快手、今日头条等平台大量投放投资广告,用“5元起投”“充值返现”“0...
坚锅淘金APP交易软件并不正规...   当前,市面上大量所谓的“现货商城订购”交易软件,早已偏离了正常的实物商品买卖,演变为高杠杆、高手...
斗金订购APP贵金属期货交易骗...   斗金订购APP的投资者往往被铺天盖地的广告宣传所诱导——注册即送现金、充值返现券等看似诱人的福利...
警惕!云启购APP违规经营,披...   "5元起投、充值返现、稳赚不赔"——这些诱人的广告语背后,可能是一个精心设计的金融陷阱。  近期...
量子淘金APP贵金属投资不合规...   "4元起投""充值返券""月入过万"——这些极具诱惑力的广告语在短视频平台、社交软件上铺天盖地。...
鑫汇智投APP贵金属商品订购骗...   鑫汇智投APP非法期货投资骗局,受害者在投资过程中根本不懂交易,也不去研究和验证这个平台是否正规...
矅光智策APP平台违规经营非法...   矅光智策APP对外宣称是“商城订购”“现货交易”,但查询其经营范围,并未显示具备开展现货期货交易...
黄金珠宝怎么选?内侧刻字都代表... 潮新闻客户端 记者 马焱 通讯员 任倩影 9月8日下午,“云游杭州 乐购金秋”——“浙城·浙放心”活...
原创 冰... 最近全球国债市场正在上演魔幻一幕: 美债、日债、欧债遭遇猛烈抛售,收益率冲到几十年新高,美国财政部都...
日韩股市开盘表现分化 上证报中国证券网讯 9月9日,日韩股市开盘表现分化,韩国综合指数开盘上涨0.26%,报6972.87...