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

  我们使用rest-assured可以获得响应内容,比如:我们发起一个get请求 get("/lotto") 并且获得响应内容,我们有多种方式可以实现:

1 // 通过流的方式获得响应内容,在使用完流之后千万不能忘记关闭流
2 InputStream stream = get("/lotto").asInputStream();
3 //通过字节数组的方式
4 byte[] byteArray = get("/lotto").asByteArray();
5 //字符串
6 String json = get("/lotto").asString();

通过上面的方式我们就可以获得整个响应内容,之前的文章中我们已经介绍过通过JsonPath和XMLPath的方式来获得响应体中的某个值或者某个list,这里就不再介绍这两种方式了,下面来介绍几种别的方式:

1.从已验证的响应体中获得值

  我们可以使用 extract 方法来从一个已经验证过的响应信息中提取某个值或者仅仅返回response本身的一个实例。这个方法是非常有用的,比如我们想将从响应信息中提取的值传递给后面的请求内容,就可以使用 extract 方法来实现。例如:下面的json会返回一个 title 的资源:

1  {
2      "title" : "My Title",
3       "_links": {
4               "self": { "href": "/title" },
5               "next": { "href": "/title?page=2" }
6            }
7  }

我们想验证上面的Json的内容类型(content-type)是否是Json,并且 title 的值是否等于 "My Title",然后我们还想提取 next 字段的值并且用于下面的请求,那么我们就可以这样:

 1 //断言验证,并且提取next的值,赋值给nextTitleLink
 2 String nextTitleLink =
 3 given().
 4         param("param_name", "param_value").
 5 when().
 6         get("/title").
 7 then().
 8         contentType(JSON).
 9         body("title", equalTo("My Title")).
10 extract().
11         path("_links.next.href");
12
13 //使用get方法获取nextTitleLink的值
14 get(nextTitleLink). ..

如果我们想获得多个值,我们也可以返回整个响应体(response):

 1 //返回整个响应体
 2 Response response =
 3 given().
 4         param("param_name", "param_value").
 5 when().
 6         get("/title").
 7 then().
 8         contentType(JSON).
 9         body("title", equalTo("My Title")).
10 extract().
11         response();
12 //取值
13 String nextTitleLink = response.path("_links.next.href");
14 String headerValue = response.header("headerName");

2.获取某个路径下的值

  如果只是想发起一个请求并且返回某个路径下的值,这里有一个简单的方法:

1 int lottoId = get("/lotto").path("lotto.lottoid");

  rest-assured会基于响应体的content-type自动决定是使用JsonPath还是使用XmlPath来解析响应数据,如果content-type没有被定义,rest-assured会尝试寻找默认的解析器。我们也可以通过设置手动决定使用哪一个解析器,可以选择的解析器有xmlPath、jsonPath以及htmlPath,比如:

1 String firstName = post("/greetXML?firstName=John&lastName=Doe").andReturn().xmlPath().getString("firstName");

3.获取头部、cookies以及状态等

  我们可以通过下面的方法来header、cookies以及status:

 1 Response response = get("/lotto");
 2
 3 // 获取所有的响应头信息
 4 Headers allHeaders = response.getHeaders();
 5 //获取指定头部的值
 6 String headerName = response.getHeader("headerName");
 7
 8 // 获取所有cookies
 9 Map<String, String> allCookies = response.getCookies();
10 // 获取指定cookie的值
11 String cookieValue = response.getCookie("cookieName");
12
13 // 获取状态行
14 String statusLine = response.getStatusLine();
15 // 获取状态码
16 int statusCode = response.getStatusCode();

4.多值headers和cookies

  同一个header和cookie可能会包含多个值

4.1 多值headers

  要获取同一个header的所有值,首先需要从 Response 对象中获得 Headers 对象,然后从 Headers 实例中通过 Headers.getValues() 方法可以获得所有的值(values),Header.getValues() 方法返回一个包含所有header值的List。

1 //首先获得 response 对象
2 Response response = get("/lotto");
3
4 //然后从response实例中获得headers对象
5 Headers headers  = response.getHeaders();
6
7 //最后从headers对象中获得包含所有cookies值的list
8 List<Object> values = headers.getValues();

4.2 多值cookies

  要获取同一个cookie的所有值,首先需要从 Response 对象中获得 cookies 对象,然后从 cookiess 实例中通过 cookies.getValues() 方法可以获得所有的值(values),cookies.getValues() 方法返回一个包含所有cookie值的List。

5.详细Cookies

  如果我们想要获得cookie的路径、过期时间等详细信息,那我们就需要从rest-assured中获得详细的cookie。我们可以使用 Response.getDetailedCookie(java.lang.String) 方法来获得详细的cookie,这个cookie就包含了cookie的所有属性。

  也可以使用  Response.getDetailedCookies() 方法获得所有cookie信息。

 1 //获得指定cookie名称的cookie对象
 2 Cookie cookie = response.getDetailedCookie("cookieName");
 3 //获得cookie的Domain值
 4 String domain = cookie.getDomain();
 5 //获得cookie的有效时间
 6 Date expiryDate =cookie.getExpiryDate();
 7 //获得cookie的最大存活时间
 8 int maxAge =cookie.getMaxAge();
 9 //获得cookie的名称
10 String name =cookie.getName();
11 //获得cookie的路径
12 String path =cookie.getPath();
1 //获得所有cookies的详细信息
2 Cookies cookies = response.getDetailedCookies();

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

时间: 2024-07-30 02:59:33

rest-assured之获取响应数据(Getting Response Data)的相关文章

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

前面的文章中已经介绍过了如果获得响应数据,接下来我们来介绍一下应该如何来验证这些获得的响应数据,比如验证状态码.状态行.cookies.header.content-type以及body体. 1.验证响应体(Response Body) 关于响应体的验证前面的JSON例子和XML例子中已经做过详细的介绍,这里就不再介绍了. 我们也可以使用映射来做,将响应体映射到一个java对象中,关于对象映射前面也已经介绍过了,这里就不再介绍了. 2.验证cookies 1 get("/x").the

在后台程序中发送http请求并获取响应数据

一,在后台程序中发送http请求获取响应数据 1)以 http://libs.baidu.com/jquery/2.0.0/jquery.min.js 为例 二, 1) String result=""; BufferedReader in = null; URL url = null; try { url = new URL("http://libs.baidu.com/jquery/2.0.0/jquery.min.js"); } catch (Malforme

使用httpClient调用接口获取响应数据

转自:https://blog.csdn.net/shuaishuaidewo/article/details/81136088 import lombok.extern.slf4j.Slf4j; import okhttp3.*; /** * 需要注入依赖 * <dependency> * <groupId>com.squareup.okhttp3</groupId> * <artifactId>okhttp</artifactId> * &l

jmeter获取响应数据中参数值的常用方式(JSON提取器 、正则表达式提取器 、XPath提取器 、Bean Shell PostProcessor)

JSON提取器: XPath提取器: 返回数据格式是HTML的时候,选择使用此种方式. 正则表达式提取器: 图中Field to check勾选的是Response Headers,获取的是请求头里的参数值. Bean Shell PostProcessor脚本获取方式: 原文地址:https://www.cnblogs.com/zeqi666/p/10245454.html

java后台发起get请求获取响应数据学习记录: 话不多说直接上代码

: package com.jl.chromeTest; import java.io.BufferedReader;import java.io.InputStreamReader;import java.net.HttpURLConnection;import java.net.URL;import java.net.URLConnection;import java.nio.charset.StandardCharsets; /** * get请求测试 * @author liujilon

httpclient获取响应实体和信息的封装方法(解耦更新)

转自:https://blog.csdn.net/fhaohaizi/article/details/77850302 2018年07月19日更新,主要是解耦之后方法很多地方发生了变化,httpclient用了连接池方式,作为一个静态变量处理,请求头和响应头以及cookies设置都有了相关处理方法,本来这个方法已经快超过100行了,解耦之后分成了几个小方法,方便修改和调试.分两部分,一部分是框架,只做了公共处理,另外一部分是每个项目的base类需要重新实现一些这个方法来处理header信息以及需

Jmeter正则提取请求响应数据

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

android 简单获取服务器数据

1.activity_main.xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent"

jQuery-1.9.1源码分析系列(十六)ajax——响应数据处理和api整理

ajax在得到请求响应后主要会做两个处理:获取响应数据和使用类型转化器转化数据 a.获取响应数据 获取响应数据是调用ajaxHandleResponses函数来处理. ajaxHandleResponses的功能有: - 为jqXHR设置所有responseXXX字段(值便是响应数据) - 找到正确的dataType (在content-type和预期的dataType两者中的一个) - 返回正确的响应数据 我们看一个响应数据的格式: responses = { text: "{"co