如今的服务器端应用,不管是企业的,仍是互联网的,多数最终都将服务以 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 的测试代码生成接口文档。测试