对 Jenkins+ANT+Jmeter 接口测试的实践

目录

1、前言

2、框架与数据准备

3、脚本设计

4、整理测试报告


1、前言

 Jenkins+ANT+JMeter是一种常见的接口测试实践方案,可以实现自动化的接口测试和持续集成。Jenkins是一个流行的持续集成工具,ANT是一个构建工具,而JMeter是一个功能强大的性能测试工具。

2、框架与数据准备

在做接口测试框架之前,我研究了一下 jmeter 工具特征和本身项目接口的特征,jmeter 是以请求为单位,不是以脚本或测试用例为单位,既然这样,我就可以每次循环获取接口或对应数据进行测试了,加上之前在 testerhome 上看到一些大神写的接口测试框架,其实框架是死的,思想是活的,利用这个活的特点,后面就想了一套比较简单的框架,可以看下图

是的,我的测试数据是用 Excel 管理的,Excel 的测试数据可看下图


从数据格式可以看出,做了用例的执行标识,选中为 YES 时才执行,NO 时不执行,这是一个用例选择执行的简单设计,还有请求的方法也是可以选择的,目前项目中的主要用 POST 和 GET,除此之外之后要获取的还有用例名,调用的接口和具体的测试请求数据,这就是使用 excel 管理测试用例的模块
数据准备好以后做一些全局或初始的配置,一般就是改 jmeter.properties 里面对应的配置


是的,里面这行本来是默认指定为 user.properties,但有自己个性化的需求,例如服务器和测试账号


配置基本完成,之后就是项目的目录架构,conf 就是放配置文件的,如 myuser.properties,jmx 就是对应的脚本,report 是输出的测试报告路径,res 是一些上传文件所用的测试资源等,test_data 是为后期性能测试作准备的,现在先忽略,test_suite 就是放 excel 表格的,build.xml 就不多说了,就是 ant 的执行文件

3、脚本设计

好吧,接下来就是 jmx 脚本的设计,如下图,这是一些变量的设置

还有上文提到用 myuser.properties 配置的,这些在 jmeter 中作为变量来使用

然后对于读取数据,我是用了 beanshell 写了简单的 java 读取 excel 的脚本构建起与测试数据的连接,首先是先获取测试用例数,用于设置执行循环请求的次数,这里是用前置处理器的方式获取数据的,前置处理器需要 sampler 紧接着在其后使用,不然是不会执行的,所有我把它放在了登录的请求里面


具体的代码:

String filename=vars.get("test_data");
String [] datalist=new String[20];
String content;
InputStream openfile = new FileInputStream(filename); 
Workbook wb = Workbook.getWorkbook(openfile);
Sheet FirstSheet = wb.getSheet(0);
int totalRows=FirstSheet.getRows();
int rows=totalRows-1;    //减1是因为我标题行不取,为了后面从第二行开始取
String data=rows.toString();
vars.put("row",data);   //用例行数
wb.close();

然后获取正常的测试数据是用 beanshell sampler,这个有个大坑,就是用 sampler 来获取数据的话到时在测试报告会显示出来,但实际上其不是测试用例,后面会说我目前是怎么破的,反正取数据的操作最好就是不要显示在测试报告的统计上,这里就是取到刚才所说的测试用到的值,执行标识 load,用例名称 testcase,调用接口 inter,请求方法 method,请求数据 request 以及预期结果断言 response,之前就将他们作为变量传到脚本当中


具体的代码(补充说明一下,取 excel 我是用 jxl.jar 去读的,但有部分小伙伴喜欢用 POI 去读,反正原理都是一样的,像在平时编写代码那样导入包就好了):

int i;
int k=0;
String [] datalist=new String[20];
String content;
String filename=vars.get("test_data");
String str=vars.get("rownum");
int row = Integer.parseInt(str); 
InputStream openfile = new FileInputStream(filename);  Workbook wb = Workbook.getWorkbook(openfile);Sheet FirstSheet = wb.getSheet(0);for(i=1;i<9;i++){                    //9是因为我表格就是9列的if (i!=5&&i!=6){            //表格中白色的两行不取Cell oCell= FirstSheet.getCell(i,row);content=oCell.getContents();datalist[k]=content;k++;}}vars.put("load",datalist[0]);     //标识vars.put("testcase",datalist[1]);   //用例名称vars.put("inter",datalist[2]);     //接口vars.put("method",datalist[3]);    //请求方法vars.put("request",datalist[4]);      //请求数据vars.put("response",datalist[5]);   ///断言校验return content;

执行的效果如下图,开始在登录完之后拿到测试用例的数量,作为循环的次数,做个计数器用来 excel 行的遍历,使用 if 控制器判断执行方法,如果是 YES 的话才执行请求,如果 method 是 POST 就是执行 POST 请求的 http sampler,GET 就执行 GET 请求的 http sampler,然后输出的请求结果会有对应的用例名称,最后在响应断言中填上 response 变量,基本的脚本设计就完成了


具体 http 请求也是很简单的


4、整理测试报告

脚本设计完以后,用 ant 去执行 jmx 就可以了,至于怎么用 ant 去执行我就不多说了,去网上搜一下大把的教程,我这里是同时输出了两份测试报告,一份是作简单的统计用,就是 jmeter-results-detail-report_21.xsl 那份


6 月 28 日更新的测试报告,统计线程组执行的请求数,更符合当前脚本测试用例的统计形式


8 月 5 日更新测试报告样式,继续慢慢优化


还有是查看测试数据详情用的,就是 jmeter-results-shanhe-me.xsl,两份报告之间做了一个比较简单的跳转,方便查看


其实在这里我是用了比较取巧的方法把之前取数据的 sampler 过滤掉了,不输出到 html 测试报告,打开输出的 jtl 看一下你就懂了


所以两份测试报告我也做了一些手脚,但这个不是明智的方法,只不过是没有办法中的办法,就是去改上文的两个 xsl
统计的


查看数据的

其实这些也是我之后要优化的地方,只是目前太急要出个方案罢了

  作为一位过来人也是希望大家少走一些弯路

在这里我给大家分享一些自动化测试前进之路的必须品,希望能对你带来帮助。

(WEB自动化测试、app自动化测试、接口自动化测试、持续集成、自动化测试开发、大厂面试真题、简历模板等等)

相信能使你更好的进步!

点击下方小卡片

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/3383.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SPEC CPU 2006 1.2 D2000 ARM64 aarch64平台 docker 环境下的编译 宿主机测试

由于spec cpu 2006版本太老&#xff0c;现代操作系统gcc版本远高于gcc4.3&#xff0c;且tools也没有提供arm64架构程序文件&#xff0c;导致安装编译会报大量编译错误&#xff0c;难以适配。故采用docker方式尝试编译。 系统 rootyeqiang-greatwall:/home/yeqiang/Downloads#…

JS逆向系列之猿人学爬虫第18题-jsvmp - 洞察先机

文章目录 目标网址加密参数分析Python 实现往期逆向文章推荐目标网址 https://match.yuanrenxue.cn/match/18题目标着难度是困难级别,主要还是vmp保护的JS代码调试困难,理清逻辑就会变得简单了 加密参数分析 请求第一页时没有加密参数,从第二页开始,url会携带t和v两个参数…

240. 搜索二维矩阵 II

题目描述&#xff1a; 主要思路&#xff1a; 利用矩阵中的单调性进行搜索。 class Solution { public:bool searchMatrix(vector<vector<int>>& matrix, int target) {int nmatrix.size(),mmatrix[0].size();int in-1,j0;while(i>0&&j<m){if(m…

详解CPU的态

目录 1.CPU的工作过程 2.寄存器 3.CPU的上下文 4.系统调用 5.CPU的态 1.CPU的工作过程 CPU要执行的指令的地址存在寄存器中&#xff0c;指令存放在内存中&#xff0c;而CPU本质上就是一个去内存中根据地址取指令&#xff0c;然后执行指令的硬件。 举一个例子&#xff1a…

【蓝图】p27开关门互动实现

p27开关门互动实现 创建一个门 添加初学者内容包 拖拽一个门到场景中 添加一个碰撞 创建盒体触发器 左侧模式->基础->盒体触发器&#xff0c;拖拽到门上&#xff0c;调整大小 开关门互动实现 做一个开门互动 要把开门逻辑写在关卡蓝图里 门设置为可移动 打开关卡蓝…

link和@import的区别,性能优化

link和import的区别 两者都是外部引用CSS的方式&#xff0c;它们的区别如下&#xff1a; link是XHTML标签&#xff0c;除了加载CSS外&#xff0c;还可以定义RSS等其他事务&#xff1b;import属于CSS范畴&#xff0c;只能加载CSS。 link引用CSS时&#xff0c;在页面载入时同时加…

url解析与拼接工具UrlUtils

import java.io.UnsupportedEncodingException; import java.util.HashMap; import java.util.Map;/*** 功能描述:url解析与拼接*/ public class UrlUtils {/*** 在给定的url后面拼接查询参数* param baseUrl url地址* param params 要拼接的查询参数map* return 拼接上params查…

SpringBoot整合knife4j

knife4j 文档地址&#xff1a;https://doc.xiaominfo.com/ knife4j是为Java MVC框架集成Swagger生成Api文档的增强解决方案。 Swagger介绍 前后端分离开发模式中&#xff0c;api文档是最好的沟通方式。 Swagger 是一个规范和完整的框架&#xff0c;用于生成、描述、调用和…

实用在线工具网站分享

一、bejson网站&#xff1a; 1.功能 1&#xff09;json工具 2&#xff09;编码/解码、加密/解密 3&#xff09;格式化工具 4&#xff09;网络相关工具 5&#xff09;前后端工具 6&#xff09;正则生成等其他 7&#xff09;文档处理 8&#xff09;图片处理 9&#xff09;文字处…

Docker中Mysql数据备份

Docker中Mysql数据备份 1.创建备份用户2.准备测试数据3.完全备份4.知识点解析 1.创建备份用户 百度过程中&#xff0c;有人说用最高权限root直接备份&#xff0c;不可取不安全&#xff0c;所以单独创建一个用于备份的用户 学习–去看–Mysql 备份所需要的权限 1.进入Mysql容器…

6.Hive系列之DML数据操作(二)

语句和Mysql、PgSQL都类似&#xff0c;简单过一遍 # 全表查询 select * from studen; # 列查询 select name, age from student; # 列别名 select name AS name1, age age1 from student; # 常用函数 count max min sum avg等 select avg(score) avg_score from student; # 限…

修复漏洞(一)离线升级Docker版本

前言 一般人最好用的修复漏洞的方式就是更新版本起因是使用的Docker版本被检测出来有一堆漏洞&#xff08;例如&#xff1a;Docker 操作系统命令注入漏洞(CVE-2019-5736)&#xff09;更新环境无法联网&#xff0c;只能通过下载二进制文件的形式进行安装 步骤 可先通过which …

基于单片机的智能窗帘智能晾衣架系统的设计与实现

功能介绍 以STM32单片机单片机作为主控系统&#xff1b;OLED液晶显示当前环境温湿度&#xff0c;光照强度&#xff0c;时间&#xff0c;开关状态等信息&#xff1b;雨滴传感器检测当前环境是否下雨&#xff0c;天气下雨检测&#xff0c;天气潮湿时自动收衣服&#xff1b;可以通…

RabbitMq(一)

一、基本概念、常见工作模式以及简单使用 MQ全称Message Queue (消息队列)&#xff0c;是在消息的传输过程中保存消息的容器。多用于分布式系统之间进行通信。 小结 MQ消息队列&#xff0c;存储消息的中间件分布式系统通信两种方式:直接远程调用和借助第三方完成间接通信发…

openGauss学习笔记-09 openGauss 简单数据管理-创建数据库

文章目录 openGauss学习笔记-09 openGauss 简单数据管理-创建数据库9.1 语法格式9.2 参数说明9.3 示例 openGauss学习笔记-09 openGauss 简单数据管理-创建数据库 数据库安装完成后&#xff0c;默认生成名称为postgres的数据库。您需要自己创建一个新的数据库。 9.1 语法格式…

低代码技术:提高效率降低成本的全新选择

一、前言 企业想要独立的应用程序&#xff0c;开发者在寻求更快速、更高效、更灵活的开发方法&#xff0c;以适应快速变化的市场需求。在这个背景下&#xff0c;低代码技术以提高效率降低成本的方式走进人们视野&#xff0c;成为了一种全新的应用程序开发方式。 二、相比传统的…

金融中的数学:概率分布(下)

上篇博客介绍了离散型概率分布&#xff0c;本篇博客介绍连续型概率分布。 1.连续型概率分布 连续型均匀分布&#xff08;Continuous Uniform distribution&#xff09;是一种描述在特定区间内取值均匀分布的概率分布。在该分布中&#xff0c;随机变量在给定区间内的取值概率密…

上门服务小程序|上门家政小程序开发

随着现代生活节奏的加快和人们对便利性的追求&#xff0c;上门家政服务逐渐成为了许多家庭的首选。然而&#xff0c;传统的家政服务存在着信息不透明、服务质量不稳定等问题&#xff0c;给用户带来了困扰。为了解决这些问题&#xff0c;上门家政小程序应运而生。上门家政小程序…

Jupyter入门使用教程

1 Jupyter Notebook与Jupyter Lab简介 Jupyter Notebook是一个开源的Web应用&#xff0c;在深度学习领域非常活跃。用户可以在这里创建和分享可执行代码、可视化结构和注释说明的文档。 Jupyter Notebook以网页的形式展现&#xff0c;用户可以在此网页中直接编辑代码、运行程…

通过 Lucene.Net 支持的 .NET 索引和搜索引擎的高效使用与探索:Examine 的简单索引与搜索数据应用以及其可扩展性分析

通过 Lucene.Net 支持的 .NET 索引和搜索引擎的高效使用与探索&#xff1a;Examine 的简单索引与搜索数据应用以及其可扩展性分析 在当前的技术环境中&#xff0c;搜索和索引数据变得越来越重要&#xff0c;尤其是在处理大量数据时。这就使得我们需要一种能够快速、精确、高效…