zoukankan      html  css  js  c++  java
  • 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();
  • 相关阅读:
    KVO的用法、底层实现原理
    Runtime应用(三)实现NSCoding的自动归档和自动解档
    Runtime应用(二)使用对象关联为分类增加属性(每个对象的属性互不干扰)
    Runtime 应用(一)拦截系统自带的方法交换实现
    iOS实现传递不定长的多个参数
    Runtime 中的 _cmd、 IMP
    UIWebView、WKWebView使用详解及性能分析
    iOS
    基本图形生成算法
    关于动画中帧的解释
  • 原文地址:https://www.cnblogs.com/lwjnicole/p/8289119.html
Copyright © 2011-2022 走看看