我们使用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

rest-assured之获取响应数据(Getting Response Data)相关推荐

  1. java 请求url 返回数据_java后台发起get请求获取响应数据|chu

    本文实例为大家分享了java后台发起get请求获取响应数据,供大家参考,具体内容如下 学习记录: 话不多说直接上代码: package com.jl.chromeTest; import java.i ...

  2. java实现socket连接,向指定主机指定端口发送socket数据,并获取响应数据

    全栈工程师开发手册 (作者:栾鹏) java教程全解 java实现socket连接,向指定主机指定端口发送socket数据,并获取响应数据 测试代码 public static void main(S ...

  3. java获取response数据_Java中实现Http请求并获取响应数据

    前言 在演示的功能代码中使用的请求http地址为:http://timor.tech/api/holiday/year/ 接口说明:获取指定年份或年月份的所有节假日信息.默认返回当前年份的所有信息. ...

  4. Response设置响应数据、Response完成重定向(对比 forword)、路径问题、Response响应字符数据、Response响应字节数据

    文章目录 Response Response 设置响应数据功能介绍 Response 完成重定向 与请求转发(forword)对比 路径问题 Response 响应字符数据 Response 响应字节 ...

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

    : package com.jl.chromeTest; import java.io.BufferedReader; import java.io.InputStreamReader; import ...

  6. Java工具类:HttpUtil(HttpClient实现http的请求,获取响应)

    (1)maven 依赖: <!-- HttpClinet 核心包 --> <dependency><groupId>org.apache.httpcomponent ...

  7. 网络编程(发送get和post请求到服务器端,并获取响应)

    一:B/S结构,浏览器端到服务器端通信依赖http协议 交互过程: 1:在浏览器地址栏输入http://ip:port/应用/资源路径 2:浏览器根据ip和服务器建立连接,port确定和那个应用进行交 ...

  8. python获取评论数据

    这次的案例实现的过程跟某条的差不多,因为两个案例有很多共同之处,如果想爬取某条评论的,又找不到思路,希望可以通过这个案例给大家一点小小的启发. 一.分析网页 我们需要爬取的就是图片箭头这些新闻数据,可 ...

  9. 无法从套接字中获取更多数据_数据科学中应引起更多关注的一个组成部分

    无法从套接字中获取更多数据 介绍 (Introduction) Data science, machine learning, artificial intelligence, those terms ...

最新文章

  1. MVC项目开发中那些用到的知识点(登录权限认证)
  2. Python技术分享:内置数据结构之双向队列
  3. 【水】对于算法的个人理解
  4. 推荐实践:结对Review
  5. 数据库下午怎么插入_数据库性能调优大全(附某大型医院真实案例)
  6. JS编写全选,复选按钮
  7. OpenCV基础(18)使用 OpenCV 和 Python 进行自动色彩校正
  8. 达梦数据库DCA培训总结
  9. python绘制彩色地震剖面断层解释_地震剖面上的断层分析及相关意义
  10. python更改pip源地址
  11. 41.朴素贝叶斯Naive Bayes公式推导与理解+求解公园凉鞋问题(借助文氏图)
  12. 利用python实现微信自动回复群发等操作(不需要登录网页版微信)
  13. Reason: Cannot pass null or empty values to constructor in spring security
  14. MySQL - 对数据表进行“增删查改”的基础操作 - 细节狂魔
  15. 玩转群晖NAS套件系列四:Audio Station安装使用保姆级教程!
  16. 现有一列表 ls = [‘the lord of the rings’,‘anaconda’,‘legally blonde’,‘gone with the wind’]
  17. 正确打开/解读Logit模型系数的方式——离散选择模型之四
  18. 学习自旋电子学的笔记01:微磁模拟软件OOMMF的教程(中文版)17-17.3章
  19. 微博轻量级RPC框架Motan
  20. 常见国产计算机软件有哪些,8款鲜为人知的良心国产软件,实用且强大,个个堪称国货之光...

热门文章

  1. LeetCode 47 全排列 II
  2. 剑指 Offer 10- I. 斐波那契数列/剑指 Offer 10- II. 青蛙跳台阶问题
  3. XSS挑战之旅平台通关练习(1-20)
  4. Web完整渗透测试实例(windows)
  5. jQuery中的跨域问题
  6. redis配置文件参数详解
  7. Python_爬虫_案例汇总:
  8. pymssql.OperationalError: (20017 问题解决
  9. 非替换元素和替换元素
  10. 什么是数字孪生?有哪些关键技术?现在怎么样了?