1. 程式人生 > >Rest-Assured介面自動化測試簡單筆記

Rest-Assured介面自動化測試簡單筆記

介面自動化測試

1.準備工作:

IntelliJ IDEA  JDK 1.8.0  

Json格式化工具: 瀏覽器chrome安裝JSONHandler

Java+maven+TestNG+junit+rest-assured

抓包charles

請求工具:postman

2.為什麼要進行介面測試?

介面測試主要用於檢測外部系統與系統之間以及內部各個子系統之間的互動點。測試的重點是要檢查資料的交換,傳遞和控制管理過程,以及系統間的相互邏輯依賴關係等介面測試相對容易實現自動化持續整合,且相對UI自動化也比較穩定,可以減少人工迴歸測試人力成本與時間,縮短測試周期,支援後端快速發版需求

3.測試流程

a.需求分析

b.根據需求梳理介面測試點(評估測試周期)

c.檢查服務端介面入參和實參是否缺少引數(如果不正確需要服務端矯正)

d.進行介面測試(實際驗證點1.介面的業務邏輯json解析,2.return code 3.message 4.欄位型別 5.包裝介面呼叫業務方源介面資料正確性)(自動化灰盒指令碼)

e.介面測試報告輸出)

4.介面自動化目前試用的場景

   1)測試前置、開發自測:一個新的自動化介面測試案例開發完成後,直接發給介面對應的開發,安排在開發本地環境執行,一旦開發確認完成介面開發,就開始執行介面測試案例,基本上可以實時拿到測試結果,方便開發快速做出判斷

 2)迴歸測試:開發本地測試通過後,或整個需求手工測試通過後,把自動化的介面測試案例做分類整理,挑選出需要納入到迴歸測試中的案例,在持續整合環境重新準備測試資料,並把案例納入到持續整合的

job中來,這些用於迴歸的介面測試案例需要配置到持續整合平臺自動執行tesNGt報告已釘釘方式通知

5.搭建環境

1首先安裝JDK 1.6以上,intellij IDEA,建立Maven工程New->NewProject->Maven->

  勾選create from archetype

輸入專案名稱下一步下一步完成如下圖所示,一個完整的maven專案如圖所示目錄結構!

接下需要project配置File->project Structure


Modeules匯入專案模組:import modeules-選擇專案pom.xml

Libraries匯入maven jar包

artifact是一個

工具包:web application exploded->form module

6.開啟第一個rest-assuredDemo實現之前我們先了解一下rest-assured方法

a.response常用方法:

response.asString()--獲取請求返回內容體

response.response.getContentType()--獲取響應的內容型別

response.getStatusCode()--獲取響應的狀態程式碼

response.getHeaders()--獲取所有響應頭資訊

response.getHeader(String name)-- 根據指定的header名稱,獲取對應的響應資訊

response.getCookie(String name)-- 根據指定的cookie名稱,獲取對應cookie的值

response.getCookies()--獲取所有cookies資訊

response.getTime()--響應時間(單位:毫秒)

b.獲取節點一些節點驗證方法:

1.response.then().body("returncode",equalTo(0));--return code是否等於0

2.response.getBody().prettyPrint();//格式化列印JSON資料

3.given().param("p1","0").param("p2","1").get("www.baidu.com");-URL引數(拼接www.baidu.com/p1=0&p2=1);

4.when().get("www.baidu.com/p1=0&p2=1").then().time(lessThan(100L),TimeUnit.MILLISECONDS);//判斷響應時間是否少於預期值。

5.assured斷言資料處理:get("/lotto").then().body("lotto.lottoId", equalTo(5)); 這個判斷lotto下面lotto.lottoId節點是否是5

Assert.assertEquals(bmessage, "海報");---預期和實際值是否一致

get("/lotto").then().body("lotto.winners.winnerId", hasItems(23, 54));

/lotto下面lotto.winners.winnerId是否包含2354

6.given().param("name","clq").then().statusCode(200).body("id", equalTo(2),"content", containsString("Hello").when().get("/greeting");

(引數name,當我傳送get請求之後,那麼你給我返回響應碼200,並且id=2contenthello)

7.rdposturl.startsWith("https://rdx")-確定此字串例項的開頭是否與指定的字串匹配.

8.rdposturl.endsWith(".jpg")-確定此字串例項的末尾是否.jpg圖片

9.JsonPath yloan = get(yurl).getBody().jsonPath().setRoot("result");-獲取整個節點的資料

10.response.getBody().jsonPath().getString("returncode")--獲取某一個節點的值(如:return code

11.get(url).then().assertThat().statusCode(200);--判斷url返回的code碼是否為200等等

12. Assert.assertNotNull(res.getBody().jsonPath().getString("result.orderguid"));Assert.assertNotNull(res.getBody().jsonPath().get("result.orderno"));

(/兩個是判斷斷言下面值不能為空)

13.privateLogger logger = LoggerFactory.getLogger(AskDealersPricePvid.class);--列印錯誤log日誌方法

14. List<String> titles = jsonPath.getList("topics.title")-獲取所有列表標題資訊;

c.使用rest-assured之前必須pom.xml引入jar包

<!--Restassured依賴包-->

<dependency><groupId>io.rest-assured</groupId><artifactId>json-schema-validator</artifactId><version>3.0.1</version></dependency><dependency><groupId>io.rest-assured</groupId><artifactId>spring-mock-mvc</artifactId><version>3.0.1</version></dependency>

<dependency>  <groupId>com.jayway.restassured</groupId>  <artifactId>rest-assured</artifactId>  <version>2.3.3</version>  <scope>test</scope></dependency>

<!—junitjra--><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>RELEASE</version></dependency>

<!—列印日誌依賴包-->

<dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.17</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>1.7.5</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId><version>1.7.5</version></dependency>

<!—生成testng報告依賴包-->

<dependency><groupId>org.testng</groupId><artifactId>testng</artifactId><version>6.8</version><scope>test</scope></dependency>

<!—預設的jdk版本來進行處理,這樣就容易出現版本不匹配的問題,以至於可能導致編譯不通過的問題. 例如程式碼中要是使用上了jdk1.7的新特性,但是maven在編譯的時候使用的是jdk1.6的版本,那這一段程式碼是完全不可能編譯成.class檔案的-->

<plugin><artifactId>maven-compiler-plugin</artifactId><version>3.3</version><configuration><source>1.8</source><target>1.8</target></configuration></plugin>

<!—dns實現更換測試環境jar-->

<dependency><groupId>io.leopard</groupId><artifactId>javahost</artifactId><version>0.3</version></dependency>

d.開啟第一個測試類Get請求

importio.restassured.response.Response;

import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.testng.Assert;import org.testng.annotations.Test;import java.io.IOException;import static io.restassured.RestAssured.get;


e.post請求:params入參)


7.具體rest:-assured參考api: