此前的性能测试进阶文章中内容提到,近期我已经成功完成分布式的性能测试、单机输出报告等操作。与此同时,最近利用JMeter写脚本来进行Web的性能测试,最终写了很多份脚本。可是这么多脚本,我不可能一个个的手动去点啊,有没有什么办法来批量运行JMeter脚本呢?
这个时候想起了一个在阿里游戏工作的测开大神提到过,可以借助Ant。接下来我就借助jmeter+ant进行接口集成性能自动化测试。
前期准备:安装与配置Jmeter和Ant
Jmeter的安装和配置在这就不多说了,和之前是一样的。那么在这里重点说说Ant的安装与配置。
首先到官网去下载Ant,网址链接:下载Ant,并且解压放到D盘。
接下来配置环境变量:
1. ANT_HOME: 安装路径;
2. path: %ANT_HOME%\bin
cmd 命令行执行 ant -version 验证ant的安装情况。
接下来, 找到JMeter所在目录下extras子目录里的ant-JMeter-1.1.1.jar这个文件。
将其复制到Ant所在目录lib子目录之下,复制完如下。
这样Ant运行时才能找到”org.programmerplanet.ant.taskdefs.jmeter.JMeterTask”这个类,从而成功触发JMeter脚本。
核心过程:编写配置文件
环境准备好之后,剩下的就是编写配置文件了,让Ant找到所有的JMeter文件。默认的配置文件,命名为build.xml,下面就介绍一下,如何编写这个xml文件。
配置build.xml文件如下:
配置工作完成之后,就可以正式进入压测环节了。
重中之重:压测填坑之路
首先打开cmd命令行,cd到build.xml目录,运行ant命令,就会启动JMeter进行压测。JMeter运行完毕后,会自动执行将生成的jtl文件分析为csv文件的工作。
然而,填坑之路就此开启。
ant执行后,发现报错了,提示“build failed, UTF-8序列字节无效”。
这个是因为build.xml文件中存在编码不同的字符,接着我就把build.xml文件中'UTF-8'的编码方式改成'GB2312',成功消除此报错。
再次执行ant,又报错了,这次提示:jtl文件不存在。
这个场景似曾相识,在单机性能测试输出报告有类似情况,有可能是目标jtl文件和report文件和测试脚本放在一起的原因。然后我新建一个文件夹专门存放report和jtl,此时报错成功解决。
再次执行ant,发现出现test的标志了,仿佛成功的曙光就在眼前。
过程中看着都很顺利,结果到了最后一个节点还是报错:build failed, GG(卒)。
这又是哪门子问题呢?认真看一下报错信息:jmeter-results-detail-report_21.xsl这个文件不存在。
在网上查了一下,Jmeter3.X是需要将Jmeter2.X的\extras\jmeter-results-detail-report_21.xsl文件,复制到F:\apache-jmeter-3.0\extras文件夹中的,否则的话report的样式就生成不了。
可是我没有Jmeter2.X的版本啊,这怎么办?
我用全盘搜索我的PC看看有没有类似东西,还好在我的Jmeter4.X的版本找到了,立马复制过来用一用。
拷贝完成后,继续执行ant,又报错了(还有完没完?),这次提示“前言中不允许有内容”。
这又是什么鬼东西呢?百度了一下,常见错误:前言中不允许有内容,解决办法如下:
1.在JMeter的bin目录中找到jmeter.properties;
2.将文件中#jmeter.save.saveservice.output_format=csv改为jmeter.save.saveservice.output_format=xml
(注意:去掉前面的#号,后面的xml要小写。)
这个是用于修改Jmeter默认保存文件的格式。
修改完成之后,重新执行ant,提示'build successful',总算是成功了!
构建ant完成后,我迫不及待就打开report文件夹查看一下报告,结果发现这份报告有bug:date report 显示date not defined,min time 和 max time 处都是NaN。
接下来就需要优化一下这份报告了。将配置文件build.xml优化代码如下,即可解决上述问题。
优化完成后,这次我们不采用cmd命令行的方式,采用另外一种方式执行:
在build.xml配置文件的文件夹新建一个build.bat批处理文件,此文件只需写入"ant"保存,然后双击build.bat就会自动批量执行自动化的脚本。
执行完成打开报告可以看到,report的时间有了,min time 和 max time 也有数值了。至此,使用jmeter+ant进行接口集成性能自动化测试的任务顺利完成了!
读更多的好书,拍更美的照片,写更酷的代码,遇见更有趣的人,愿望是实现从IT菜鸟到全栈工程师的蜕变。