rest-assured : Restful API 測試利器 - 真正的黑盒單元測試(跟Spring-Boot更配哦,更新至spring-boot1.4.1)


{
  "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使用哪個端口來訪問
    }
}

 


免責聲明!

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



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