Java基于rest assured實(shí)現(xiàn)接口測(cè)試過(guò)程解析
背景
java程序員一般寫的是后端服務(wù)是JavaWeb類型的項(xiàng)目,主要包括Http接口和dubbo接口,Http接口一般采用的rest風(fēng)格,那么如何快速的對(duì)rest接口在第三方的測(cè)試框架上進(jìn)行測(cè)試呢?
rest-assured框架是一個(gè)不錯(cuò)的工具。
使用之前,需要熟悉一下最基礎(chǔ)的使用方法,在寫完幾個(gè)接口的測(cè)試用例之后,好比你可以使用你的三棱軍刺熟練的進(jìn)行基礎(chǔ)的攻擊了。
快速的來(lái)一個(gè)hello world吧!
假設(shè)你寫了一個(gè)接口:lotto,訪問(wèn)路徑是: 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] }] } }
如何快速的驗(yàn)證接口是否返回正常值呢?
get("/lotto").then().body("lotto.winners.winnerId", hasItems(23, 54));
使用簡(jiǎn)單吧!
引入
不多說(shuō),直接maven的方式引入:注意,我直接按照默認(rèn)的scope引入的,不是test;
主要引入以下2個(gè)依賴,原因如下:
rest-assured: 主要測(cè)試基本的http的rest風(fēng)格接口,這個(gè)是最基礎(chǔ)的依賴;
json-path: 主流的接口主要返回json,對(duì)接口進(jìn)行測(cè)試用例測(cè)試,主要也是判斷json返回某路徑下的數(shù)據(jù);
<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>
然后你就可以愉快的編寫測(cè)試用例,然后使用rest-assured進(jìn)行接口測(cè)試了。
使用要點(diǎn)
先上簡(jiǎn)單代碼吧!
先準(zhǔn)備測(cè)試數(shù)據(jù):
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()); }
做的事情很簡(jiǎn)單,就是拿一個(gè)登錄接口來(lái)實(shí)際的試一下:
login接口接受一個(gè)json的參數(shù),LoginRestReq對(duì)下轉(zhuǎn)換之后得到;
然后返回?cái)?shù)據(jù),數(shù)據(jù)中有一個(gè)用戶id,路徑是 data.id,如果id大于0,標(biāo)識(shí)登錄操作成功,登錄接口正常。
很好的完成了接口的測(cè)試,如果失敗,會(huì)拋出錯(cuò)誤,捕獲錯(cuò)誤,然后輸出信息,標(biāo)識(shí)測(cè)試用例不通過(guò),提示到界面或者發(fā)送郵件給到開發(fā)人員,即完成了接口的自動(dòng)化測(cè)試。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Java使用iTextPDF生成PDF文件的實(shí)現(xiàn)方法
這篇文章主要介紹了Java使用iTextPDF生成PDF文件的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-02-02Java對(duì)象集合按照指定元素順序排序的實(shí)現(xiàn)
最近在對(duì)一個(gè)集合列表的數(shù)據(jù)進(jìn)行排序,需求是要集合數(shù)據(jù)按照一個(gè)排序狀態(tài)值進(jìn)行排序,而這個(gè)狀態(tài)值,不是按照從小到大這樣的順序排序的,而是要按照特定的順序,所以本文給大家介紹了Java對(duì)象集合按照指定元素順序排序的實(shí)現(xiàn),需要的朋友可以參考下2024-07-07使用Shiro實(shí)現(xiàn)登錄成功后跳轉(zhuǎn)到之前的頁(yè)面
這篇文章主要介紹了如何使用Shiro實(shí)現(xiàn)不同用戶登錄成功后跳轉(zhuǎn)到不同主頁(yè),實(shí)現(xiàn)此功能目前比較好的方法是用ajax的方法登錄,第二種方法是把用戶未登錄前的url存在session中,需要的朋友可以參考下2015-07-07java對(duì)象類型轉(zhuǎn)換和多態(tài)性(實(shí)例講解)
下面小編就為大家?guī)?lái)一篇java對(duì)象類型轉(zhuǎn)換和多態(tài)性(實(shí)例講解)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-10-10MyBatis查詢數(shù)據(jù),賦值給List集合時(shí),數(shù)據(jù)缺少的問(wèn)題及解決
這篇文章主要介紹了MyBatis查詢數(shù)據(jù),賦值給List集合時(shí),數(shù)據(jù)缺少的問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-01-01SpringBoot使用自定義注解+AOP+Redis實(shí)現(xiàn)接口限流的實(shí)例代碼
這篇文章主要介紹了SpringBoot使用自定義注解+AOP+Redis實(shí)現(xiàn)接口限流,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-09-09SpringMVC中@RequestMapping注解用法實(shí)例
通過(guò)@RequestMapping注解可以定義不同的處理器映射規(guī)則,下面這篇文章主要給大家介紹了關(guān)于SpringMVC中@RequestMapping注解用法的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-06-06