rest-assured如何作接口自動化測試

1.準備工做:

IntelliJ IDEA  JDK 1.8.0 i)ii)java

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

Java+maven+TestNG+rest-assuredspring

抓包:charleschrome

請求工具:postmanjson

2.爲何要進行接口測試?

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

3.測試流程:

a.需求分析api

b.根據需求梳理接口測試點(評估測試周期)瀏覽器

c.檢查服務端接口入參和實參是否缺乏參數(若是不正確須要服務端矯正)cookie

d.進行接口測試(實際驗證點1.接口的業務邏輯json解析,2.return code 3.message 4.字段類型 5.包裝接口調用業務方源接口數據正確性)(自動化灰盒腳本)mvc

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, "寶馬X5經銷商");---預期和實際值是否一致

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")-獲取全部列表標題信息;

15. //取兩位小數(價格是:229800截取後22.98) DecimalFormat decimalFormat = new DecimalFormat(".00");

String Ymaxy = decimalFormat.format(Ymaxprice/10000.00);

16. *四捨五入方法*/

    public static String formatDouble(double d) {

        return String.format("%.2f", d);

}

//接口返回最大價格和最小价格拼接在一塊兒和包裝接口保持一致
String Maxmin = formatDouble(yxsMinPrice / 10000.00) + "-" + formatDouble(yxsMaxPrice / 10000.00) + "";

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

<!--Rest assured依賴包-->

<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請求:

import io.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入參)

e.post請求:(json入參)

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

http://blog.csdn.net/wx19900503/article/details/54944841

  1. 域名切換:
   指定host地址測試線上來回切換自如
 Dns dns = new DnsImpl(); dns.update("xxxxxxxx", "192.168.219.179");
    參考地址: https://testerhome.com/topics/7061 

9.報告執行:

   1.run->edit configuration->勾選listteners->use default reportters->apply(默認報告)

   2.項目中建立一個testng.xml代碼以下:

10.報告&Jenkins集成

相關文章
相關標籤/搜索