這幾年接口自動化變得越來越熱門,相對比于UI自動化,接口自動化有一些優勢
1)運行比UI更穩定,讓BUG更容易定位 2)UI自動化維護成本太高,接口相對低一些
接口測試其實有很多方式,主要有兩種,一個是工具,最常見的有:Postman,SoupUI,Jmeter;另一個就是代碼,Java和Python都可以實現。
工具的好處就是直觀,快速上手,有些工具也做到了半自動化和集成,但是工具還是會有一定的限制,代碼相對與工具來說是更萬能,利用接口測試框架結合TestNG或者Junit,實現接口自動化。
1、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() --cookies 是Map形式存儲 .contentType() .queryParam("key","value") 用于get請求參數 .body(Jsondata) 存放Json格式類型 .body(XMLdata) 存放XML格式類型 .formParam("Key","Value") 表單參數類型 .multipartFile(new File(filePath)) .log().all() 打印所有日志 .relaxedHTTPSValidation() --處理無效SSL證書過期 不對的異常
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() 獲取返回內容體
2、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());}
登錄需要存儲Cookie的方式
CookieStore cookiestore=new BasicCookieStore();
CloseableHttpClient client1=HttpClients.custom().setDefaultCookieStore(cookiestore).build();List<Cookie> cookies = cookiesstore.getCookies();
如果登錄時頁面有重定向操作,也可以用cookieStore的方式存儲每次重定向時需要用到的cookie
3、對返回的內容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.getString("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() 獲取字符串
還可以利用Gson提供的fromJson()方法來實現從Json相關對象到Java實體
import com.google.gson.Gson;Gson gson = new Gson();
JsonObject object = gson.fromJson(response,JsonObject.class);
上述例子將Json字符串轉化為了JsonObject實體
也可以將Json字符串轉化為自己寫的類
?總結
如果你對此文有任何疑問,如果你也需要接口項目實戰,如果你對軟件測試、接口測試、自動化測試、面試經驗交流感興趣歡迎加入我們,加入方式在文章的最后面
??自動化測試相關教程推薦:
2023最新自動化測試自學教程新手小白26天入門最詳細教程,目前已有300多人通過學習這套教程入職大廠!!_嗶哩嗶哩_bilibili
2023最新合集Python自動化測試開發框架【全棧/實戰/教程】合集精華,學完年薪40W+_嗶哩嗶哩_bilibili
測試開發相關教程推薦
2023全網最牛,字節測試開發大佬現場教學,從零開始教你成為年薪百萬的測試開發工程師_嗶哩嗶哩_bilibili
postman/jmeter/fiddler測試工具類教程推薦
講的最詳細JMeter接口測試/接口自動化測試項目實戰合集教程,學jmeter接口測試一套教程就夠了!!_嗶哩嗶哩_bilibili
2023自學fiddler抓包,請一定要看完【如何1天學會fiddler抓包】的全網最詳細視頻教程!!_嗶哩嗶哩_bilibili
2023全網封神,B站講的最詳細的Postman接口測試實戰教學,小白都能學會_嗶哩嗶哩_bilibili
??總結:
?光學理論是沒用的,要學會跟著一起敲,要動手實操,才能將自己的所學運用到實際當中去,這時候可以搞點實戰案例來學習。
如果對你有幫助的話,點個贊收個藏,給作者一個鼓勵。也方便你下次能夠快速查找。
如有不懂還要咨詢下方小卡片,博主也希望和志同道合的測試人員一起學習進步
在適當的年齡,選擇適當的崗位,盡量去發揮好自己的優勢。
我的自動化測試開發之路,一路走來都離不每個階段的計劃,因為自己喜歡規劃和總結,
測試開發視頻教程、學習筆記領取傳送門!!