{ "Author":"tomcat and jerry", "URL" :"http://www.cnblogs.com/tomcatandjerry/p/5885028.html" }
這里先貼一下IBM上的介紹
http://www.ibm.com/developerworks/cn/java/j-lo-rest-assured/index.html
Java 程序員常常借助於 JUnit 來測試自己的 REST API,不,應該這樣說,Java 程序員常常借助於 JUnit 來測試 REST API 的實現!從某種角度來說,這是一種“白盒測試”,Java 程序員清楚地知道正在測試的是哪個類、哪個方法,而不是從用戶的角度出發,測試的是哪個 REST API。
不廢話,直接給Spring-Boot項目配置:
import static com.jayway.restassured.RestAssured.given; import org.apache.logging.log4j.LogManager; import org.hamcrest.Matcher; import org.junit.After; import org.mockito.internal.matchers.Equals; import org.mockito.internal.matchers.GreaterThan; import org.mockito.internal.matchers.NotNull; import org.mockito.internal.matchers.Null; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.jayway.restassured.matcher.ResponseAwareMatcher; import com.jayway.restassured.response.Response; import com.jayway.restassured.response.ValidatableResponse; @RunWith(SpringJUnit4ClassRunner.class) //1. @SpringApplicationConfiguration(classes = YourApp.class) // 2.SpringBoot入口類 @WebIntegrationTest("server.port:0") // 3: server.port:0 > 指定服務器端口,為0表示隨機端口 public class YourControllerTest{ @Value("${local.server.port}") //4 int port; @Before public void doBefore(){ RestAssured.port = port; } @Test public void firstTest(){ JSONObject parm = new JSONObject(); parm.put("userId", "your id"); parm.put("name", "your name"); ValidatableResponse response = given().contentType("application/json") .request().body(parm.toJSONString()) .when().post("/your/restful/api") .then() .body("return_code", new ResponseAwareMatcher<Response>() { @Override public Matcher<?> matcher(Response response) throws Exception { System.out.println(response.prettyPrint());//獲取返回的json數據(1),舉例:{"return_code":0,"return_msg":"success"} return new Equals(0); } }) .body("return_code",new Equals(0)); ; JSONObject json = JSONObject.parseObject(response.extract().asString());//獲取返回的json數據(2) //自己寫一些代碼 } }
pom.xml引入jar
<dependency> <groupId>com.jayway.restassured</groupId> <artifactId>rest-assured</artifactId> <version>2.3.3</version> <scope>test</scope> </dependency>
該測試工具跟Spring-Boot簡直絕配,跑測試用例時,會啟動SpringBoot(你配置的YourApp.java),等啟動完成,會跑testcase,最后會關閉服務器。
真正的黑盒+單元測試,讓restful API更高質量。
Spring-boot 更新到1.4.1
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.4.1.RELEASE</version> </parent>
@RunWith(SpringJUnit4ClassRunner.class) //1. @SpringBootTest(classes = Application.class, webEnvironment=WebEnvironment.RANDOM_PORT ) // 2.SpringBoot入口類,配置起server隨機端口 public class RestTest { @Value("${local.server.port}") //3 int port; @Before public void doBefore(){ RestAssured.port = port;//4: 告訴restAssured使用哪個端口來訪問 } }