使用REST-Assured對API接口進行自動化測試


轉載:http://blog.csdn.net/u012050416/article/details/50674612

  1. 准備
  2. 目標
  3. 開始編碼
  4. 總結
 

  說明:本文只是一個getStart示例,關鍵在於讓自己(新手)能快速地對REST-Assured自動化測試有個大概的認識,下面開始。 
參考資料: 
使用 Rest-Assured 測試 REST API 
使用 REST-Assured 測試 REST API 的進階技巧和最佳實踐

1.准備

  1. eclipse、jdk、maven
  2. 新建好一個maven項目
  3. 下載並安裝RestClient客戶端

2.目標

  • 對豆瓣API進行自動化測試

3.開始編碼

1)修改pom.xml

        <dependency>
            <groupId>com.jayway.restassured</groupId>
            <artifactId>rest-assured</artifactId>
            <version>2.8.0</version> </dependency> <dependency> <groupId>org.hamcrest</groupId> <artifactId>hamcrest-core</artifactId> <version>1.3</version> </dependency>

2)查看豆瓣的開發者文檔 
  找到搜索圖書的API,顯示為GET https://api.douban.com/v2/book/:id 
那么只需要找到某個圖書的id替換URL中的:id即可。 
  為了測試需要,我們打開上面要求下載好的RestClient客戶端,輸入http://api.douban.com/v2/book/1220562,選擇訪問方法為GET,前往訪問,會獲得如下的Json返回信息:

{
    "rating": { "max": 10, "numRaters": 348, "average": "7.0", "min": 0 }, "subtitle": "", "author": [ "[日] 片山恭一" ], "pubdate": "2005-1", "tags": [ { "count": 136, "name": "片山恭一", "title": "片山恭一" }, { "count": 63, "name": "日本", "title": "日本" }, { "count": 61, "name": "日本文學", "title": "日本文學" }, { "count": 38, "name": "小說", "title": "小說" }, { "count": 32, "name": "滿月之夜白鯨現", "title": "滿月之夜白鯨現" }, { "count": 15, "name": "愛情", "title": "愛情" }, { "count": 8, "name": "純愛", "title": "純愛" }, { "count": 8, "name": "外國文學", "title": "外國文學" } ], "origin_title": "", "image": "http://img3.douban.com/mpic/s1747553.jpg", "binding": "平裝", "translator": [ "豫人" ], "catalog": " ", "pages": "180", "images": { "small": "http://img3.douban.com/spic/s1747553.jpg", "large": "http://img3.douban.com/lpic/s1747553.jpg", "medium": "http://img3.douban.com/mpic/s1747553.jpg" }, "alt": "http://book.douban.com/subject/1220562/", "id": "1220562", "publisher": "青島出版社", "isbn10": "7543632608", "isbn13": "9787543632608", "title": "滿月之夜白鯨現", "url": "http://api.douban.com/v2/book/1220562", "alt_title": "", "author_intro": "", "summary": "那一年,是聽莫扎特、釣鱸魚和家庭破裂的一年。說到家庭破裂,母親怪自己當初沒有找到好男人,父親則認為當時是被狐狸精迷住了眼,失常的是母親,但出問題的是父親……。", "price": "15.00元" }

  注意,RestClient返回的Json不太容易看得清楚,可以選擇Json在線轉換工具進行格式化。以上返回信息就是格式化后的。 
3)創建Java類取名為ExampleForDoubanAPI.java

import com.jayway.restassured.RestAssured; import com.jayway.restassured.response.ValidatableResponse; import static com.jayway.restassured.module.jsv.JsonSchemaValidator.matchesJsonSchemaInClasspath; import static com.jayway.restassured.RestAssured.*; import static org.hamcrest.Matchers.*; import org.junit.After; import org.junit.Before; import org.junit.Test; public class ExampleForDoubanAPI { @Before public void before() { RestAssured.baseURI = "http://api.douban.com/v2/book"; RestAssured.port = 80; } @Test //URL為http://api.douban.com/v2/book/1220562 //判斷Json中的返回信息title public void testGetBook() { get("/1220562").then().body("title", equalTo("滿月之夜白鯨現")); } @Test //URL為http://api.douban.com/v2/book/search?q=java8 //判斷Json中的返回信息關鍵字為“java8”的書本的數目 public void testSearchBook() { given().param("q", "java8").when().get("/search").then().body("count", equalTo(2)); } @Test //解析JSON public void testParseJson() { ValidatableResponse resp = get("/1220562").then(); //判斷返回Json數據的title resp.body("title", equalTo("滿月之夜白鯨現")); //判斷二級屬性rating.max的值 resp.body("rating.max", equalTo(10)); //調用數組的方法判斷數組的大小 resp.body("tags.size()", is(8)); //判斷數組第一個對象的值 resp.body("tags[0].name", equalTo("片山恭一")); //判斷數組中是否有該元素 resp.body("author", hasItems("[日] 片山恭一")); } @After public void after() { } }

  如上三個測試用例都可以運行成功。 
4)使用Json Schema驗證返回數據

  • 一個個參數的去驗證,測試用例會非常多,代碼也會很冗長。如果我們使用 Json schema 去驗證的話,就會大大減少用例和代碼數量。
  • Json schema 描述了 Json 的數據格式,是一種元數據,它非常簡單易讀。只要返回的Json符合Json Schema的要求,就可以通過測試。
  • 對於簡單的 Json 返回體,我們可以根據需求來自己創建 Json Schema,但是對於復雜的返回體,這個過程也挺累人的。為了方便起見,我可以用Json Schema 生成工具
  • 對於如上http://api.douban.com/v2/book/1220562返回的Json可以生成相應的Json Schema。此處略去。將它拷貝出來,放到新文件douban.json中去。
  • 將douban.json放到Maven工程的src/main/resources源文件夾下面即可。
  • 增加pom.xml中需要的jar包並在ExampleForDoubanAPI.java中增加測試用例。
        <dependency>
            <groupId>com.jayway.restassured</groupId>
            <artifactId>json-schema-validator</artifactId>
            <version>2.8.0</version> </dependency>
//使用Json Schema驗證返回數據 @Test public void testJsonScheme() { expect().statusCode(200).given().auth().preemptive().basic("", "") .headers("Accept", "application/JSON").when().get("http://api.douban.com/v2/book/1220562") .then().assertThat().body(matchesJsonSchemaInClasspath("douban.json")); }

  驗證可以測試成功。

4.總結

  API自動化測試總體來說要比UI自動化測試簡單一些,本例子中只是用GET方法進行簡單地測試介紹,還有更多的課題,比如PUT,POST,DELETE等方法的測試,還有需要在HTTP協議的header和body中增加參數,以及session,cookie等。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM