资深老鸟整理,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() 后面跟一次网络请求所需要的条件

扫描二维码关注公众号,回复: 17317280 查看本文章

.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年最全的软件测试工程师学习知识架构体系图

一、Python编程入门到精通

请添加图片描述

二、接口自动化项目实战

请添加图片描述

三、Web自动化项目实战

请添加图片描述

四、App自动化项目实战

请添加图片描述

五、一线大厂简历

请添加图片描述

六、测试开发DevOps体系

请添加图片描述

七、常用自动化测试工具

请添加图片描述

八、JMeter性能测试

请添加图片描述

九、总结(尾部小惊喜)

不要停下脚步,不要放弃梦想。在困难与挫折面前,坚定信念,不屈不挠,才能创造出属于自己的闪耀辉煌,让生命更加绚丽多彩。

勇敢面对挑战,坚持不懈,唯有奋斗才能书写人生的壮丽篇章。在前行的道路上,不断超越自我,勇往直前,终将成就辉煌的人生。

奋斗是人生的密码,只有解开它,才能揭示出属于你的辉煌。不论困难与挫折,坚持追逐梦想的脚步,终将收获成功的喜悦和成就的光荣。

猜你喜欢

转载自blog.csdn.net/csdnchengxi/article/details/134908428