接口测试 使用 rest-assured 进行接口测试

news/2024/11/8 3:28:54/

目录

前言

正文

1.HTTP 状态码

2.节点值验证

3.格式化打印 json

4.参数化

5.响应时间

6.JSON Schema Validation


前言

使用Rest-Assured进行接口测试是一个很好的选择。Rest-Assured是一个基于Java的开源库,专门用于简化和增强RESTful接口的测试。它提供了易于使用的API,可以轻松地发送HTTP请求、验证响应和解析JSON/XML等格式的数据。
说一下发帖的原因,由于偶然机会,得知了 rest-assured 这个项目,据说很棒的样子,我就屁颠屁颠到 Github 上,先把项目 fork 过来再说,不过研究源码可能是有生之年了 (〃ω〃)。
正好我们组在使用 Java 脚本进行接口测试,会需要写一些公共方法来验证接口返回的 json 节点神马的,当然保证状态码 200 肯定是前提。之前使用的是 net.sf.json,随便贴几行代码,Object、Array、String、JSONObject 神马的互相转换取值,讲道理挺容易被绕晕的。。。

而且,给同事讲解的时候也比较尴尬(抛出一个异常的眼神你们自己体会),有时候我们为了提升效率,还是不喜欢这种绕的做法。看 rest-assured 的用户手册时,首先看的就是节点取值验证部分,然后我 o゜▽゜) o,总之非常高兴就是了。

正文

接下来我就依据文档写了一些 demo,在这里分享下自己的经验,没啥厉害的,看看热闹就行~
首先,我使用 idea 新建了一个 maven 项目,添加了以下依赖:

<dependency><groupId>io.rest-assured</groupId><artifactId>rest-assured</artifactId><version>3.0.1</version><scope>test</scope>
</dependency><dependency><groupId>io.rest-assured</groupId><artifactId>json-schema-validator</artifactId><version>3.0.1</version><scope>test</scope>
</dependency><dependency><groupId>io.rest-assured</groupId><artifactId>spring-mock-mvc</artifactId><version>3.0.1</version><scope>test</scope>
</dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>RELEASE</version>
</dependency><dependency><groupId>org.codehaus.groovy</groupId><artifactId>groovy-all</artifactId><version>1.8.1</version><scope>provided</scope>
</dependency>

然后,写一个测试类,官方推荐我们在使用的时候,静态导入以下:

import static io.restassured.RestAssured.*;
import static io.restassured.matcher.RestAssuredMatchers.*;
import static io.restassured.path.json.JsonPath.from;
import static org.hamcrest.Matchers.*;
import static io.restassured.module.jsv.JsonSchemaValidator.*;

接下来就是我在接口测试中验证的常见逻辑了,实战 time,Go!

1.HTTP 状态码

@Test
public void test1() {Response response = get("url");//发起get请求,并获取响应if (response.getStatusCode() == 200) {//如果响应码等于200///}}

先使用 get 方法发起请求(支持 HTTP 和 HTTPS,不需要我们手动调用不同的方法类啦),获得响应后就需要我们做进一步的处理。

2.节点值验证

比如对这样一串 json,

{"result": {"cardtablist": [{"id": 1,"name": "服务","taburl": "","type": "0"},{"id": 2,"name": "金融","taburl": "https://demo/","type": "1"}]},"returncode": 0,"message": "ok"
}

我们可以简单写一下:

response.then().body("returncode", equalTo(0));//判断returncode是否等于
response.then().body("result.cardtablist", hasSize(2));//判断cardtablist数组的长度是否等于2
response.then().body("result.cardtablist[0].id", equalTo(1));//判断cardtablist数组第一个元素下,id字段值是否等于1
response.then().body("result.cardtablist[0].id", lessThan(2));//判断cardtablist数组第一个元素下,id字段值是否小于2
response.then().body("result.cardtablist[0].id", greaterThan(0));//判断cardtablist数组第一个元素下,id字段值是否大于0
response.then().body("result.cardtablist[0].name", not(""));//判断cardtablist第一个数组元素中name字段值不为“”
response.then().body("result.cardtablist[0].name.length()", greaterThan(10));//判断cardtablist第一个数组元素中name字段值长度大于10
List<String> dspnameStr = from(jsonStr).getList("result.adlist.findAll { it.ishavead == 1 }.dspname");//得到所有的ishavead=1的adlist数组元素,并获取其中dspname的值,放在一个集合里

3.格式化打印 json

我觉得这个功能挺赞啊,省得打开浏览器去JSON在线解析及格式化验证 - JSON.cn做格式化。

response.getBody().prettyPrint();//格式化打印JSON数据

当然,控制台打印的 json 字符串不带颜色,这就不要挑剔了。

4.参数化

given().param("p1", "0").param("p2", "1").get("http://server/demo");

这里把参数拿出来单独赋值,最终会拼接成形如http://server/demo?p1=0&p2=1的链接并进行访问。

5.响应时间

when().get("https://server/demo?p1=0&p2=1").then().time(lessThan(100L),TimeUnit.MILLISECONDS);//判断响应时间是否少于预期值。

6.JSON Schema Validation

这个功能我也挺喜欢的,可以通过自己编写 json 指定要验证的结构字段(比如取值范围限定、字符串整型数组类型、必要字段是否存在等),具体内容有兴趣的同学可以自学一下。此处只展示 API 的调用:

get("https://server/demo?p1=0&p2=1").then().assertThat().body(matchesJsonSchemaInClasspath("test.json"));

这里我把写好的 test.json 文件放在 idea 自动生成的 src/main/resources 路径下,里面简单写了下:

{"$schema": "http://json-schema.org/draft-04/schema#","title": "Product set","type": "object","properties": {"result": {"type": "object"},"returncode": {"type": "integer"},"message": {"type": "integer"}},"required": ["result","returncode","message"]
}

这里验证点有:保证返回 result、returncode、message 字段,并对每个字段的 value 进行类型限定。

  作为一位过来人也是希望大家少走一些弯路

在这里我给大家分享一些自动化测试前进之路的必须品,希望能对你带来帮助。

(WEB自动化测试、app自动化测试、接口自动化测试、持续集成、自动化测试开发、大厂面试真题、简历模板等等)

相信能使你更好的进步!

点击下方小卡片


http://www.ppmy.cn/news/873394.html

相关文章

探讨餐饮行业油烟污染与治理措施

安科瑞 华楠 摘 要&#xff1a; 近年来我国餐饮行业油烟污染已成为城市大气污染的主要来源之一。如今环境问题日益突出严重制约到人们的身体健康&#xff0c;需要引起重视采取一系列有效的措施来治理餐饮行业的油烟污染。 关键词&#xff1a;餐饮业&#xff1b;污染&#xf…

100多个免费常用API接口分享

下面就罗列一些免费的各类API接口。 手机号码归属地API接口&#xff1a; https://www.juhe.cn/docs/api/id/11 历史上的今天API接口&#xff1a; https://www.juhe.cn/docs/api/id/63 股票数据API接口&#xff1a; https://www.juhe.cn/docs/api/id/21 全国WIFI接口&…

免费菜谱api接口-菜谱大全api

菜谱大全api&#xff0c;通过SDK提供给APP包括需要查询的菜谱名等信息的实时在线数据服务接口&#xff0c;调用非常方便。 接口名称&#xff1a;菜谱大全api 接口平台&#xff1a;免费api接口 接口地址&#xff1a;http://apis.juhe.cn/cook/query.php 支持格式&#xff1a;jso…

介绍下前端加密的常见场景和方法

首先&#xff0c;加密的目的&#xff0c;简而言之就是将明文转换为密文、甚至转换为其他的东西&#xff0c;用来隐藏明文内容本身&#xff0c;防止其他人直接获取到敏感明文信息、或者提高其他人获取到明文信息的难度。 通常我们提到加密会想到密码加密、HTTPS 等关键词&#x…

100多个常用API接口免费分享

我们在开发的过程中&#xff0c;常常调用API接口&#xff0c;往往事半功倍。今天给大家整理了优秀的API接口&#xff01; 各类无次数限制的免费API接口整理&#xff0c;主要是聚合数据上和API Store上的一些&#xff0c;还有一些其他的。 聚合数据提供30大类,160种以上基础数据…

几个常用的免费API接口调用

手机号码归属地API接口&#xff1a; https://www.juhe.cn/docs/api/id/11 历史上的今天API接口&#xff1a; https://www.juhe.cn/docs/api/id/63 股票数据API接口&#xff1a; https://www.juhe.cn/docs/api/id/21 全国WIFI接口&#xff1a; https://www.juhe.cn/docs/…

python 文件加密_文件加密和解密的Python脚本

我在查看一个处于活动状态的python食谱时发现了以下代码。我提出了以下4个问题。非常感谢您的指导和解释。在 Q&#xff1a;&#xff1a;我无法确切地理解为什么在“klong”行的第一个位置从用户那里获取“key random seed”(系统argv[2] )”&#xff1f;尤其是因为&#xff0c…