接口自动化测试框架搭建
🍅 视频学习:文末有免费的配套视频可观看
🍅 关注公众号:互联网杂货铺,回复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…...
vscode里如何用git
打开vs终端执行如下: 1 初始化 Git 仓库(如果尚未初始化) git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...
ES6从入门到精通:前言
ES6简介 ES6(ECMAScript 2015)是JavaScript语言的重大更新,引入了许多新特性,包括语法糖、新数据类型、模块化支持等,显著提升了开发效率和代码可维护性。 核心知识点概览 变量声明 let 和 const 取代 var…...

Debian系统简介
目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版ÿ…...

学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1
每日一言 生活的美好,总是藏在那些你咬牙坚持的日子里。 硬件:OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写,"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...

论文浅尝 | 基于判别指令微调生成式大语言模型的知识图谱补全方法(ISWC2024)
笔记整理:刘治强,浙江大学硕士生,研究方向为知识图谱表示学习,大语言模型 论文链接:http://arxiv.org/abs/2407.16127 发表会议:ISWC 2024 1. 动机 传统的知识图谱补全(KGC)模型通过…...
linux 下常用变更-8
1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行,YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID: YW3…...

多种风格导航菜单 HTML 实现(附源码)
下面我将为您展示 6 种不同风格的导航菜单实现,每种都包含完整 HTML、CSS 和 JavaScript 代码。 1. 简约水平导航栏 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport&qu…...

使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台
🎯 使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台 📌 项目背景 随着大语言模型(LLM)的广泛应用,开发者常面临多个挑战: 各大模型(OpenAI、Claude、Gemini、Ollama)接口风格不统一;缺乏一个统一平台进行模型调用与测试;本地模型 Ollama 的集成与前…...

Unity | AmplifyShaderEditor插件基础(第七集:平面波动shader)
目录 一、👋🏻前言 二、😈sinx波动的基本原理 三、😈波动起来 1.sinx节点介绍 2.vertexPosition 3.集成Vector3 a.节点Append b.连起来 4.波动起来 a.波动的原理 b.时间节点 c.sinx的处理 四、🌊波动优化…...

Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决
Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决 问题背景 在一个基于 Spring Cloud Gateway WebFlux 构建的微服务项目中,新增了一个本地验证码接口 /code,使用函数式路由(RouterFunction)和 Hutool 的 Circle…...