资深老鸟整理,Java接口自动化测试总结,从0到1自动化...

这几年接口自动化变得越来越热门,相对比于UI自动化,接口自动化有一些优势

1)运行比UI更稳定,让BUG更容易定位 2)UI自动化维护成本太高,接口相对低一些

接口测试其实有很多方式,主要有两种,一个是工具,最常见的有:Postman,SoupUI,Jmeter;另一个就是代码,Java和Python都可以实现。

工具的好处就是直观,快速上手,有些工具也做到了半自动化和集成,但是工具还是会有一定的限制,代码相对与工具来说是更万能,利用接口测试框架结合TestNG或者Junit,实现接口自动化。

1、REST Assured测试框架

maven坐标

  1. io.rest-assured

  2. rest-assured

  3. 4.0.0

  4. test

  5. io.rest-assured

  6. json-path

  7. 4.0.0

  8. io.rest-assured

  9. json-schema-validator

  10. 4.0.0

官方文档中建议静态导入

  1. import static io.restassured.RestAssured.*;

  2. import static io.restassured.matcher.RestAssuredMatchers.*;

  3. import static org.hamcrest.Matchers.*;

语法格式

  1. public void testExample()

  2. {

  3. given()

  4. .queryParam("wd","mp3")

  5. .when()

  6. .get("http://www.baidu.com/s")

  7. .then()

  8. .log().all()

  9. .statusCode(200);

  10. }

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(""))

 
  
  1. public Response testDemo(String corpid,String corpsecret ){

  2. Response res = RestAssured.given()

  3. .log().all()

  4. .when().get("https://baidu.com")

  5. .then().extract().response();    

  6. return res;

  7. }

extract().response() 以response格式获取响应结果 res.getCookie() res.getHeader() res.getStatusCode() res.path("").toString() 获取返回中某个节点的值 res.asString() 获取返回内容体

2、HttpClient

maven坐标

  1. org.apache.httpcomponents

  2. httpclient

  3. 4.5.5

  4. org.apache.httpcomponents

  5. httpcore

  6. 4.4.4

导入

  1. import org.apache.http.HttpResponse;

  2. import org.apache.http.client.HttpClient;

  3. import org.apache.http.client.methods.HttpPost;

  4. import org.apache.http.impl.client.DefaultHttpClient;

  5. import org.apache.http.HttpEntity;

简单实例

  1. public String demoPost(String httpUrl) {

  2. String cookie ="JESSIONID=xxxxxxxx";     String params = "JsonData";

  3. StringEntity stringEntity = new StringEntity(params, "UTF-8");

  4. stringEntity.setContentType("application/x-www-form-urlencoded");

  5. HttpPost httpPost = new HttpPost(httpUrl);

  6. httpPost.setHeader(cookie,cookie);

  7. httpPost.setEntity(stringEntity);

  8. HttpClient client = new DefaultHttpClient();

  9. HttpResponse Response = client.execute(httpPost);

  10. String result = EntityUtils.toString(Response.getEntity());

  11. }

登录需要存储Cookie的方式

  1. CookieStore cookiestore=new BasicCookieStore();

  2. CloseableHttpClient client1=HttpClients.custom().setDefaultCookieStore(cookiestore).build();

  3. List cookies = cookiesstore.getCookies();

如果登录时页面有重定向操作,也可以用cookieStore的方式存储每次重定向时需要用到的cookie

3、对返回的内容Json化

1)JSON

maven坐标

  1. org.json

  2. json

  3. 20180130

数组形式response

  1. JSONArray array = new JSONArray(response);

  2. JSONObject object = array.getJSONObject(0);

  3. String value = object.get("key").toString();

带头信息的response

  1. JSONObject object = new JSONObject(response);

  2. String value = object.getString("key");

2)gson (推荐)

  1.   com.google.code.gson

  2.   gson

  3.   2.8.2 //如果使用更新的版本,JsonParser会被推荐不使用

  4. import com.google.gson.JsonParser;

  5. import com.google.gson.JsonArray;

  6. import com.google.gson.JsonObject;

数组形式response

  1. JsonPraser parser = new JsonParser();

  2. JsonArray array = parser.parse(response).getAsJsonArray;

  3. JsonObject object = array.get(0).getAsJsonObject();

  4. String value = object.get("key").getAsString();

带头信息的response

  1. JsonPraser parser = new JsonParser();

  2. JsonObject object = parser.parse(response).getAsJsonOjbect();

  3. JsonObject object_in = object.get("key").getAsJsonObject();

  4. String value = object_in.get("key").getAsString();

getAsString() 获取字符串的值 toString() 获取字符串

还可以利用Gson提供的fromJson()方法来实现从Json相关对象到Java实体

  1. import com.google.gson.Gson;

  2. Gson gson = new Gson();

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

上述例子将Json字符串转化为了JsonObject实体

也可以将Json字符串转化为自己写的类

总结:

感谢每一个认真阅读我文章的人!!!

作为一位过来人也是希望大家少走一些弯路,如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些自动化测试的学习资源,希望能给你前进的路上带来帮助。

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

   视频文档获取方式:
这份文档和视频资料,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!以上均可以分享,点下方小卡片即可自行领取。

你可能感兴趣的:(技术分享,软件测试,自动化测试,自动化,开发语言)