1. 程式人生 > 程式設計 >Java基於rest assured實現介面測試過程解析

Java基於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,3,5]
 },{
  "winnerId":54,"numbers":[52,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,標識登入操作成功,登入介面正常。

很好的完成了介面的測試,如果失敗,會丟擲錯誤,捕獲錯誤,然後輸出資訊,標識測試用例不通過,提示到介面或者傳送郵件給到開發人員,即完成了介面的自動化測試。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。