接口自动化测试框架搭建
🍅 视频学习:文末有免费的配套视频可观看
🍅 关注公众号:互联网杂货铺,回复1 ,免费获取软件测试全套资料,资料在手,涨薪更快
一、原理及特点
- 参数放在XML文件中进行管理
- 用httpClient简单封装一个httpUtils工具类
- 测试用例管理使用了testNg管理,使用了TestNG参数化测试,通过xml文件来执行case。
- 测试报告这里用到第三方的包ReportNG 项目组织用Maven
二、准备
使用工具:eclipse,maven
用到的第三方jar包:dom4j、reportng、testng
理解难点:httpUtils和xmlUtil工具类的封装;dom4j使用;CookieStore的应用
三、框架构思
1、项目结构

2、用例执行流程

3、接口调用流程

4、调度脚本流程

四、框架实现
1、输入参数
1.1 参数放在XML文件中进行管理
例:这里测试获取角色的接口输入参数为,page和rows,mapRole.xml内容如下
<?xml version="1.0" encoding="UTF-8"?>
<map><bean beanName="GetRole"><!--Locator lists --><locator name="page" value="1"></locator><locator name="rows" value="10"></locator></bean>
</map>
1.2 封装一个xmlUtil工具类负责读取XML,使用第三方的jar包dom4j
1.2.1 xmlUtil中readXMLDocument方法返回值为HashMap<String, String>
public static HashMap<String, String> readXMLDocument(String beanName,String xmlName){}
参数xmlName(xml文件的名字); 参数beanName(xml文件中节点的名称);
1.3 封装一个CookieUtil工具类,通过CookieStore储存cookie
1.3.1 CookieUtil类中setCookieStore方法返回值为CookieStore
public CookieStore setCookieStore(HttpResponse httpResponse) {}
1.4 用httpClient简单封装一个httpUtils工具类有get.post,put,delete方法
1.4.1 httpUtils中post封装方法如下:
public CloseableHttpResponse post(String url, Map<String, String> params,CloseableHttpClient httpclient,CookieStore cookieStore){}
2、返回参数
2.1 创建一个接口返回对象ResponseBean
对象ResponseBean,包括status、statusCode、contentType、body、url、method、cookies
2.2 在工具类中在创建一个ReponseUtil工具类
ReponseUtil工具类负责将请求的返回数据CloseableHttpResponse 转换成ResponseBean
public ResponseBean setResponseBean(CloseableHttpResponse httpResponse) {}
3、测试用例
测试用例管理使用了testNg管理 ,使用了TestNG参数化测试,通过xml文件来执行case
3.1 测试case脚本
public class GetRoleTest {static CookieStore cookieStore ;static CookieUtil cookieUtil=new CookieUtil() ;CloseableHttpClient client;HttpUtils httpUtils=HttpUtils.getInstance();@Parameters({ "url", "objBean" ,"statusCode","xmlName"})@BeforeSuite/** 登录进入系统获取JSESSIONID放入到CookieStore中* */public void TestLoginIn(String url ,String objBean, String statusCode,String xmlName) {Map<String,String> params=xmlUtil.readXMLDocument(objBean,xmlName);client = HttpClients.createDefault();CloseableHttpResponse httpResponse= httpUtils.post(url, params, client, cookieStore);//cookieUtil.printResponse(httpResponse);cookieStore=cookieUtil.setCookieStore(httpResponse);}@Parameters({ "url", "objBean" ,"statusCode","body","xmlName"})@Test(priority = 2)public void TestGetRole(String url ,String objBean, String statusCode,String body,String xmlName) {Map<String,String> params=xmlUtil.readXMLDocument(objBean,xmlName);client = HttpClients.custom().setDefaultCookieStore(cookieStore).build();CloseableHttpResponse httpResponse= httpUtils.post(url, params, client, cookieStore);ResponseBean rb=new ReponseUtil().setResponseBean(httpResponse);
// add AssertAssert.assertEquals("OK", rb.getStatus());Assert.assertEquals(statusCode, rb.getStatusCode());Assert.assertEquals(true, rb.getBody().contains(body));}@AfterSuitepublic void closeClient(){try {// 关闭流并释放资源client.close();} catch (IOException e) {e.printStackTrace();}}
}
- [注] 因为API接口测试时每次都要校验Cookie,所有我们每次都先执行登录操作去获取Cookie
3.2 xml文件的编写
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="TestGetRole" parallel="classes" thread-count="5"><parameter name="url" value="/sys/login" /><parameter name="objBean" value="loginIn" /><parameter name="status" value="OK" /><parameter name="statusCode" value="200" /><parameter name="xmlName" value="mapRole" /><test name="TestGetRole" preserve-order="true"><parameter name="url" value="/json/getRoleInfo" /><parameter name="objBean" value="GetRole" /><parameter name="status" value="OK" /><parameter name="statusCode" value="200" /><parameter name="body" value="roleName" /><classes><class name="com.lc.testScript.GetRoleTest"><methods><include name="TestGetRole" /><!--<include name="TestGetRole2" />--></methods></class></classes></test>
</suite>
右键->run as ->TestNG Suite,这个场景的的测试用例就可以运行了
4、测试报告和项目组织
测试报告这里用到第三方的包ReportNG 项目组织用Maven
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion>
..........................................
..........................................
..........................................<properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><xmlFileName1>TestGetRole.xml</xmlFileName>
.................这里写testNG对应的XML名称----------------------<xmlFileName10>TestGetUser.xml</xmlFileName></properties><dependencies>..........................</dependencies> <build><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-surefire-plugin</artifactId><version>2.19</version><configuration><suiteXmlFiles><suiteXmlFile>src/test/java/testSuites/${xmlFileName}</suiteXmlFile>.................略..........................这里的和properties中的xmlFileName想对应............<suiteXmlFile>src/test/java/testSuites/${xmlFileName10}</suiteXmlFile></suiteXmlFiles></configuration></plugin><!-- 添加插件,添加ReportNg的监听器,修改最后的TestNg的报告 --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-surefire-plugin</artifactId><version>2.5</version><configuration><properties><property><name>usedefaultlisteners</name><value>false</value></property><property><name>listener</name><value>org.uncommons.reportng.HTMLReporter</value></property></properties><workingDirectory>target/</workingDirectory></configuration></plugin><plugin><artifactId>maven-compiler-plugin</artifactId><version>3.5.1</version><configuration><source>1.8</source><target>1.8</target></configuration></plugin></plugins></build></project>
- [注] 因为是maven的项目所以要将testSuite的xml文件放在maven的test目录下,这样右键pom.xml文件maven test,所有的测试用例就开始执行了
测试报告

框架目前存在的不足
- 1、数据库数据校验这一块的功能还没有完善,计划用MyBatis
- 2、参数使用了xml文件配置虽然灵活但有些繁琐,目前还没想到好的解决方案,testlink是否可以尝试一下呢
在这我为大家准备了一份软件测试视频教程(含面试、接口、自动化、性能测试等),就在下方,需要的可以直接去观看。
字节大佬,一周讲完,自动化测试项目实战,这套教程是怎么称霸B站的?【2024最新版】
相关文章:
接口自动化测试框架搭建
🍅 视频学习:文末有免费的配套视频可观看 🍅 关注公众号:互联网杂货铺,回复1 ,免费获取软件测试全套资料,资料在手,涨薪更快 一、原理及特点 参数放在XML文件中进行管理用httpClien…...
(四十二)第 6 章 树和二叉树(树的二叉链表(孩子-兄弟)存储)
1. 背景说明 2. 示例代码 1) errorRecord.h // 记录错误宏定义头文件#ifndef ERROR_RECORD_H #define ERROR_RECORD_H#include <stdio.h> #include <string.h> #include <stdint.h>// 从文件路径中提取文件名 #define FILE_NAME(X) strrchr(X, \\) ? strrch…...
测试萌新Python学习(五)接口自动化测试requests
requests 接口自动化测试requests库基本实现请求-GET基本实现请求-POST基本实现请求-补充 sessionCookie和Session案例params 接口自动化测试 概念程序驱动代替人工驱动去实现接口测试 实现方式 测试工具(jmeter, postman, …)编码工具(python, java, …) 比较 工具 优点:…...
Python 机器学习 基础 之 监督学习 [朴素贝叶斯分类器] / [决策树] 算法 的简单说明 / [graphviz] 绘制决策树
Python 机器学习 基础 之 监督学习 [朴素贝叶斯分类器] / [决策树] 算法 的简单说明 / [graphviz] 绘制决策树 目录 Python 机器学习 基础 之 监督学习 [朴素贝叶斯分类器] / [决策树] 算法 的简单说明 / [graphviz] 绘制决策树 一、简单介绍 二、监督学习 算法 说明前的 数…...
QT日志类SimpleQtLogger的简单记录
在现代软件开发中,日志记录是必不可少的部分。它不仅帮助开发者在调试和维护软件时了解程序的运行状态,还能提供关键的错误信息。对于使用Qt框架开发应用程序的开发者来说,选择一个合适的日志库至关重要。本文将详细介绍Qt日志库SimpleQtLogg…...
设计模式:观察者模式
观察者模式(Observer Pattern)是一种行为设计模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并被自动更新。这种模式通常被用来实现事件处理系统、实时数据更新、…...
ICode国际青少年编程竞赛- Python-5级训练场-带参数函数
ICode国际青少年编程竞赛- Python-5级训练场-带参数函数 1、 def get_item(a):Dev.step(a)Dev.step(-a) get_item(4) Spaceship.step(2) get_item(2) Spaceship.step(3) get_item(5) Spaceship.step(2) get_item(3) Spaceship.step(3) get_item(4)2、 def get_item(a): D…...
运维别卷系列 - 云原生监控平台 之 02.prometheus exporter 实践
文章目录 [toc]exporter 简介常用的 exporternode-exporter 实践创建 svc创建 daemonsetprometheus 配置服务发现 exporter 简介 随着 Prometheus 的流行,很多系统都已经自带了用于 Prometheus 监控的接口,例如 etcd、Kubernetes、CoreDNS 等,…...
OSPF基本配置
1.启动OSPF进程 [rijospf1 router-id 1.1.1.1 --- 手工配置RID [r1-ospf-1) 2,创建区域 [r1-ospf-1]area 0 [r1-ospf-1-area-0.0.0.0) 3,宣告 目的:1,只有被宣告网段中的接口才能被激活。 --- 激活接口 ---- 只有激活的接口才能收发OSPF的…...
HIVE大数据平台SQL优化分享
相信很多小伙伴在面试的时候,必然跳不过去的一个问题就是SQL脚本的优化,这是很多面试官爱问的问题,也是可以证明你实力进阶的一个重要的能力。 下面给大家分享一个重量级的大数据行业sql技能---hive大数据平台SQL优化。 此文章是大数据平台…...
JS算法-十大排序算法(上)
思想小剧场 如果我的相对论被证明是正确的,德国人就会说我是德国人,法国人会说我是一个世界公民;如果我的相对论被否定了,法国佬就会骂我是德国鬼子,而德国人就会把我归为犹太人。—爱因斯坦 以下案例都是升序 const a…...
c++编程(11)——string类的模拟实现
欢迎来到博主的专栏——c编程 博主ID:代码小豪 文章目录 前言string类的模拟实现string的成员对象构造、赋值、析构访问成员对象的接口访问字符串中的元素迭代器对字符序列的插入、删除元素操作mystring类的相关操作 mystring类的所有模拟实现以及测试案例 前言 本…...
Python从0到POC编写--函数
数学函数: 1. len len() 函数返回对象(字符、列表、元组等)长度或项目个数, 例如: str "python" len(str)2. range range() 函数返回的是一个可迭代对象(类型是对象),…...
【教程】Linux/Jetson 安装X11VNC同步屏幕内容
转载请注明出处:小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你,请不吝给个[点赞、收藏、关注]哦~ 目录 背景说明 实际效果 安装步骤 安装 x11vnc 配置 x11vnc 配置 x11vnc 作为系统服务 使用 VNC 客户端连接 背景说明 通常vnc-server是单…...
【LLM第五篇】名词解释:prompt
1.是什么 提示工程(Prompt Engineering)是一门较新的学科,关注提示词开发和优化,帮助用户将大语言模型(Large Language Model, LLM)用于各场景和研究领域。 掌握了提示工程相关技能将有助于用户更好地了解…...
k8s v1.20二进制部署 部署 CNI 网络组件 部署 Calico
一、部署 flannel 1.1.K8S 中 Pod 网络通信 ●Pod 内容器与容器之间的通信 在同一个 Pod 内的容器(Pod 内的容器是不会跨宿主机的)共享同一个网络命名空间,相当于它们在同一台机器上一样,可以用 localhost 地址访问彼此的端口。…...
在React中利用Postman测试代码获取数据
文章目录 概要名词解释1、Postman2、axios 使用Postman测试API在React中获取并展示数据小结 概要 在Web开发中,通过API获取数据是一项常见任务。Postman是一个功能强大的工具,可以帮助开发者测试API,并查看API的响应数据。在本篇博客中&…...
嵌入式学习-通用定时器
简介 框图介绍 时钟选择 计数器部分 输入捕获和输出比较框图 嵌入式学习全文参考(小向是个der)做笔记:https://blog.csdn.net/qq_41954556/article/details/129735708...
培训行业有哪些ai工具?
培训行业利用人工智能(AI)工具的方式多种多样,其中一些常见的工具包括: 1. **经AI深度学习的OCR软件**:OCR能给培训行业带来很大的便利,能大大提高工作效率和降低文字录入的成本,但一般的OCR工具…...
7.STL中string的一些超常用函数 (附习题)
目录 1.find 2.atoi 3.to_string 4.getline 【leetcode 习题】 387.字符串中的第一个唯一字符 125. 验证回文串 1.find 1.查找第一次出现的目标字符串:说明:如果查找成功则输出查找到的第一个位置,否则返回-1; s1.find(s2…...
突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合
强化学习(Reinforcement Learning, RL)是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程,然后使用强化学习的Actor-Critic机制(中文译作“知行互动”机制),逐步迭代求解…...
逻辑回归:给不确定性划界的分类大师
想象你是一名医生。面对患者的检查报告(肿瘤大小、血液指标),你需要做出一个**决定性判断**:恶性还是良性?这种“非黑即白”的抉择,正是**逻辑回归(Logistic Regression)** 的战场&a…...
Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例
使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件,常用于在两个集合之间进行数据转移,如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model:绑定右侧列表的值&…...
HTML 列表、表格、表单
1 列表标签 作用:布局内容排列整齐的区域 列表分类:无序列表、有序列表、定义列表。 例如: 1.1 无序列表 标签:ul 嵌套 li,ul是无序列表,li是列表条目。 注意事项: ul 标签里面只能包裹 li…...
【2025年】解决Burpsuite抓不到https包的问题
环境:windows11 burpsuite:2025.5 在抓取https网站时,burpsuite抓取不到https数据包,只显示: 解决该问题只需如下三个步骤: 1、浏览器中访问 http://burp 2、下载 CA certificate 证书 3、在设置--隐私与安全--…...
Python如何给视频添加音频和字幕
在Python中,给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加,包括必要的代码示例和详细解释。 环境准备 在开始之前,需要安装以下Python库:…...
CMake控制VS2022项目文件分组
我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...
【Java学习笔记】BigInteger 和 BigDecimal 类
BigInteger 和 BigDecimal 类 二者共有的常见方法 方法功能add加subtract减multiply乘divide除 注意点:传参类型必须是类对象 一、BigInteger 1. 作用:适合保存比较大的整型数 2. 使用说明 创建BigInteger对象 传入字符串 3. 代码示例 import j…...
AI病理诊断七剑下天山,医疗未来触手可及
一、病理诊断困局:刀尖上的医学艺术 1.1 金标准背后的隐痛 病理诊断被誉为"诊断的诊断",医生需通过显微镜观察组织切片,在细胞迷宫中捕捉癌变信号。某省病理质控报告显示,基层医院误诊率达12%-15%,专家会诊…...
MySQL 8.0 事务全面讲解
以下是一个结合两次回答的 MySQL 8.0 事务全面讲解,涵盖了事务的核心概念、操作示例、失败回滚、隔离级别、事务性 DDL 和 XA 事务等内容,并修正了查看隔离级别的命令。 MySQL 8.0 事务全面讲解 一、事务的核心概念(ACID) 事务是…...
