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

news2024/12/26 23:03:00

目录

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.coloradmin.cn/o/751114.html

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

相关文章

journalctl命令

要查看系统日志信息&#xff0c;使用journalctl工具即可。 不加任何参数&#xff0c;它将显示系统日志的全部信息&#xff1a;显示的顺序是从旧到新。 [rootvm1 ~]# journalctl -- Logs begin at Fri 2023-07-14 05:12:22 CST, end at Thu 2023-07-13 21:20:01 CST. -- Jul 14…

re学习(15)BUUCTF 2019红帽杯easyRe

参考视频&#xff1a; 【BUUCTF】每天一个CTF11“2019红帽杯easyRe”_哔哩哔哩_bilibili &#xff08;本人觉得看视频比看博客效率能提高十倍&#xff0c;呜呜呜&#xff0c;还是视频香~~~与君共勉&#xff09; 下载地址&#xff1a; BUUCTF在线评测 前言&#xff1a;虽然…

论文出矢量图EMF

PDF---->矢量图EMF工具&#xff1a; PDF to EMF | CloudConvert solidworks截图打印为PDF&#xff1b; matlab打开图像--编辑-复制--粘贴 - CAD打印输出PDF

传输网络介绍

文章目录 1、通信传输介质有哪些&#xff1f; 同轴电缆 –由外到内分别是&#xff1a;塑料皮层、屏蔽层、绝缘层、铜芯。 光纤 –由圆玻璃纤芯和玻璃包层构成&#xff0c;最外层是塑料护套。 双绞线 –由两根具有绝缘保护层的互相绞在一起铜导线组成的。 2、通信网络常见的组…

60题学会动态规划系列:动态规划算法第五讲

子数组系列题目 文章目录 1.最大子数组和2.环形子数组的最大和3.乘积最大数组4.乘积为正数的最长子数组长度5.等差数列划分6.最长湍流子数组7.单词拆分8.环绕字符串中唯一的子字符串 1.最⼤⼦数组和 力扣链接&#xff1a;力扣 给你一个整数数组 nums &#xff0c;请你找出一个…

自动化测试Allure报告使用详解

这一节主要是记录allure的内容以及用法&#xff0c;怎么让他生成一个完整的想要的报告。 allure生成的报告和其他五花八门的报告对比了一下&#xff0c;它的可读性是最好、最直观的。这不仅仅是我想要的效果&#xff0c;也是很多小伙伴想要的结果&#xff0c;毕竟这是给领导看…

Vue使用keep-alive设置哪些组件可以被缓存,哪些不被缓存

需求&#xff1a;当一个项目中&#xff0c;不是所有的组件页面都需要缓存起来&#xff0c;因为有些页面是不需要的 <keep-alive><router-view v-if"$route.meta.keepAlive"></router-view> </keep-alive><router-view v-if"!$rout…

27、简述线程池处理线程

简述线程池处理线程 线程池执行任务 判断核心线程是否已满&#xff0c;如果未满&#xff0c;则 创建核心线程执行&#xff0c;如果已满&#xff0c;则走下一步判断队列是否已满&#xff0c;如果未满&#xff0c;则 将任务放到队列中&#xff0c;如果已满 &#xff0c; 则走下一…

03关于golang中各种运算符的讲解代码和注释

运算符 算术运算符&#xff1a;关系运算符&#xff1a;逻辑运算符&#xff1a;赋值运算符&#xff1a;位运算符&#xff1a; 在Golang中&#xff0c;运算符是用于执行各种数学和逻辑操作的符号。本文将对Golang中常见的运算符进行讲解&#xff0c;并提供一些示例代码和注释。 …

ECharts笔记-------饼状图

这幅饼状图由title、legend、series和tooltip这四个组件组成&#xff0c;每个组件都有对应的属性来调节参数&#xff0c;下面是组件的具体内容。 title组件 title: {text: ECharts 饼状图 }, 这副图只用了title组件的text属性用来设置标题内容,title还有以下属性(部分)&…

辅助驾驶功能开发-功能规范篇(22)-4-L2级辅助驾驶方案功能规范

1.3.4 LDW系统功能定义 1.3.4.1 状态机 1.3.4.2 功能定义 1.3.4.2.1 信号需求列表 1.3.4.2.2 系统开启关闭 1&#xff09;初始化 车辆上电后&#xff0c;车道偏离预警系统&#xff08;LDW&#xff09;进行初始化&#xff0c;控制器需要在上电后 220ms 内发出第一帧报文&…

【力扣JavaScript】1047. 删除字符串中的所有相邻重复项

/*** param {string} s* return {string}*/ var removeDuplicates function(s) {let stack[];for(i of s){let prevstack.pop();if(prev!i){stack.push(prev);stack.push(i);}}return stack.join(); };

ORACLE实时SQL监控视图

引言 实时的SQL监控&#xff08;Real Time SQL Monitoring&#xff09;是Oracle 11g的一个新特性&#xff0c;它是一项强大的工具&#xff0c;用于监视和分析正在执行的SQL语句的性能和执行计划。该功能允许我们实时地跟踪SQL查询的执行过程&#xff0c;以及了解其资源消耗、等…

conda疑难杂症

annaconda、miniconda和conda的关系 conda官网 https://docs.conda.io/projects/conda/en/latest/ 下载安装Anaconda: https://www.anaconda.com/products/distribution#Downloads 下载安装Miniconda&#xff1a;https://docs.conda.io/en/latest/miniconda.html 安装 安装…

使用conda下载autopy和其他库

目录 一、前言 二、创建conda虚拟环境和下载库 1、创建conda虚拟环境 2、换源 &#xff08;1&#xff09;pip换源 &#xff08;2&#xff09;conda换源 3、下载库 4、下载超时处理方法&#xff08;如果你的库比较大&#xff0c;比如pytorch&#xff09; 5、用conda下载…

拓宽“主航道”的Serverless与EDA领域,亚马逊云科技不断创新开拓

在新潮如走马灯般变换的时尚界&#xff0c;每隔几年就会刮起一阵复古风。被誉为“时尚教父”的著名设计师安德烈莱昂塔利曾说&#xff1a;“时尚总是在寻找新的灵感和方向&#xff0c;而复古是其中一个重要的来源。” 无独有偶。日新月异的高科技领域也会出现公认的“过时”…

【六祎 - 前端】 前端设计系统组件的备忘录

设计系统按钮 设计痕迹导航可视化组建 进度条 汉堡菜单按钮 导航栏激活状态 状态颜色 web应用程序导航栏间距

可视化fcn-8s head的输出

"""可视化head的输出【可视化的结果是灰度图像"""image Image.open(imgPath).convert("RGB") transform transforms.Compose([transforms.ToTensor(),transforms.Normalize(mean[0.485, 0.456, 0.406], std[0.229, 0.224, 0.225]), …

SQL进阶(2)——SQL语句类型 增删改查CRUD 事务初步 表关联关系 视图 +索引

目录 引出SQL语句类型1.DML数据操纵语言&#xff08;重点&#xff09;2.DQL数据查询语言&#xff08;重点&#xff09;3.DDL(Data Definition Language了解)4.DCL(Data Control Language了解)5.TCL 事务控制语言 运算符和其他函数1.运算符2.其它函数增删改查CRUD 视图索引事务1…

springboot留守儿童爱心网站

本系统主要是设计出留守儿童爱心网站&#xff0c;基于B/S构架&#xff0c;后台数据库采用了Mysql&#xff0c;可以使数据的查询和存储变得更加有效&#xff0c;可以确保留守儿童爱心管理的工作能够正常、高效的进行&#xff0c;从而提高工作的效率。总体的研究内容如下&#xf…