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

目录

1、前言

2、框架与数据准备

3、脚本设计

4、整理测试报告


1、前言

接口测试是 Web 应用程序测试的重要组成部分,它可以帮助我们检查 API 的功能、性能和安全性。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
统计的


查看数据的


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

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

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

(软件测试相关资料,自动化测试相关资料,技术问题答疑等等)

相信能使你更好的进步!

点击下方小卡片

 

【自动化测试交流】:574737577(备注ccc)icon-default.png?t=N6B9http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=qxJZAmfxpSO2iG5DiXEmovrrbqX9lf9Y&authKey=LtqIFckKO2IOCAiI9MaslOjsWuQVoVKRPzUSJH%2F5I9YFBuKr75dUnznAqyCpJ0t6&noverify=0&group_code=574737577 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值