rest-assured之获取响应数据(Getting Response Data)
我们使用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)的更多相关文章
- rest-assured之验证响应数据(Verifying Response Data)
前面的文章中已经介绍过了如果获得响应数据,接下来我们来介绍一下应该如何来验证这些获得的响应数据,比如验证状态码.状态行.cookies.header.content-type以及body体. 1.验证 ...
- 使用Typescript重构axios(六)——实现基础功能:获取响应数据
0. 系列文章 1.使用Typescript重构axios(一)--写在最前面 2.使用Typescript重构axios(二)--项目起手,跑通流程 3.使用Typescript重构axios(三) ...
- 使用httpClient调用接口获取响应数据
转自:https://blog.csdn.net/shuaishuaidewo/article/details/81136088 import lombok.extern.slf4j.Slf4j; i ...
- Java学习-055-Jsoup爬虫通过设置获取响应数据大小的最大值,解决因默认获取 1MB 响应数据导致的无法获取全部的响应数据内容问题
在日常工作中,通常会遇到获取各种网络数据使用的情况,Java中可使用Jsoup(Python中可使用 BeatifulSoup)进行数据的获取及处理. 今天有朋友问,在使用 Jsoup 进行请求数据时 ...
- 获取响应数据___JSON Extractor 后置处理器
对于大部分请求返回的结果,都是json,有一个更方便使用的插件:JSON Extractor 不过得首先下载插件 https://jmeter-plugins.org/wiki/JSONPathExt ...
- postman之将获取响应数据-创建环境变量,用于不同的接口调用
应用场景: token的获取,用于不同接口的取值 在test中进行如下设置: var jd = pm.response.json(); var access_token = jd.access_tok ...
- Django 源码小剖: 响应数据 response 的返回
响应数据的返回 在 WSGIHandler.__call__(self, environ, start_response) 方法调用了 WSGIHandler.get_response() 方法, 由 ...
- Android架构:用消息机制获取网络数据
网络请求,不管是什么协议,是长连接还是短连接,总是一个异步的请求,过程包括:加请求参数->发起请求->接收响应->解析数据->获得业务数据. 最挫的做法是,业务代码包揽所有这些 ...
- httpclient获取响应实体和信息的封装方法(解耦更新)
转自:https://blog.csdn.net/fhaohaizi/article/details/77850302 2018年07月19日更新,主要是解耦之后方法很多地方发生了变化,httpcli ...
随机推荐
- 图的第k短路
[问题描述] 给你一个有向图,求从1到n的第k短路. [解法] SPFA+A*搜索. 1 A*算法 A*算法在人工智能中是一种典型的启发式搜索算法,启发中的估价是用估价函数表示的: h(n)=f(n) ...
- 卡尔曼滤波总结——KF、EFK、UKF
1.用途 现实是我们的处理和测量模型都是非线性的,结果就是一个不规则分布,KF能够使用的前提就是所处理的状态是满足高斯分布的,为了解决这个问题,EKF是寻找一个线性函数来近似这个非线性函数,而UKF就 ...
- PCL 平面模型分割
点云操作中,平面的分割是经常遇到的问题,下面的例子就是如何利用PCL库提拟合出的参数,之后就可以过滤掉在平面附近的点云. #include <iostream> #include < ...
- Linux extundelete命令
一.简介 extundelete的文件恢复工具,支持ext3/ext4双格式分区恢复. 二.安装 yum install -y e2fsprogs* e2fslibs* wget http://nch ...
- pandas 中的 多条件分割, list 排序
main_comment_num_3m and avg_group_order_cnt_12m = 0.863230main_comment_score_1m and avg_group_order_ ...
- 【原创测试】MongoDB千万级插入数据测试(MMO在线游戏应用场合)
一.筹备 我们要做一次千万级的MONGODB测试,操作系统选用CentOS 5.5 64位版,基本模拟实际的使用环境,采用单机集群模型(测试单机多CPU情况下的实际效果). 测试基准数据: 服务器配置 ...
- 半平面交 (poj 1279(第一道半平面NlogN)完整注释 )
半平面交的O(nlogn)算法(转载) 求n个半平面的交有三种做法: 第一种就是用每个平面去切割已有的凸多边形,复杂度O(n^2). 第二种就是传说中的分治算法.将n个半平面分成两个部分,分别求完交之 ...
- 列表推导式对比For循环执行效率
我们在前面的学习中都知道,如果把1-10以内的元素追加到一个新的列表表中,如果使用for循环我们可以这么做: a = [] for i in range(1,11): a.append(i) prin ...
- MySQL事务隔离级别测试实例
https://www.cnblogs.com/huanongying/p/7021555.html MySQL事务隔离级别 事务隔离级别 脏读 不可重复读 幻读 读未提交(read-uncommit ...
- Insus.NET最近想更换一部手机
Insus.NET曾经使用过好几部手机.给Insus.NET工作与生活上带来了方便.最近想更换一部新手机,因此记念一下以前使用过的手机.当时Insus.NET没有相机,下面图片是网上找的(前四部): ...