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

  前面的文章中已经介绍过了如果获得响应数据,接下来我们来介绍一下应该如何来验证这些获得的响应数据,比如验证状态码、状态行、cookies、header、content-type以及body体。

1.验证响应体(Response Body)

  关于响应体的验证前面的JSON例子和XML例子中已经做过详细的介绍,这里就不再介绍了。

  我们也可以使用映射来做,将响应体映射到一个java对象中,关于对象映射前面也已经介绍过了,这里就不再介绍了。

2.验证cookies

1 get("/x").then().assertThat().cookie("cookieName", "cookieValue"). ..
2 get("/x").then().assertThat().cookies("cookieName1", "cookieValue1", "cookieName2", "cookieValue2"). ..
3 get("/x").then().assertThat().cookies("cookieName1", "cookieValue1", "cookieName2", containsString("Value2")). ..

3.验证状态码以及状态行(Status and StatusLine)

1 get("/x").then().assertThat().statusCode(200). ..
2 get("/x").then().assertThat().statusLine("something"). ..
3 get("/x").then().assertThat().statusLine(containsString("some")). ..

4.验证头部(Header)

1 get("/x").then().assertThat().header("headerName", "headerValue"). ..
2 get("/x").then().assertThat().headers("headerName1", "headerValue1", "headerName2", "headerValue2"). ..
3 get("/x").then().assertThat().headers("headerName1", "headerValue1", "headerName2", containsString("Value2")). ..

验证头部我们也可以使用映射功能来做,比如说,我们要验证Content-Length头部是否小于1000。那我们就可以使用映射功能首先将头部的值转化为int,然后在使用 Hamcrest matcher 进行验证之前使用 Integer 封装类:

1 get("/something").then().assertThat().header("Content-Length", Integer::parseInt, lessThan(1000));

5.验证Content-Type

1 get("/x").then().assertThat().contentType(ContentType.JSON). ..

6.完全匹配body或content 

1 get("/x").then().assertThat().body(equalTo("something")). ..

7.关联型验证(使用响应体中的数据去验证响应体的另外一些部分)

  我们可以使用响应体中的数据去验证响应体的另外一些部分,比如,服务端返回下面Json文件:

1 { "userId" : "some-id", "href" : "http://localhost:8080/some-id" }

在上面的json文件中,我们可以注意到"href"属性是以"userId"的值结尾的,假如我们想要验证这样的一个 href ,我们可以通过实现 io.restassured.matcher.ResponseAwareMatcher并且使用它:

1 get("/x").then().body("href", new ResponseAwareMatcher<Response>() {
2                                   public Matcher<?> matcher(Response response) {
3                                           return equalTo("http://localhost:8080/" + response.path("userId"));
4                                   }
5                        });

如果我们使用的是Java 8 的话,我们还可以使用 lambda 表达式来做:

1 get("/x").then().body("href", response -> equalTo("http://localhost:8080/" + response.path("userId"));

io.restassured.matcher.RestAssuredMatchers 这个类中还定义了一些预定义的machers可以使用(或者 io.restassured.module.mockmvc.matcher.RestAssuredMockMvcMatchers类,如果我们使用的是Spring-mock-mvc 模型),比如说:

1 get("/x").then().body("href", endsWithPath("userId"));

RestAssuredMatchers  也可以与另外一个 RestAssuredMatchers 或者是  Hamcrest Matcher 进行组合来使用,例如:

1 get("/x").then().body("href", and(startsWith("http:/localhost:8080/"), endsWithPath("userId")));

这里的 and 方法是从 io.restassured.matcher.ResponseAwareMatcherComposer 类中静态导入的。

8.验证响应时间

  rest-assured的2.8.0版本开始支持获取响应时间,例如:

1 long timeInMs = get("/lotto").time()

或者也可以指定时间单位:

1 long timeInSeconds = get("/lotto").timeIn(SECONDS);

其中 SECONDS 是一个标准的 TimeUnit ,使用验证DSL也可以验证响应时间:

1 when().
2       get("/lotto").
3 then().
4       time(lessThan(2000L)); // Milliseconds

或者:

1 when().
2       get("/lotto").
3 then().
4       time(lessThan(2L), SECONDS);

注意,响应时间计算的执行需要JVM是热部署的(例如,只是简单的跑一个test来执行响应时间的衡量将会产生错误的结果)

需要注意的是,我们上面的响应时间只能做为一个参考,并不能非常精准的与服务器处理时间相关联(因为响应时间将会包括http往返的时间和rest-assured处理时间等其他时间)。

原文地址:https://www.cnblogs.com/lwjnicole/p/8298132.html

时间: 2024-08-29 15:19:02

rest-assured之验证响应数据(Verifying Response Data)的相关文章

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

我们使用rest-assured可以获得响应内容,比如:我们发起一个get请求 get("/lotto") 并且获得响应内容,我们有多种方式可以实现: 1 // 通过流的方式获得响应内容,在使用完流之后千万不能忘记关闭流 2 InputStream stream = get("/lotto").asInputStream(); 3 //通过字节数组的方式 4 byte[] byteArray = get("/lotto").asByteArray

Jmeter—添加断言 判断接口响应数据是否符合预期

发出请求之后,通过添加断言可以判断响应数据是否是我们的预期结果. 1 在Jmeter中发送一个状态返回200的http请求(参数故意输入错误).结果肯定是不是返回200啦. 但结果树中http请求的图标显示'绿色'表示请求成功了,因为服务器确实对请求返回了响应数据. 我们来添加断言验证响应数据符合预期.只有返回200成功,http请求才显示绿色图标. 2  在http请求上点击右键>添加>断言>响应断言 3 响应断言编辑页面,可选择断言应用范围和要测试的响应字段,匹配规则等. 都选择默认

Jmeter正则提取请求响应数据

前言 在测试时,我们经常需处理请求返回的响应数据,比如很多时候 cookie 或 token 或 Authorization授权码 会返回在 Response headers(响应头)中,这时我们便需要从中进行提取,以供其他接口使用. 今天我们主要学习下,如何在Jmeter中通过正则提取响应数据中 Response headers 的数据. 总的设置界面如下: 发送请求,获取响应数据 首先,设置一个HTTP请求,如下: 接着,设置一个察看结果树,然后执行,得到响应数据,下图中的cookie即我们

HMAC在“挑战/响应”(Challenge/Response)身份认证的应用

HMAC的一个典型应用是用在“挑战/响应”(Challenge/Response)身份认证中. 认证流程 (1) 先由客户端向服务器发出一个验证请求. (2) 服务器接到此请求后生成一个随机数并通过网络传输给客户端(此为挑战). (3) 客户端将收到的随机数提供给ePass,由ePass使用该随机数与存储在ePass中的密钥进行HMAC-MD5运算并得到一个结果作为认证证据传给服务器(此为响应). (4) 与此同时,服务器也使用该随机数与存储在服务器数据库中的该客户密钥进行HMAC-MD5运算,

ASP.NET Web API 记录请求响应数据到日志的一个方法

原文:http://blog.bossma.cn/dotnet/asp-net-web-api-log-request-response/ ASP.NET Web API 记录请求响应数据到日志的一个方法 REST风格的服务架构已经成为越来越多人的选择,之前我用过WCF来实现REST服务,WCF是一个很强大的框架,干这点小事有点太沉重的感觉.后来微软又推出了一个ASP.NET Web API,专门用来处理一些基本的Http服务,即灵活又简单,推荐大家都看看. 今天这篇文章是使用ASP.NET W

Java框架之SpringMVC 03-RequestMapping-请求数据-响应数据

SpringMVC SpringMVC是一种轻量级的.基于MVC的Web层应用框架. 通过一套 MVC 注解,让 POJO 成为处理请求的控制器,而无须实现任何接口. 采用了松散耦合可插拔组件结构,比其他 MVC 框架更具扩展性和灵活性. 优点: 1.天生与Spring框架集成,如:(IOC,AOP) 2.支持Restful风格 3.支持灵活的URL到页面控制器的映射 4.非常容易与其他视图技术集成,如:Velocity.FreeMarker等等 5.因为模型数据不存放在特定的API里,而是放在

用 jQuery.ajaxSetup 实现对请求和响应数据的过滤

不知道同学们在做项目的过程中有没有相同的经历呢?在使用 ajax 的时候,需要对请求参数和响应数据进行过滤处理,比如你们觉得就让请求参数和响应信息就这么赤裸裸的在互联网里来回的穿梭,比如这样: 要知道,在浩瀚的互联网中,所有的信息都是不安全的,万一有人偷窥我们怎么办?!万一被别人看见了我们的美体,偷窥到了我们的私处,然后以此威胁我们,岂不是太难堪了不是?这时,你或许会想给请求数据和响应数据加密,就相当于给我们的数据穿上了一层衣服.于是我们这样: 是不是美美哒,对,穿上一层漂漂亮亮的衣服,就不怕别

EMVTag系列16——AC响应数据

在一个联机交易中,要传送到发卡行的专有应用数据. 字段 长度(字节) 赋值 说明 长度 1 07 分散密钥索引 1 00 密文版本号 1 01 根据发卡行密钥版本设置 卡片验证结果(CVR) 4 03 00 bits 8–7: 00 = 第2个GENERATE AC返回AAC 01 = 第2个GENERATE AC返回TC 10 = 不请求第2个GENERATE AC 11 = RFU bits 6–5: 00 = 第1个GENERATE AC返回AAC 01 = 第1个GENERATE AC返

Retrofit响应数据及异常处理策略

今天我们来谈谈客户端对通讯协议的处理,主要分为三部分:约定响应数据格式,响应数据的自动映射以及错误处理三部分.由于数据协议采用json的居多,因此我们在此基础上进行说明. 约定响应数据格式 协议格式 通常来说,你拿到的设计文档中会存在通信协议的说明,对于客户端来说,一个良好的通信协议需要能描述操作状态(操作码+操作提示)以操作结果,因此,常见的响应数据的格式如下: { "code": 0, "msg": "正常", "data"