近几年接口自动化变得越来越热门,相对比于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() --cookies 是Map形式存储
.contentType()
.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()); }
登录需要存储Cookie的方式
CookieStore cookiestore=new BasicCookieStore(); CloseableHttpClient client1=HttpClients.custom().setDefaultCookieStore(cookiestore).build(); List<Cookie> cookies = cookiesstore.getCookies();
如果登录时页面有重定向操作,也可以用cookieStore的方式存储每次重定向时需要用到的cookie
三. 对返回的内容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
总结:
光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
如果对你有帮助的话,点个赞收个藏,给作者一个鼓励。也方便你下次能够快速查找。
如有不懂还要咨询下方小卡片,博主也希望和志同道合的测试人员一起学习进步
在适当的年龄,选择适当的岗位,尽量去发挥好自己的优势。
我的自动化测试开发之路,一路走来都离不每个阶段的计划,因为自己喜欢规划和总结,
测试开发视频教程、学习笔记领取传送门!!