资深老鸟整理,Java接口自动化测试总结,从0到1自动化...
资深老鸟整理,Java接口自动化测试总结,从0到1自动化…
这几年接口自动化变得越来越热门,相对比于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 字符串转化为自己写的类
总结
如果你对此文有任何疑问,如果你也需要接口项目实战,如果你对软件测试、接口测试、自动化测试、面试经验交流感兴趣欢迎加入我们,加入方式在文章的最后面
自动化测试相关教程推荐:
测试开发相关教程推荐
postman/jmeter/fiddler 测试工具类教程推荐
总结:
光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
如果对你有帮助的话,点个赞收个藏,给作者一个鼓励。也方便你下次能够快速查找。
如有不懂还要咨询下方小卡片,博主也希望和志同道合的测试人员一起学习进步
在适当的年龄,选择适当的岗位,尽量去发挥好自己的优势。
我的自动化测试开发之路,一路走来都离不每个阶段的计划,因为自己喜欢规划和总结,
测试开发视频教程、学习笔记领取传送门!!