如今的服務器端應用,不管是企業的,仍是互聯網的,多數最終都將服務以 REST 服務,或者以自定義的 HTTP 服務的形式暴露出來。因此,這些項目的自動化測試也都是圍繞這些接口展開的。java
早先咱們經常使用 SoapUI 這樣的工具測試接口,但隨着輕量的 REST 接口的流行,SoapUI 這樣笨重的,基於圖形界面的工具顯得愈來愈很差用了。git
自動化測試歸根結底也是一個程序,因此好的代碼纔是王道。對於測試代碼來講,簡單清晰是最重要的。因此,對於 REST 或其它 HTTP 接口的測試代碼來講,一個簡單好用的,能調用 HTTP 接口,同時能驗證結果的類庫框架是十分重要的。github
rest-assured 即是一個優秀的選擇。早先曾被 SoapUI 糟糕的用戶體驗搞的焦頭爛額的我不經意間發現 rest-assured 時有如清風徐面。廢話很少說,看一下代碼json
import static io.restassured.RestAssured.get; import static io.restassured.path.json.JsonPath.from; import static org.hamcrest.CoreMatchers.containsString; import static org.hamcrest.CoreMatchers.is; import static org.junit.Assert.assertThat; public class DemoTest { public static final String API = "http://xxxxx"; @Test public void demo() throws Exception { get(API) .then() .assertThat() .body(containsString("hello")); String jsonBody = get(API) .andReturn() .body() .asString(); assertThat(from(jsonBody).get("data.list[0].value"), is("world")); } }
上面的接口,返回值什麼的打了些碼,可是不影響代碼理解。數組
寫了兩個 case,第一個其實只是驗證 API 對應的接口的返回值裏帶有 "hello" 字符串。服務器
第二個case使用了 JSON Path,驗證返回的 JSON 中的 data 字段中的 list 數組中的第一個元素的 value 字段等於 world。框架
更多的使用方式就參照 https://github.com/rest-assured/rest-assured 吧工具
BTW,從 1.1.0 版本開始,Spring REST Docs 能夠根據 rest-assured 的測試代碼生成接口文檔。測試