rest-assured的日誌使用介紹
在許多測試用例當中,為了幫助我們創建正確的斷言和發送正確的請求,打印出詳細的響應和請求數據是非常有用的。為此我們可以使用rest-assured提供的預定義過濾器或者使用其中的一些快捷方法。
一、請求日誌
從1.5版本開始,rest-assured支持請求在發送到服務器之前打印特定請求日誌的功能(通過使用RequestLoggingFilter過濾器的方式),這裏我們註意到在打印的日誌中HTTP Builder 和HTTP Client 會添加額外的頭部信息(header)。這個過濾器支持只記錄指定請求(RequestSpecification)的指定細節的日誌,換句話說,我們可以不關註RequestLoggingFilter過濾器記錄的實際發送到服務端的內容,因為在記錄完日誌之後,過濾器可能會修改請求(request)。如果想要記錄實際發送到服務端的內容,可以參考 HTTP Client logging docs 或者使用第三方工具,比如Wireshark。例子如下:
1 // 打印指定請求所有的請求細節日誌,包括請求參數、請求頭部以及請求體(body)等 2 given().log().all(). .. 3 //只打印請求參數日誌 4 given().log().params(). .. 5 //只打印請求體日誌 6 given().log().body(). .. 7 //只打印請求頭部日誌 8 given().log().headers(). .. 9 //只打印請求cookies 10 given().log().cookies(). .. 11 //只打印請求方法 12 given().log().method(). .. 13 //只打印請求路徑14 given().log().path(). ..
二、響應日誌
同樣rest-assured也支持響應體日誌的打印,比如:我們這裏打印除了狀態碼之外的所有響應體信息,我們可以這樣做:
1 get("/x").then().log().body() ..
上面的做法無論是否有異常錯誤發生響應體都會被打印,如果我們只想當異常錯誤發生時,才打印響應體信息,我們可以這樣做:
1 get("/x").then().log().ifError(). ..
同樣我們也可以打印出所有的響應體信息,包括狀態行(status line)、響應頭(header)、cookies:
1 get("/x").then().log().all(). ..
也可以只打印狀態行(status line)、響應頭(header)、cookies:
1 //只打印狀態行 2 get("/x").then().log().statusLine(). .. 3 //只打印響應頭 4 get("/x").then().log().headers(). .. 5 //只打印響應cookies 6 get("/x").then().log().cookies(). ..
我們也可以配置只有當響應狀態碼等於匹配某個值時,才打印響應信息:
1 //只有當響應狀態碼等於302時,才會打印響應信息 2 get("/x").then().log().ifStatusCodeIsEqualTo(302). .. 3 //只有當響應狀態碼匹配提供的Hamcrest matcher,才會打印響應信息 4 get("/x").then().log().ifStatusCodeMatches(matcher). ..
三、驗證失敗日誌
從rest-assured的2.3.1版本開始,rest-assured支持只有當驗證失敗時才打印請求信息或響應信息的功能。
當驗證失敗時,打印請求日誌,我們可以這樣做:
1 given().log().ifValidationFails(). ..
當驗證失敗時,打印響應日誌,我們可以這樣做:
1 get("/x").then().log().ifValidationFails(). ..
我們通過使用 LogConfig 可以做到同時啟用當驗證失敗時打印請求信息和響應信息:
1 given().config(RestAssured.config().logConfig(logConfig().enableLoggingOfRequestAndResponseIfValidationFails(HEADERS))). ..
上面的做法只會打印當驗證失敗時的請求頭部信息以及響應頭部信息(header)。
這裏還有一種針對 同時啟用當驗證失敗時打印請求信息和響應信息 的簡單方法:
1 RestAssured.enableLoggingOfRequestAndResponseIfValidationFails();
rest-assured的日誌使用介紹