rest-assured之获取响应数据(Getting Response Data)
我們使用rest-assured可以獲得響應(yīng)內(nèi)容,比如:我們發(fā)起一個get請求 get("/lotto") 并且獲得響應(yīng)內(nèi)容,我們有多種方式可以實現(xiàn):
?
1 // 通過流的方式獲得響應(yīng)內(nèi)容,在使用完流之后千萬不能忘記關(guān)閉流 2 InputStream stream = get("/lotto").asInputStream(); 3 //通過字節(jié)數(shù)組的方式 4 byte[] byteArray = get("/lotto").asByteArray(); 5 //字符串 6 String json = get("/lotto").asString();?
通過上面的方式我們就可以獲得整個響應(yīng)內(nèi)容,之前的文章中我們已經(jīng)介紹過通過JsonPath和XMLPath的方式來獲得響應(yīng)體中的某個值或者某個list,這里就不再介紹這兩種方式了,下面來介紹幾種別的方式:
1.從已驗證的響應(yīng)體中獲得值
我們可以使用 extract 方法來從一個已經(jīng)驗證過的響應(yīng)信息中提取某個值或者僅僅返回response本身的一個實例。這個方法是非常有用的,比如我們想將從響應(yīng)信息中提取的值傳遞給后面的請求內(nèi)容,就可以使用?extract?方法來實現(xiàn)。例如:下面的json會返回一個 title 的資源:
1 { 2 "title" : "My Title", 3 "_links": { 4 "self": { "href": "/title" }, 5 "next": { "href": "/title?page=2" } 6 } 7 }我們想驗證上面的Json的內(nèi)容類型(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). ..如果我們想獲得多個值,我們也可以返回整個響應(yīng)體(response):
1 //返回整個響應(yīng)體 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.獲取某個路徑下的值
如果只是想發(fā)起一個請求并且返回某個路徑下的值,這里有一個簡單的方法:
1 int lottoId = get("/lotto").path("lotto.lottoid");rest-assured會基于響應(yīng)體的content-type自動決定是使用JsonPath還是使用XmlPath來解析響應(yīng)數(shù)據(jù),如果content-type沒有被定義,rest-assured會嘗試尋找默認的解析器。我們也可以通過設(shè)置手動決定使用哪一個解析器,可以選擇的解析器有xmlPath、jsonPath以及htmlPath,比如:
1 String firstName = post("/greetXML?firstName=John&lastName=Doe").andReturn().xmlPath().getString("firstName");3.獲取頭部、cookies以及狀態(tài)等
我們可以通過下面的方法來header、cookies以及status:
1 Response response = get("/lotto"); 2 3 // 獲取所有的響應(yīng)頭信息 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 // 獲取狀態(tài)行 14 String statusLine = response.getStatusLine(); 15 // 獲取狀態(tài)碼 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();?
轉(zhuǎn)載于:https://www.cnblogs.com/lwjnicole/p/8289119.html
新人創(chuàng)作打卡挑戰(zhàn)賽發(fā)博客就能抽獎!定制產(chǎn)品紅包拿不停!總結(jié)
以上是生活随笔為你收集整理的rest-assured之获取响应数据(Getting Response Data)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 招兵买马,韩国现代将前GM研究员招致麾下
- 下一篇: 融合