背景 java程式員一般寫的是後端服務是JavaWeb類型的項目,主要包括Http介面和dubbo介面,Http介面一般採用的rest風格,那麼如何快速的對rest介面在第三方的測試框架上進行測試呢? rest assured框架是一個不錯的工具。好比軍人的三棱軍刺,如上圖。 使用之前,需要熟悉一下 ...
背景
java程式員一般寫的是後端服務是JavaWeb類型的項目,主要包括Http介面和dubbo介面,Http介面一般採用的rest風格,那麼如何快速的對rest介面在第三方的測試框架上進行測試呢?
rest-assured框架是一個不錯的工具。好比軍人的三棱軍刺,如上圖。
使用之前,需要熟悉一下最基礎的使用方法,在寫完幾個介面的測試用例之後,好比你可以使用你的三棱軍刺熟練的進行基礎的攻擊了。
快速的來一個hello world吧!
假設你寫了一個介面:lotto,訪問路徑是: http://localhost:8080/lotto
介面返回值是:
{
"lotto":{
"lottoId":5,
"winning-numbers":[2,45,34,23,7,5,3],
"winners":[{
"winnerId":23,
"numbers":[2,45,34,23,3,5]
},{
"winnerId":54,
"numbers":[52,3,12,11,18,22]
}]
}
}
如何快速的驗證介面是否返回正常值呢?
get("/lotto").then().body("lotto.winners.winnerId", hasItems(23, 54));
使用簡單吧!
引入
不多說,直接maven的方式引入:註意,我直接按照預設的scope引入的,不是test;
主要引入以下2個依賴,原因如下:
rest-assured: 主要測試基本的http的rest風格介面,這個是最基礎的依賴;
json-path: 主流的介面主要返回json,對介面進行測試用例測試,主要也是判斷json返回某路徑下的數據;
<dependency>
<groupId>io.rest-assured</groupId>
<artifactId>rest-assured</artifactId>
<version>4.2.0</version>
</dependency>
<dependency>
<groupId>io.rest-assured</groupId>
<artifactId>json-path</artifactId>
<version>4.2.0</version>
</dependency>
然後你就可以愉快的編寫測試用例,然後使用rest-assured進行介面測試了。
使用要點
先上簡單代碼吧!
先準備測試數據:
final TestCaseDataModel<LoginRestReq> testCaseDataModel = new TestCaseDataModel<>();
final LoginRestReq loginRestReq = LoginRestReq.builder()
.appId("2a6bf452219cfe44c7f78231e3c80a13072b6727")
.nonce("123456")
.timestamp(System.currentTimeMillis())
.userId("lxlifuchun")
.userName("李福春")
.build();
String appSecret = "91e47f584dae551170ade272b2c7a69f";
loginRestReq.setChecksum(SignUtils.generateCheckSum(loginRestReq.getAppId(), appSecret, loginRestReq.getTimestamp(), loginRestReq.getNonce()));
testCaseDataModel.setInputParam(loginRestReq);
ExpectModel expectModel = new ExpectModel();
expectModel.setPath("data.id");
expectModel.setMatcher(Matchers.lessThan(0));
testCaseDataModel.setExpectResult(Arrays.asList(expectModel));
RestAssured.baseURI = "https://rest-beta.xxx.com";
final ValidatableResponse validatableResponse = given().contentType(ContentType.JSON)
.header("requestId", UUID.randomUUID().toString())
.body(testCaseData.getInputParam()).
post("/user_service/user/login")
.then().contentType(ContentType.JSON);
for (Object obj : testCaseData.getExpectResult()) {
ExpectModel item = (ExpectModel) obj;
validatableResponse.body(item.getPath(), item.getMatcher());
}
做的事情很簡單,就是拿一個登錄介面來實際的試一下:
login介面接受一個json的參數,LoginRestReq對下轉換之後得到;
然後返回數據,數據中有一個用戶id,路徑是 data.id,如果id大於0,標識登錄操作成功,登錄介面正常。
很好的完成了介面的測試,如果失敗,會拋出錯誤,捕獲錯誤,然後輸出信息,標識測試用例不通過,提示到界面或者發送郵件給到開發人員,即完成了介面的自動化測試。
小結
簡單的使用了工具rest-assured完成了介面測試,實在是一個很好用的工具。最近工作太忙,沒法輸出內容豐富的文章,發一篇短小的文章吧!希望可以幫到你! 原創不易,轉載請註明出處。