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

2023-12-25 00:36

本文主要是介绍资深老鸟整理,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字符串转化为自己写的类

 总结

如果你对此文有任何疑问,如果你也需要接口项目实战,如果你对软件测试、接口测试、自动化测试、面试经验交流感兴趣欢迎加入我们,加入方式在文章的最后面

  自动化测试相关教程推荐:

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

  总结:

 光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

如果对你有帮助的话,点个赞收个藏,给作者一个鼓励。也方便你下次能够快速查找。

如有不懂还要咨询下方小卡片,博主也希望和志同道合的测试人员一起学习进步

在适当的年龄,选择适当的岗位,尽量去发挥好自己的优势。

我的自动化测试开发之路,一路走来都离不每个阶段的计划,因为自己喜欢规划和总结,

测试开发视频教程、学习笔记领取传送门!!

这篇关于资深老鸟整理,Java接口自动化测试总结,从0到1自动化...的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/533679

相关文章

Java实现检查多个时间段是否有重合

《Java实现检查多个时间段是否有重合》这篇文章主要为大家详细介绍了如何使用Java实现检查多个时间段是否有重合,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录流程概述步骤详解China编程步骤1:定义时间段类步骤2:添加时间段步骤3:检查时间段是否有重合步骤4:输出结果示例代码结语作

Nginx设置连接超时并进行测试的方法步骤

《Nginx设置连接超时并进行测试的方法步骤》在高并发场景下,如果客户端与服务器的连接长时间未响应,会占用大量的系统资源,影响其他正常请求的处理效率,为了解决这个问题,可以通过设置Nginx的连接... 目录设置连接超时目的操作步骤测试连接超时测试方法:总结:设置连接超时目的设置客户端与服务器之间的连接

Java中String字符串使用避坑指南

《Java中String字符串使用避坑指南》Java中的String字符串是我们日常编程中用得最多的类之一,看似简单的String使用,却隐藏着不少“坑”,如果不注意,可能会导致性能问题、意外的错误容... 目录8个避坑点如下:1. 字符串的不可变性:每次修改都创建新对象2. 使用 == 比较字符串,陷阱满

Java判断多个时间段是否重合的方法小结

《Java判断多个时间段是否重合的方法小结》这篇文章主要为大家详细介绍了Java中判断多个时间段是否重合的方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录判断多个时间段是否有间隔判断时间段集合是否与某时间段重合判断多个时间段是否有间隔实体类内容public class D

IDEA编译报错“java: 常量字符串过长”的原因及解决方法

《IDEA编译报错“java:常量字符串过长”的原因及解决方法》今天在开发过程中,由于尝试将一个文件的Base64字符串设置为常量,结果导致IDEA编译的时候出现了如下报错java:常量字符串过长,... 目录一、问题描述二、问题原因2.1 理论角度2.2 源码角度三、解决方案解决方案①:StringBui

Java覆盖第三方jar包中的某一个类的实现方法

《Java覆盖第三方jar包中的某一个类的实现方法》在我们日常的开发中,经常需要使用第三方的jar包,有时候我们会发现第三方的jar包中的某一个类有问题,或者我们需要定制化修改其中的逻辑,那么应该如何... 目录一、需求描述二、示例描述三、操作步骤四、验证结果五、实现原理一、需求描述需求描述如下:需要在

Java中ArrayList和LinkedList有什么区别举例详解

《Java中ArrayList和LinkedList有什么区别举例详解》:本文主要介绍Java中ArrayList和LinkedList区别的相关资料,包括数据结构特性、核心操作性能、内存与GC影... 目录一、底层数据结构二、核心操作性能对比三、内存与 GC 影响四、扩容机制五、线程安全与并发方案六、工程

JavaScript中的reduce方法执行过程、使用场景及进阶用法

《JavaScript中的reduce方法执行过程、使用场景及进阶用法》:本文主要介绍JavaScript中的reduce方法执行过程、使用场景及进阶用法的相关资料,reduce是JavaScri... 目录1. 什么是reduce2. reduce语法2.1 语法2.2 参数说明3. reduce执行过程

如何使用Java实现请求deepseek

《如何使用Java实现请求deepseek》这篇文章主要为大家详细介绍了如何使用Java实现请求deepseek功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1.deepseek的api创建2.Java实现请求deepseek2.1 pom文件2.2 json转化文件2.2

Java调用DeepSeek API的最佳实践及详细代码示例

《Java调用DeepSeekAPI的最佳实践及详细代码示例》:本文主要介绍如何使用Java调用DeepSeekAPI,包括获取API密钥、添加HTTP客户端依赖、创建HTTP请求、处理响应、... 目录1. 获取API密钥2. 添加HTTP客户端依赖3. 创建HTTP请求4. 处理响应5. 错误处理6.