目录接口测试框架Restassured介绍市场上的主流的接口测试框架接口测试框架【Restassured】SpringBoot3.X整合快速开始Restassured框架常用方法基础语法格式参数配置示例断言与解析响应断言内置结果解析示例断言测试结果解析接口测试框架Restassured介绍市场上的主流的接口测试框架Postman提供了类似RestAssured的功能包括请求发送、断言和响应处理等。Apache HttpClient一个用于发送HTTP请求的Java库提供了更底层的控制和定制化。JUnit虽然JUnit主要用于单元测试但它可以与RestAssured等库集成用于编写针对API接口的集成测试。MockMvc是Spring框架下的一个模拟框架用于模拟Web请求和响应接口测试框架【Restassured】一个基于Java的轻量级接口测试框架主要用于简化基于HTTP协议的接口测试简单易用、功能强大、可扩展性好官网http://rest-assured.io优点简单易用RestAssured提供了简单易用的API可以轻松地编写测试代码。功能强大支持多种请求方法、断言和验证响应内容、状态码、响应时间等特性可扩展性好RestAssured可以与TestNG、JUnit等测试框架完美集成支持多种数据格式处理RestAssured可以处理JSON和XML格式的数据支持结构化解析和多种解析方式支持xpath/jsonpath/gpath等解析方式对Spring的支持比较全面方便使用Spring框架的开发者缺点依赖性强RestAssured依赖于Java和HTTP协议对于非Java或非HTTP协议的接口可能不太适用需要配置测试环境在使用RestAssured进行接口自动化测试之前需要搭建相应的测试环境包括服务器、数据库等。非0基础上手虽然RestAssured提供了简单易用的API但对于初学者来说仍然需要一定的学习成本才能掌握。SpringBoot3.X整合dependencygroupIdio.rest-assured/groupIdartifactIdrest-assured/artifactId/dependencydependencygroupIdio.rest-assured/groupIdartifactIdrest-assured-all/artifactId/dependencydependencygroupIdio.rest-assured/groupIdartifactIdspring-web-test-client/artifactId/dependency快速开始given设置测试预设包括请求头、请求参数、请求体、cookie等when所要执行的操作配置发起请求的网址GET / POST 请求then解析结果、断言SpringBootTestpublicclassAssuredTest{TestpublicvoidtestBase(){RestAssured.given().param(id,1).when().get(http://127.0.0.1:8082/api/v1/test/detail).then().log().all().statusCode(200);}}Restassured框架常用方法基础语法格式RestAssured的语法采用简洁的链式调用方式以given()开始设置测试预设包括请求头、请求参数、请求体、cookie等然后使用when()指定请求的URLGET、POST等请求最后使用then()进行断言和解析响应结果参数配置请求头参数使用header()方法设置请求头信息例如“header(“Content-Type”, “application/json”)”。请求参数对于GET请求使用“param()”方法设置URL参数例如“param(“key”, “value”)”对于POST请求可以使用“body()”方法设置请求体内容文件上传提供multiPart()的方法可以指定文件(file)、字节数组(byte-array)、输入流或者是上传文件示例GET 请求log()可以向控制台输出返回的信息log().all() 可以返回所有响应中的数据TestpublicvoidtestBase(){RestAssured.given().queryParam(id,1).when().get(http://127.0.0.1:8082/api/v1/test/detail).then().log().all().statusCode(200);}POST方式form表单TestpublicvoidtestPostForm(){RestAssured.given().formParam(mail,1320801376sina.com).formParam(pwd,123456).when().post(http://127.0.0.1:8082/api/v1/test/login_form).then().log().all().statusCode(200);}POST方式jsonheaderTestpublicvoidtestPostJsonHeader(){MapString,StringparamsnewHashMap();params.put(title,山海经传奇);RestAssured.given().header(token,7a9b7dcbba2443c5a80fbfa62da63e69)//.header(Content-Type,application/json).contentType(ContentType.JSON).body(JsonUtil.obj2Json(params)).when().post(http://127.0.0.1:8082/api/v1/test/buy).then().log().all().statusCode(200);文件上传TestpublicvoidtestFile(){RestAssured.given().multiPart(newFile(/Users/xdclass/Desktop/测试jmx/id.csv)).when().post(http://127.0.0.1:8082/api/v1/test/upload).then().log().all().statusCode(200);}断言与解析响应断言使用statusCode()方法指定期望的响应状态码例如statusCode(200)还可以使用body()方法对响应内容进行断言例如body(key, equalTo(value))类型断言方法含义状态码statusCode()响应状态码响应头header()响应头信息内容body()内容匹配内置结果解析自带GPath解析是来自groovy 编程语言的广泛使用的 XML 和 JSON 解析器 GPath可以处理html、xml、json跟JSONpath的区别就是不需要从$开始写了GPATH直接从JSON消息的第一层数据开始通过extract().response()将响应结果保存到Response类型的变量使用Gpath提取响应中的某一个具体的数据提取JSONres.jsonPath().get(“XXX.XXX.XXX”);提取xmlres.xmlPath().get(“XXX.XXX.XXX”);提取HTMLres.htmlPath().get(“XXX.XXX.XXX”);JSON解析支持对JSON格式的响应数据进行解析可以使用jsonPath()方法指定JSON路径进行查询和断言。XML解析支持对XML格式的响应数据进行解析可以使用xmlPath()方法指定XML路径进行查询和断言。示例断言测试TestpublicvoidtestAssert(){MapString,StringparamsnewHashMap();params.put(title,山海经传奇);RestAssured.given().header(token,7a9b7dcbba2443c5a80fbfa62da63e69).header(Content-Type,application/json).body(JsonUtil.obj2Json(params)).when().post(http://127.0.0.1:8082/api/v1/test/buy).then().log().all().statusCode(200).body(code,equalTo(1));}结果解析TestpublicvoidtestResponse(){MapString,StringparamsnewHashMap();params.put(title,山海经传奇);ResponseresponseRestAssured.given().header(token,7a9b7dcbba2443c5a80fbfa62da63e69)//.header(Content-Type,application/json).contentType(ContentType.JSON).body(JsonUtil.obj2Json(params)).log().headers()//打印请求头.log().body()//打印请求体.when().post(http://127.0.0.1:8082/api/v1/test/buy).then().log().all().statusCode(200).extract().response();Objectdataresponse.jsonPath().get(data);System.out.println(data);}