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 ...
随机推荐
- 算法技巧讲解》关于对于递推形DP的前缀和优化
这是在2016在长沙集训的第三天,一位学长讲解了“前缀和优化”这一技巧,并且他这一方法用的很6,个人觉得很有学习的必要. 这一技巧能使线性递推形DP的速度有着飞跃性的提升,从O(N2)优化到O(N)也 ...
- 使用Dom4j操作XML数据
--------------siwuxie095 dom4j 是一个非常优秀的 Java XML 的 API, 用来读写 XML 文件 和操作 ...
- SpringBoot26 RestTemplate、WebClient
1 RestTemplate RestTemplate是在客户端访问 Restful 服务的一个核心类:RestTemplate通过提供回调方法和允许配置信息转换器来实现个性化定制RestTempla ...
- Redis01 Redis服务端环境搭建
1 前提准备 下载 VM centos6 安装包,安装好虚拟系统 2 安装远程连接工具 工具获取 2.1 SecureCRT.Xshell 连接远程服务器 2.2 WinSCP 向远程服务器发送文件 ...
- Android Studio 编译提示 No installed build tools found. Please install the Android build tools
添加 ANDROID_HOME=D:\Android\adt-bundle-windows\sdk 系统变量即可
- Ubuntu14.04下安装glog
下载原始代码编译 1. Clone Source Code glog git clone https://github.com/google/glog 2. Install dependencies ...
- TreeView的绑定与读取
/// <summary> /// 绑定TreeView /// </summary> public void BindTreeVie ...
- Oracle数据库管理
一.Oracle 的(资源限制)概要文件 为了控制系统资源的使用, 可以利用资源限制概要文件. 资源限制概要文件是 Oracle 安全策略的重要组成部分, 利用资源限制概要文件可以对数据库用户进行基本 ...
- 事物处理service层的方法
package cn.lijun.service; import java.sql.Connection;import java.sql.SQLException; import cn.lijun.d ...
- App测试从入门到精通之安装、卸载和运行测试
关于手机App测试需要说的点有很多.目前市场上主要的APP测试主要是针对的是安卓.和苹果两大主流操作系统.主要考虑的就是功能性.兼容性.稳定性.性能测试等.我们看下App的安装和卸载有哪些常用的场景: ...