Rest Assured 使用总结

本文深入探讨REST-Assured框架,涵盖请求数据指定、响应验证、认证授权、日志使用、对象映射等关键主题,旨在简化HTTP服务测试流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

https://www.cnblogs.com/lwjnicole/category/1146558.html

 

REST-Assured是一个可以简化HTTP Builder底层 基于REST服务的测试过程的Java DSL(针对某一领域,具有受限表达性的一种计算机程序设计语言)。它支持发起POST,GET,PUT,DELETE,OPTIONS,PATCH和HEAD请求,并且可以用来验证和校对这些请求的响应信息。

rest-assured之如何指定请求数据(Specifying Request Data 包括请求参数、请求头、cookie等)

摘要: 我们除了可以为一个请求指定请求参数之外,还可以指定请求头(header)、cookies、请求体(body)以及请求内容类型(content-type)等,下面我们就来一一介绍一下: 一、请求HTTP资源 我们通常在 request specification 中可以调用任何 HTTP方法 来执行一阅读全文

posted @ 2018-01-18 15:44 lwjnicole 阅读(884) | 评论 (0) 编辑

rest-assured之认证授权(Authentication)

摘要: rest-assured支持多种认证授权方案,比如:OAuth、digest(摘要认证)、certificate(证书认证)、form(表单认证)以及preemptive(抢占式基础认证)等。我们可以单独为某一个请求设置认证授权: 我们也可以为所有的请求定义一个认证授权: 一、基础认证 这里有两种基阅读全文

posted @ 2018-01-17 19:21 lwjnicole 阅读(458) | 评论 (0) 编辑

rest-assured之验证响应数据(Verifying Response Data)

摘要: 前面的文章中已经介绍过了如果获得响应数据,接下来我们来介绍一下应该如何来验证这些获得的响应数据,比如验证状态码、状态行、cookies、header、content-type以及body体。 1.验证响应体(Response Body) 关于响应体的验证前面的JSON例子和XML例子中已经做过详细的阅读全文

posted @ 2018-01-16 18:30 lwjnicole 阅读(455) | 评论 (0) 编辑

rest-assured之Schema validation(包括JSON Schema validation及Xml Schema validation)

摘要: rest-assured从2.1.0版本开始支持 Schema 验证,包括JSON Schema validation及Xml Schema validation。我们之前断言响应体都是一个一个字段来进行断言,这样如果断言的字段比较多的话就非常的麻烦,为了解决这个问题,我们可以使用schema文件来阅读全文

posted @ 2018-01-16 16:32 lwjnicole 阅读(262) | 评论 (0) 编辑

rest-assured之静态导入及简单使用实例

摘要: 一、静态导入 为了有效的使用rest-assured,官网推荐从下列class中静态导入方法: 如果想使用 Json Schema validation(验证),还需要静态导入下面的方法: 如果我们正在使用的是 Spring MVC ,我们可以使用 spring--mock-mvc模型的rest-a阅读全文

posted @ 2018-01-15 20:38 lwjnicole 阅读(416) | 评论 (0) 编辑

rest-assured之获取响应数据(Getting Response Data)

摘要: 我们使用rest-assured可以获得响应内容,比如:我们发起一个get请求 get("/lotto") 并且获得响应内容,我们有多种方式可以实现: 通过上面的方式我们就可以获得整个响应内容,之前的文章中我们已经介绍过通过JsonPath和XMLPath的方式来获得响应体中的某个值或者某个list阅读全文

posted @ 2018-01-15 17:44 lwjnicole 阅读(385) | 评论 (0) 编辑

rest-assured的根路径(root path)和URL编码(URL Encoding)

摘要: 一、根路径(Root path) 为了避免在body方法中使用重复的路径来断言,我们可以指定一个根路径(root path),比如: 我们以前的写法是: 现在我们可以使用root path的方法来写: 我们也可以设置默认的根路径: 在许多高级的测试用例中,在根路径上附加一些参数也非常有用,我们可以使阅读全文

posted @ 2018-01-15 14:38 lwjnicole 阅读(53) | 评论 (0) 编辑

rest-assured的日志使用介绍

摘要: 在许多测试用例当中,为了帮助我们创建正确的断言和发送正确的请求,打印出详细的响应和请求数据是非常有用的。为此我们可以使用rest-assured提供的预定义过滤器或者使用其中的一些快捷方法。 一、请求日志 从1.5版本开始,rest-assured支持请求在发送到服务器之前打印特定请求日志的功能(通阅读全文

posted @ 2018-01-15 11:26 lwjnicole 阅读(73) | 评论 (0) 编辑

rest-assured的默认值与Specification重用

摘要: 一、默认值 rest-assured发起请求时,默认使用的host为localhost,端口为8080,如果你想使用不同的端口,你可以这样做: 或者是简单点: 你也可能改变默认的baseURI、basePath、port和认证scheme: 这就意味着,类似 get("/hello") 这样的一个请阅读全文

posted @ 2018-01-12 19:52 lwjnicole 阅读(293) | 评论 (0) 编辑

rest-assured的对象映射(序列化和反序列化)

摘要: rest-assured支持映射Java对象到Json和XML以及从Json和XML中映射到Java对象。Json映射需要在classpath 中有Jackson、Jackson 2或者是Gson,XML映射需要在classpath 中有JAXB。 一、序列化 序列化:序列化Java对象到Json或阅读全文

posted @ 2018-01-12 11:23 lwjnicole 阅读(46) | 评论 (0) 编辑

rest-assured的xmlPath使用方法总结

摘要: xmlPath的使用方法跟JsonPath的使用方法相近,下面简单总结一下: 准备xml文件数据: 下面我们使用rest-assured的xmlPath来简单的提取一些值: 与JsonPath一样,xmlPath同样支持简单提取某个值: 你也可以做一些复杂点的操作,比如以int的形式获取第一条记录的阅读全文

posted @ 2018-01-11 19:43 lwjnicole 阅读(236) | 评论 (0) 编辑

基于JsonPath和XmlPath的对象映射(Object Mapping)

摘要: rest-assured支持映射Java对象到Json和XML以及从Json和XML中映射到Java对象。Json映射需要在classpath 中有Jackson、Jackson 2或者是Gson,XML映射需要在classpath 中有JAXB。 1.JsonPath映射 例如:让我们来看一下我们阅读全文

posted @ 2018-01-11 19:14 lwjnicole 阅读(43) | 评论 (0) 编辑

rest-assured的JsonPath使用方法总结

摘要: JsonPath对于解析Json格式的数据来说非常简单,比如有下面这样的Json数据: 下面是一些简单的使用实例: 从上面的例子中可以看到所有的获取路径中我们都重复使用了lotto,为了避免这个问题,我们可以设置一个根路径(root path): 如果你只是对提取一个单一的值感兴趣,你还可以这样做:阅读全文

<think>我们正在讨论使用REST Assured获取请求体内容。根据引用资料,特别是引用[2]和引用[3],我们可以看到REST Assured通常用于发送请求和验证响应。但是,用户的问题是如何获取请求体的内容。注意,请求体是我们在发送请求时设置的,所以通常我们已经在测试代码中定义了请求体。然而,有时我们可能需要在发送之前记录请求体,或者在请求发送过程中捕获它以进行调试。 在REST Assured中,我们通常通过`given()`方法设置请求体,例如: ```java given().body("some body").post("/somewhere"); ``` 如果我们想要在发送之前获取请求体,我们可以将其存储在一个变量中,然后使用它。例如: ```java String requestBody = "{\"key\":\"value\"}"; given().body(requestBody).post("/endpoint"); // 这样我们就可以直接使用requestBody变量,因为我们自己定义了它 ``` 但是,如果我们使用的是RestAssured的流式API,并且没有单独存储请求体,那么我们可以通过配置日志来记录请求体。引用[4]提到RestAssured提供了灵活的日志配置选项,我们可以配置日志来记录请求的详细信息,包括请求体。 例如,我们可以使用: ```java given().log().all().body(requestBody).post("/endpoint"); ``` 这样,请求的详细信息(包括请求体)将被打印到控制台。 另外,如果我们想要以编程方式获取请求体(而不是仅仅打印日志),我们可以使用RestAssured的过滤器。过滤器允许我们在请求发送之前和之后拦截请求和响应。 例如,我们可以定义一个过滤器来捕获请求体: ```java RequestSpecification spec = given(); // 添加过滤器 spec.filter((requestSpec, responseSpec, ctx) -> { // 获取请求体 String body = requestSpec.getBody(); // 这里可以对body做任何操作,比如保存到变量 System.out.println("Request body: " + body); return ctx.next(requestSpec, responseSpec); }); spec.body("test body").post("/endpoint"); ``` 但是,请注意,`requestSpec.getBody()`返回的是`Object`类型,它可能是字符串,也可能是字节数组或其他类型,具体取决于我们如何设置body。通常,如果我们是使用字符串设置的,那么它就是一个字符串;如果是使用字节数组或文件,则会是相应的类型。 另外,在RestAssured 4.1.2版本之后,我们可以使用`RequestLoggingFilter`来记录请求,但它主要是用于日志,而不是直接获取内容。 因此,总结一下,获取请求体内容的方法有: 1. 在设置请求体时,将其存储在一个变量中,这样我们就可以在需要时使用该变量。 2. 使用日志配置,将请求体打印到日志中(控制台或文件)。 3. 使用过滤器(Filter)来捕获请求体。 根据用户的具体需求,可以选择合适的方法。 注意:在REST Assured中,请求体是在我们调用`body()`方法时设置的,所以我们通常已经拥有它。因此,最直接的方法就是将其保存在一个变量中。 下面是一个示例代码,展示如何使用变量保存请求体并在过滤器中获取它(虽然通常不需要在过滤器中获取,因为我们已经有了变量,但这里为了演示): ```java public class GetRequestBodyExample { @Test public void testGetRequestBody() { // 方法1:直接存储请求体 String requestBody = "{\"name\":\"test\"}"; // 发送请求,同时使用过滤器记录请求体(虽然这里已经有了,但演示用) given() .filter((requestSpec, responseSpec, ctx) -> { // 在过滤器中获取请求体 Object body = requestSpec.getBody(); if (body instanceof String) { System.out.println("Request body in filter: " + (String)body); } return ctx.next(requestSpec, responseSpec); }) .body(requestBody) .when() .post("/api") .then() .statusCode(200); } } ``` 但是,请注意,在过滤器中获取的请求体可能已经被序列化(例如,如果我们传递的是一个对象,RestAssured会将其序列化为字符串,但在过滤器中,我们可能得到的是序列化后的字符串,也可能是原始对象,这取决于我们设置body的方式)。因此,建议在设置body时直接使用字符串形式,或者将对象序列化为字符串并保存。 另外,引用[3]中展示了如何发送请求并获取响应,但没有直接提到获取请求体。因此,我们主要依靠上述方法。 如果用户需要将请求体保存到文件或其他地方,可以在过滤器中处理,或者直接使用变量。 因此,回答用户的问题:REST Assured获取请求体内容的方法主要是通过事先保存设置请求体的变量,或者通过过滤器和日志来获取。 注意:在REST Assured中,我们通常更关注响应体的获取,因为请求体是我们自己构造的,所以一般不需要额外获取。但上述方法可以满足需求。 相关问题: 1. REST Assured中如何获取响应体? 2. 如何使用REST Assured记录请求和响应的详细信息? 3. REST Assured中过滤器的使用场景有哪些?</think>### REST Assured 获取请求体内容的方法 在 REST Assured 中获取请求体内容主要有两种场景:**发送前获取**和**拦截器记录**。以下是具体实现方法: #### 方法一:发送前直接获取(推荐) 由于请求体是测试代码自身构建的,最直接的方式是在发送请求前保存请求体变量: ```java String requestBody = "{\"name\":\"test\",\"age\":30}"; // 定义请求体 // 发送请求时复用变量 Response response = given() .contentType(ContentType.JSON) .body(requestBody) // 使用预定义的请求体 .post("/api/users"); // 直接使用保存的请求体 System.out.println("Sent request body: " + requestBody); ``` #### 方法二:通过过滤器拦截请求 使用 `RequestLoggingFilter` 或自定义过滤器在请求发送前捕获内容: ```java // 1. 启用详细请求日志(控制台输出) Response response = given() .filter(new RequestLoggingFilter(LogDetail.BODY)) // 重点:记录请求体 .body("{\"key\":\"value\"}") .post("/endpoint"); // 2. 自定义过滤器(编程式获取) Filter captureFilter = (reqSpec, resSpec, ctx) -> { String body = reqSpec.getBody(); // 获取请求体内容 System.out.println("Intercepted body: " + body); return ctx.next(reqSpec, resSpec); }; given() .filter(captureFilter) .body("test content") .post("/api"); ``` > **关键说明**: > 1. 请求体在发送前已被代码定义,优先使用**变量保存法**(方法一)最可靠 > 2. 过滤器适用于日志记录或调试,但会修改请求流程 > 3. `reqSpec.getBody()` 返回 `Object` 类型,可能需要 `toString()` 转换 > 4. 复杂结构(如文件上传)需使用 `.multiPart()` 方法[^2] #### 完整示例 ```java import io.restassured.RestAssured; import io.restassured.filter.Filter; import io.restassured.filter.log.RequestLoggingFilter; import io.restassured.response.Response; import static io.restassured.RestAssured.*; public class RequestBodyCapture { public static void main(String[] args) { // 方法1:变量保存 String jsonBody = "{\"id\": 101}"; Response res1 = given().body(jsonBody).post("/data"); System.out.println("Predefined body: " + jsonBody); // 方法2:过滤器捕获 Filter bodyCapture = (req, res, ctx) -> { Object body = req.getBody(); System.out.println("[FILTER] Body: " + body); return ctx.next(req, res); }; given() .filter(bodyCapture) .filter(new RequestLoggingFilter()) // 默认日志 .body("Binary data") .post("/upload"); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值