Rest-Assured 是一個測試 Restful Web Service 的 Java 類庫,我們能夠測試各種各樣的請求組合,依次測試核心業務邏輯的不同組合。
它是通過發送特定的rest api,通過服務器返回的HTTP響應,來做功能性測試。
REST API的概念
REST API就是符合REST風格,要了解REST API首先需要弄清楚REST風格的具體含義。REST的全稱是Representational State Transfer,中文是表述性狀態轉移,這個是什么意思等會再解釋,先說明為什么會出現REST,以及它對整個網絡服務API發展的重要性。
在互聯網服務剛剛起步的時候,網頁大部分是靜態的,用戶與服務器之間的交互比較少,但是隨着動態網頁的發展,操作的種類也越來越繁復,接口冗余且復雜,開發難度大大提升,擴展困難,而且網絡traffic的負擔也增大了。針對這些問題,2000年一篇論文提出了REST這個設計理念。REST的宗旨是從資源的角度來觀察整個網絡,分布在各處的資源由URI確定,而客戶端的應用通過URI來獲取資源的表征。REST與平台、語言等均無關,但是目前僅有HTTP是REST的實現案例。
REST使用URL來定位資源,通過HTTP動作來表述操作,如
GET:http://www.TEST.com/users/user
POST:http://www.TEST.com/users
HTTP動作常用的是PUT、POST、GET和DELETE,分別對應着對資源的更新、插入、獲取和刪除操作。數據是保存在Headers中傳輸的,其中PUT還有數據在Body中傳輸。
REST是無狀態的,即前一次的動作對后一次的動作是沒有影響的,在HTTP應用中,無狀態即不能使用Session。
REST-Assured實例
通過Maven引入:
<dependency>
<groupId>io.rest-assured</groupId>
<artifactId>rest-assured</artifactId>
<version>3.0.0</version>
<scope>test</scope>
</dependency>
通過HTTP動作獲得請求,在對請求進行斷言判斷,來完成一系列集成測試。例如:
RestAssured.requestSpecification =
new RequestSpecBuilder().addHeaders(“token”,”xxx”).build();
通過given()設置HTTP動作和附帶的參數,例如:
given().contentType("application/json")
.pathParam("organizationId",orgId)
.body(data)
.when().post("/v1/organizations/{organizationId}/users");
傳入鍵值對通常使用map傳遞,可以通過工具類轉換成json等格式,如JSON.toJSONString(map)。
每一次完成后需要RestAssured.reset();來重置狀態,避免影響其它的測試用例。
對於返回的response的內容,比如對body中的數據進行驗證,可以使用body("id", equalTo(2)),或者使用包裝好的Assert方法進行驗證。
剛剛學習這方面的知識,內容可能有錯誤,希望在以后的學習中,逐漸完善自己的知識,並且不斷改進。