1. 程式人生 > 其它 >Java程式碼做介面自動化測試 REST Assured HTTPClient

Java程式碼做介面自動化測試 REST Assured HTTPClient

近幾年介面自動化變得越來越熱門,相對比於UI自動化,介面自動化有一些優勢

1.執行比UI更穩定,讓BUG更容易定位

2.UI自動化維護成本太高,介面相對低一些

介面測試其實有很多方式,主要有兩種,一個是工具,最常見的有:Postman,SoupUI,Jmeter;另一個就是程式碼,Java和Python都可以實現。

工具的好處就是直觀,快速上手,有些工具也做到了半自動化和整合,但是工具還是會有一定的限制,程式碼相對與工具來說是更萬能,利用介面測試框架結合TestNG或者Junit,實現介面自動化。這是一篇有關於用Java程式碼實現介面自動化的兩個常用框架的介紹。

 

一.REST Assured測試框架

maven座標

  <dependencies>
      <!-- https://mvnrepository.com/artifact/io.rest-assured/rest-assured -->
    <dependency>
        <groupId>io.rest-assured</groupId>
        <artifactId>rest-assured</artifactId>
        <version>4.0.0</version>
        <scope>test</scope>
    </dependency>
    
    <!-- https://
mvnrepository.com/artifact/io.rest-assured/json-path --> <dependency> <groupId>io.rest-assured</groupId> <artifactId>json-path</artifactId> <version>4.0.0</version> </dependency> <!-- https://mvnrepository.com/artifact/io.rest-assured/json-schema-validator -->
<dependency> <groupId>io.rest-assured</groupId> <artifactId>json-schema-validator</artifactId> <version>4.0.0</version> </dependency>
  </dependencies>

 

官方文件中建議靜態匯入

import static io.restassured.RestAssured.*;
import static io.restassured.matcher.RestAssuredMatchers.*;
import static org.hamcrest.Matchers.*;

語法格式

public void testExample()
{
        given()
                .queryParam("wd","mp3")
        .when()
                .get("http://www.baidu.com/s")
        .then()
                .log().all()
                .statusCode(200);
}

given()  後面跟一次網路請求所需要的條件

.cookies()

.comtentType()

.queryParam("key","value")  用於get請求引數

.body(Jsondata) 存放Json格式型別

.body(XMLdata)  存放XML格式型別

.formParam("Key","Value") 表單引數型別

.multipartFile(new File(filePath)) 

.log().all() 列印所有日誌

.relaxedHTTPSValidation()   --處理無效SSL證書過期 不對的異常 

參考文件:https://blog.csdn.net/u011541946/article/details/98892042

 

when() 觸發條件

.get("url") 

.post("url")

.post("url/{key1}/{key2}",value1,value2)

 

then() 斷言

.statusCode(200)

.body("key",hasItems("")) 

 

public Response testDemo(String corpid,String corpsecret ){
        Response res = RestAssured.given()
                .log().all()
                .when().get("https://baidu.com")
                .then().extract().response();
    
return res; }

extract().response()  以response格式獲取響應結果

res.getCookie()

res.getHeader()

res.getStatusCode()

res.path("").toString() 獲取返回中某個節點的值

res.asString() 獲取返回內容體

 

 

 

二.HttpClient

maven座標

<!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpclient -->
<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpclient</artifactId>
    <version>4.5.5</version>
</dependency>
<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpcore</artifactId>
    <version>4.4.4</version>
</dependency>

匯入

import org.apache.http.HttpResponse;  
import org.apache.http.client.HttpClient;  
import org.apache.http.client.methods.HttpPost;  
import org.apache.http.impl.client.DefaultHttpClient; 
import org.apache.http.HttpEntity;

例項

 public String demoPost(String httpUrl) {
        String cookie ="JESSIONID=xxxxxxxx";
     String params = "JsonData";
StringEntity stringEntity
= new StringEntity(params, "UTF-8"); stringEntity.setContentType("application/x-www-form-urlencoded"); HttpPost httpPost = new HttpPost(httpUrl); httpPost.setHeader(cookie,cookie); httpPost.setEntity(stringEntity); HttpClient client = new DefaultHttpClient(); HttpResponse Response = client.execute(httpPost); String result = EntityUtils.toString(Response.getEntity()); }

 

三. 對返回的內容Json化

1.JSON

maven座標

        <dependency>
            <groupId>org.json</groupId>
            <artifactId>json</artifactId>
            <version>20180130</version>
        </dependency>

陣列形式response

JSONArray array = new JSONArray(response);
JSONObject object = array.getJSONObject(0);
String value = object.get("key").toString();

帶頭資訊的response

JSONObject object = new JSONObject(response);
String value = object.get("key");

 

2.gson (推薦)


<dependency>
  <groupId>com.google.code.gson</groupId>
  <artifactId>gson</artifactId>
  <version>2.8.2</version>  //如果使用更新的版本,JsonParser會被推薦不使用
</dependency>

import
com.google.gson.JsonParser;
import com.google.gson.JsonArray;
import com.google.gson.JsonObject;

陣列形式response

JsonPraser parser = new JsonParser();
JsonArray array = parser.parse(response).getAsJsonArray; JsonObject object = array.get(0).getAsJsonObject();
String value = object.get("key").getAsString();

帶頭資訊的response

JsonPraser parser = new JsonParser();
JsonObject object = parser.parse(response).getAsJsonOjbect();
JsonObject object_in = object.get("key").getAsJsonObject();
String value = object_in.get("key").getAsString();

getAsString()獲取字串的值

toString()獲取字串

參考:

https://blog.csdn.net/niuba123456/article/details/100581376

https://blog.csdn.net/u014253011/article/details/101718137

 

還可以利用Gson提供的fromJson()方法來實現從Json相關物件到Java實體

import com.google.gson.Gson;


Gson gson = new Gson(); JsonObject object = gson.fromJson(response,JsonObject.class);

上述例子將Json字串轉化為了JsonObject實體

也可以將Json字串轉化為自己寫的類

參考文章:

https://www.cnblogs.com/reboost/p/9521711.html

https://blog.csdn.net/chenrenxiang/article/details/80291224

https://www.jb51.net/article/228962.htm 

 

fastJson學習文件:

https://www.cnblogs.com/ibigboy/p/11124524.html