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

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

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

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

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

  {
"title" : "My Title",
"_links": {
"self": { "href": "/title" },
"next": { "href": "/title?page=2" }
}
}

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

 //断言验证,并且提取next的值,赋值给nextTitleLink
String nextTitleLink =
given().
param("param_name", "param_value").
when().
get("/title").
then().
contentType(JSON).
body("title", equalTo("My Title")).
extract().
path("_links.next.href"); //使用get方法获取nextTitleLink的值
get(nextTitleLink). ..

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

 //返回整个响应体
Response response =
given().
param("param_name", "param_value").
when().
get("/title").
then().
contentType(JSON).
body("title", equalTo("My Title")).
extract().
response();
//取值
String nextTitleLink = response.path("_links.next.href");
String headerValue = response.header("headerName");

2.获取某个路径下的值

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

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

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

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

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

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

 Response response = get("/lotto");

 // 获取所有的响应头信息
Headers allHeaders = response.getHeaders();
//获取指定头部的值
String headerName = response.getHeader("headerName"); // 获取所有cookies
Map<String, String> allCookies = response.getCookies();
// 获取指定cookie的值
String cookieValue = response.getCookie("cookieName"); // 获取状态行
String statusLine = response.getStatusLine();
// 获取状态码
int statusCode = response.getStatusCode();

4.多值headers和cookies

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

4.1 多值headers

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

 //首先获得 response 对象
Response response = get("/lotto"); //然后从response实例中获得headers对象
Headers headers = response.getHeaders(); //最后从headers对象中获得包含所有cookies值的list
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信息。

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

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

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

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

  2. 使用Typescript重构axios(六)——实现基础功能:获取响应数据

    0. 系列文章 1.使用Typescript重构axios(一)--写在最前面 2.使用Typescript重构axios(二)--项目起手,跑通流程 3.使用Typescript重构axios(三) ...

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

    转自:https://blog.csdn.net/shuaishuaidewo/article/details/81136088 import lombok.extern.slf4j.Slf4j; i ...

  4. Java学习-055-Jsoup爬虫通过设置获取响应数据大小的最大值,解决因默认获取 1MB 响应数据导致的无法获取全部的响应数据内容问题

    在日常工作中,通常会遇到获取各种网络数据使用的情况,Java中可使用Jsoup(Python中可使用 BeatifulSoup)进行数据的获取及处理. 今天有朋友问,在使用 Jsoup 进行请求数据时 ...

  5. 获取响应数据___JSON Extractor 后置处理器

    对于大部分请求返回的结果,都是json,有一个更方便使用的插件:JSON Extractor 不过得首先下载插件 https://jmeter-plugins.org/wiki/JSONPathExt ...

  6. postman之将获取响应数据-创建环境变量,用于不同的接口调用

    应用场景: token的获取,用于不同接口的取值 在test中进行如下设置: var jd = pm.response.json(); var access_token = jd.access_tok ...

  7. Django 源码小剖: 响应数据 response 的返回

    响应数据的返回 在 WSGIHandler.__call__(self, environ, start_response) 方法调用了 WSGIHandler.get_response() 方法, 由 ...

  8. Android架构:用消息机制获取网络数据

    网络请求,不管是什么协议,是长连接还是短连接,总是一个异步的请求,过程包括:加请求参数->发起请求->接收响应->解析数据->获得业务数据. 最挫的做法是,业务代码包揽所有这些 ...

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

    转自:https://blog.csdn.net/fhaohaizi/article/details/77850302 2018年07月19日更新,主要是解耦之后方法很多地方发生了变化,httpcli ...

随机推荐

  1. 01.webservice介绍

    不实现异构,实现远程系统之间的调用.

  2. VMware设置及linux静态ip设置

    1.   VMWARE虚拟机NAT模式上网设置 1.1. VM虚拟机设置 1.1.1.   虚拟机全局设置 启动虚拟机选择[虚拟网络编辑器] 如果需要管理员权限点[更改设置],没有提示这忽略这一步 选 ...

  3. layer使用总结一配置

    导入layer.js文件即可,必须先导入jquery.js文件,因为layer是基于jquery 版本匹配,在此记录一下,layer使用1.8下载时是2.3的版本,对应的jquery使用1.8.3版本 ...

  4. Mask_RCNN caffe2

    cd DETECTRON/detectron/ python2 tools/infer_simple_ip_camera.py \    --cfg configs/12_2017_baselines ...

  5. PostgreSQL的索引选型

    PostgreSQL里面给全文检索或者模糊查询加索引提速的时候,一般会有两个选项,一个是GIST类型,一个是GIN类型,官网给出的参考如下: There are substantial perform ...

  6. C#冒泡排序和直接插入排序

    /// <summary>        /// 冒泡排序        /// </summary>        public static void Mainsdfdrt ...

  7. aspx页面上输出xml的问题

    在aspx页面上输出xml,需要在后台输出编码格式和编码类型,如下代码: Response.Charset = "utf-8";//格式Response.ContentType = ...

  8. elasticsearch plugin

    bin/plugin -install de.spinscale/elasticsearch-plugin-suggest/0.90.5-0.9 plugin -install mobz/elasti ...

  9. Oracle数据库之单表查询

    接着上一篇的分享,今天主要给大家分享的是关于数据中的单表查询,单表查询很基础,也很重要,但是任何一个初学者必须要掌握的姿势,单表查询就是对单个表进行操作,查询我们想要的数据.单表查询里面的内容也是比较 ...

  10. Linux 查看是64位还是32位

    [root@VM_7_88_centos ~]# uname -a Linux VM_7_88_centos 3.10.0-229.el7.x86_64 #1 SMP Fri Mar 6 11:36: ...