JMeter+Ant实现性能测试自动化

一、前言

      2017年中旬,有幸接手了公司新产品的测试,领导通知说该项目需要进行功能测试、性能测试和接口测试,顿时压力倍增(于是我把压力(鸭梨)放在了冰箱里,就变成了动力(冻梨)),此前对性能测试一无所知,了解程度只能用“听过”来形容。

       性能测试首选的工具是JMeter,在此不多做介绍,但是不得不说JMeter也是一款非常好的接口测试工具。性能测试过程中手工重复的活动非常多,为了给客户提供一个性能测试报告,我用了一周时间进行并发测试、数据整理、数据分析、最后生成测试报告,真的是手工重复到怀疑人生;于是萌生了实现性能测试自动化的想法。之前用Robot framework框架做过WEB自动化、安卓端自动化、接口自动化,但是始终未正真明白自动化的意义或是价值,现在突然顿悟,测试工作中最大的痛点就是重复,减少工作中的痛点才是自动化最大的价值。所以自动化的第一步不是选用什么语言或是框架,而是能真正分析出自己工作中的痛点。

二、性能测试范围

      简言之,性能测试的目的就是分析性能瓶颈和调优,可是如何分析性能瓶颈?性能测试过程中应该关注那些指标?这些问题都是在我性能测试学习过程中比较迷茫的问题,于是按照自己的理解,整理了性能测试的主要范围,详见下图:

 

性能测试范围

    实际项目过程中,我主要是做接口性能测试,因此主要关注的是系统指标和服务端资源占用率。

、性能测试过程

性能测试可以过程可以简单的分为四个步骤,如下图:

性能测试流程

      性能测试的实际过程中遇到了两个难点:“明确性能指标”和“结果分析调优”;前者的难点在于没有人可以给我提供性能指标,性能良好的指标是什么?怎样的并发数、吞吐率或是响应时间符合性能预期标准?一切都是未知数,感觉自己在摸石头过河。后者的难点不言而喻,也是整个性能测试的难点。性能分析的目的在于分析出系统的性能瓶颈,性能调优的目的则是使系统可以具备高可用性、高可靠性和高并发性。

       同样,在性能测试过程中也遇到了两个痛点:“运行测试脚本”和“生成测试报告”;前者主要是测试场景复杂,需要不断的重复运行脚本,后者是需要手工整理数据、分析测试结果然后生成测试报告。前文中有提及到“自动化最大的价值就是减少工作中的痛点”,经常重复运行脚本是否可以批量执行?测试报告是否可以自动生成?因此针对这两个痛点,如何实现自动化将在下文解析。

自动化框架介绍

JMeter+Ant是比较常见的自动化测试框架,由于JMeter、Ant都是由java开发的,所以此性能测试框架具有良好的跨平台性;下图是按自己的理解绘制的自动化框架图:

JMeter+Ant自动化测试框架

大体逻辑如下:

(1)Ant通过XML文件进行构建,所有的构建信息配置在build.xml文件中,通过调用target树来执行各种任务;因此,性能测试过程中,可以按照不同的测试场景,设计测试脚本,然后通过Ant进行构建,实现批量执行。

(2)Ant通过测试结果(jtl文件)构建生成html测试报告,并且输出在指定路径下;这一步即可解决第二个痛点“手工整理性能测试报告”。

(3)根据build.xml文件中配置的邮件信息,将html测试报告自动发送到指定的邮箱;

五、环境搭建

Java安装

1、Java下载地址:https://www.java.com/zh_CN/

2、Java 环境变量配置

(1)设置路径:我的电脑—>属性—>高级—>环境变量;

(2)在【系统变量】新增JAVA_HOME,变量为JDK的路径;

(3)PATH中添加 C:\Program Files\Java\jdk1.8.0_05\bin;

3、检验是否配置成功

(1)cmd进入命令行,输入:java -version,显示出java 的版本信息即配置成功;

JMeter安装

1、JMeter下载地址:http://jmeter.apache.org/download_jmeter.cgi

2、JMeter 环境变量配置

(1)设置路径:我的电脑—>属性—>高级—>环境变量:

(2)在【系统变量】新增JMETER_HOME,变量为jmeter的路径

(3)PATH中添加%JMETER_HOME%\bin;

3、检验是否配置成功

(1)cmd进入命令行,输入:jmeter -v,显示出JMETER的版本信息即配置成功;

Ant安装

1、Ant下载地址:http://ant.apache.org/bindownload.cgi

2、Ant 环境变量配置

(1) 设置路径:我的电脑—>属性—>高级—>环境变量:

(2)在【系统变量】新增ANT_HOME,变量为ANT的路径

(3)PATH中添加 D:\apache-ant-1.9.9\bin;

3、检验是否配置成功

(1)cmd进入命令行输入:ant -version,显示出Ant的版本信息即配置成功;

六、构建步骤

1、测试准备

(1)JMeter脚本按测试计划选中进行保存,如果按线程进行保存,构建时会报错,后面问题汇总模块会提到,例如保存为TestPlan.jmx。

(2)新增构建文件的文件夹,例如在D盘根目录下新增文件夹“JMeterTest”,里面再新增以下文件夹

(3)修改配置文件:jmeter.properties

文件路径:%JMETER_HOME%\bin\jmeter.properties

将jmeter.save.saveservice.output_format=csv改为

jmeter.save.saveservice.output_format=xml,去掉前面备注的#号。

2、Ant构建

      Ant是用xml格式来进行构建的,默认文件名称为build。构建文件的默认地址为%JMETER_HOME%\extras\build.xml,但是为了构建方便,我们将xml文件放在我们自己目录下,并且根据自己的需要自定义构建内容。

(1)在新增目录D:\JMeterTest\XML下新增build.xml,ant来定义测试活动,具体的内容都在build.xml中进行配置。

(2)build.xml中构建活动定义完成后,cmd进入命令行,进入build.xml的目录下输入ant,回车执行,如下图提示BUILD SUCCESSFUL即可成功。

(3)本地目录下 D:\JMeterTest\HTML,可查看到测试报告;查收邮件,附件也收到了HTML测试报告,如下截图:

(4)本地目录下 D:\JMeterTest\JTL,可看的生成的测试结果文件,可用Jmeter聚合报告的预览进行查看,见截图:

截止目前,我们已经基本实现了接口测试自动化,如果要实现性能测试自动化,还要对生成测试报告模板的代码进行优化。

七、报告优化

1、报告增加性能指标

JMeter性能测试中,我们主要会关注聚合报告中Average time、Throughput、90% Line等指标,因此我们在测试报告中增加TPS(Throughput)90% Line等指标,

(1)在build.xml的代码中可以看出测试报告调用的模板是%JMETER_HOME%\extras 路径下的jmeter-results-detail-report_21文件,

(2)因此我们在jmeter-results-detail-report_21文件中进行修改,小编自己修改了很久,但是TPS得值总是不显示,最后参考了以下博客文章得以解决,参考文章https://www.cnblogs.com/jaychang/p/5881525.html在此感谢作者无私的代码分享。

(3)由于该模板的代码非常多,优化后的模板代码可以在我的CSDN上进行下载;下载地址:http://download.csdn.net/download/okkczf/10233753

2、加接口详情的报告

该报告的原始模板也可以在网上进行下载,下载地址:http://blog.csdn.net/luozhuwang/article/details/51889159(感谢作者的分享)

(1)将该模板 jmeter.results.detail.me.xls 放在%JMETER_HOME%\extras路径下;

(2)要想调用该模板输出测试报告需要在build.xml文件中增加以下代码,我用reportdetail定义该测试活动;

(3)cmd进入命令行,进入build.xml的目录下输入ant,回车执行后,邮件即可收到两个HTML附件,第一个附件为测试报告,第二个附件即为增加的接口测试详情;

接口测试详情如下截图:

以上代码也可以在我的CSDN上下载:

http://download.csdn.net/download/okkczf/10220295

八、遇到问题

本文为JMeter+Ant实现性能测试自动化过程所有遇到的问题的整理汇总

(1)ant构建遇到问题:1字节的UTF-8序列的字节1无效;

解决方法:build.xml中UTF-8改为UTF8;

(2)ant构建遇到问题:运行ant 报错Could not find the TestPlan class!

解决办法:运行的jmeter脚本 TestPlan.jmx要测试计划层做保存,而不是在threads层做保存。

(3)ant构建时遇到如下报错:

解决办法:下载mail-1.4.7.jar,放在 D:\apache-ant-1.9.9\lib 目录下

(4)生成报告存在的问题:

生成的报告中Min time 和Max time的时间显示为NaN,Date report: date not defined ,如下截图:

解决办法:

(1)将apache-jmeter-3.2\lib中的serializer-2.7.2.jar、xalan-2.7.2.jar复制到apache-ant-1.9.9\lib中即可解决问题(1);

(2)build.xml代码中增加以下内容


注意事项:变量${time}在代码中的定义 ,如果两处名称不一致则构建失败;







      截止目前,Jmeter+Ant的性能自动化框架已经搭建完成,如果需要你也可以使用Jenkins集成,本文中暂不介绍Jenkins的配置。文章依然存在很多的不足,沐沐会继续努力争取以后分享更多有价值的干货。古人云“The more we share,   the more we have”,将分享进行到底...

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,088评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,715评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,361评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,099评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,987评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,063评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,486评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,175评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,440评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,518评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,305评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,190评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,550评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,152评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,451评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,637评论 2 335

推荐阅读更多精彩内容