Jmeter+Maven+Jenkins实现简单性能自动化
Posted 测试那点事儿
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Jmeter+Maven+Jenkins实现简单性能自动化相关的知识,希望对你有一定的参考价值。
Jmeter+Maven+Jenkins实现简单性能自动化
对一个需要长期进行性能监测的接口,最好在每次代码变更之后都能快速做一次性能回归,比较与之前的性能是否发生变化,若发生较大变化能够及时通知开发,方便定位引起性能变化的代码。若不进行这样的监控,在发现系统性能变化时开发可能已经很难定位引起性能变化的代码变更。
使用jmeter对一个新接口进行性能测试,通常需要执行以下几个步骤:
使用jmeter的GUI创建测试计划
将测试计划放到服务器并用命令行执行
结果用jmeter GUI打开,得到详细的性能数据、重复设置多组线程数,寻找性能拐点等。
但是对接口做性能回归时,接口的性能基线已知(拐点的并发线程数及相应的性能数据),这时只需要测试拐点并发线程下的性能即可。只有当性能数据较之前有很大变化时,才可能需要再做一次全量的性能测试,得到新的性能基线。
基于以上的应用场景,本文主要介绍使用Jmeter+Maven+Jenkins实现性能测试的自动化回归,提升工作的效率,降低维护成本。
1
用Maven执行Jmeter压测脚本
Jmeter-maven-plugin是maven里用于运行jmeter的插件,该插件运行时会自动引入jmeter运行所需的类库,所以机器上不需要安装jmeter。对于Jmeter生成的jtl结果文件的解析maven中也已经有了相应的插件jmeter-analysis-maven-plugin。
新建src/test/jmeter目录,将需要执行的jmx文件放在该目录下。Jmeter-maven-plugin插件默认运行${basedir}/src/test/jmeter目录下的所有jmx脚本。其中${basedir} 是maven的内置变量,表示项目根目录,下文中会用到的${project.build.directory} 变量表示构建目录,缺省为target目录。
在pom文件中添加如下插件设置,插件相关的标签设置在后面会详细介绍。
在pom文件所在目录运行命令:mvn verify,通过控制台可以看到如下日志输出:
从日志可以看出,maven执行了jmeter-maven-plugin:1.9.0插件的jmeter目标,通过jmeter命令行执行了指定的jmx文件。这里,maven执行了jmeter-analysis-maven-plugin:1.0.6插件的analyze目标,解析了上一步jmeter生成的jtl结果文件。
注意:jmeter每次生成的jtl文件及jtl解析的报告文件会覆盖上一次的,若需要保存之前生成的结果文件需要自己保存一下。
总体性能结果及吞吐量的报告图如下。Jmeter界面上显示的的一些性能参数,在这里都有。
解析报告中除了这张图,还包括单次性能测试中吞吐量随时间的一个变化情况,如下图所示。
测试脚本选择Jmeter-maven插件默认运行${basedir}/src/test/jmeter目录文件夹中的所有jmx脚本。该插件提供了指定jmx文件及其所在目录的标签。
1.<testFilesIncluded>标签指定运行的jmx脚本文件2.<excludeJMeterTestFile>标签指定不要运行的jmx文件<testFilesIncluded>和<excludeJMeterTestFile>这两个标签都支持正则表达式,匹配相应的文件。如下设置只运行test开头除外的jmx文件。3.<testFilesDirectory>标签指定jmx所在的文件夹压测结果设置
1.<testResultsTimestamp>标签禁用文件名中的时间戳插件默认会在生成jtl文件的文件名开头添加时间戳,如:20170917-getSubDocNews.jtl。若要去掉时间戳可通过<testResultsTimestamp>标签禁用。2.<appendResultsTimestamp>标签设置时间戳放在jtl文件名结尾如getSubDocNews-20170917.jtl。3.<resultsFileNameDateFormat>标签修改jtl文件名中时间戳的格式Jtl文件名中的时间戳默认是YYYYMMDD,可通过<resultsFileNameDateFormat>标签修改,如yyyy-MM-dd-HH-mm-ss。2017-09-17-15-37-13-getSubDocNews.jtl。4.<resultsFileFormat>标签设置结果文件格式插件默认生成的结果文件是jtl格式,因为jtl文件可以通过jmeter GUI查看和统计。Jmeter也支持生成csv格式结果文件,可通过<resultsFileFormat>标签设置。5.<resultsDirectory>标签修改结果文件的路径测试生成的结果文件默认存储到${basedir}/target/jmeter/results目录,可通过<resultsDirectory>标签修改。6.<ignoreResultFailures>标签设置忽略错误若请求有失败,插件会默认停止运行,若要让插件继续运行可通过<ignoreResultFailures>设置。7.<suppressJMeterOutput>标签设置控制台输出运行的日志是默认在控制台打出来的,若要去掉日志可通过<suppressJMeterOutput>设置。8.<skipTests>标签设置忽略jmeter测试若某些情况下暂时不需要执行jmeter测试,可通过如下<skipTests>设置,当执行mvn verify –DskipTests=true时,jmeter的脚本就会被忽略,不执行性能测试。Jmeter-analysis-maven-plugin插件
Jmeter-analysis-maven-plugin生成的测试结果文件,可以通过Jmeter-analysis-maven-plugin插件来解析,支持html、chart、csv等几种格式的结果解析文件。
1.<source>标签指定需要解析的jmeter结果文件2.<targetDirectory>标签指定生成的分析报告文件的存放目录默认为${project.build.directory}3.<generateCSVs>标签设置生成csv格式的报告文件若设置为true,将会生成<category>-sizes.csv和<category>-durations.csv报告文件,保存每个URI的响应的持续时间及响应大小。4.<generateCharts>标签设置生成图表报告文件若设置为true,将会生成<category>-durations.png的图表文件。
2
通过Jenkins-CI执行Jmeter测试
在Jenkins中安装Performance plugin插件,该插件可以解析jmeter和junit的结果文件生成测试报告,并为每个构建绘制图表。新建jenkins job,并进行设置。
设置maven版本、pom文件目录及构建目标。
增加一个构建后操作步骤,Publish Performance test result report。该插件用于显示相关的性能分析结果,如平均响应时间等。Performance report是指展现的报告种类,目前支持JMeter和JUnit。需要指定测试结果文件相对于工作空间根目录的路径,可以指定多个文件和目录,用分号隔开。Jmeter报告默认使用**/*.jtl,**代表pom.xml所在目录。Performance threshold是指标记本次构建为Unstable和Failed时所需的最低测试错误百分比。
增加一个构建后操作步骤,Publish HTML reports。该插件用于指定请求生成的html报告的文件名和路径。勾选“Keep past HTML reports”, 可以在Build History中查看之前请求的报告。本次项目的pom.xml中指定了报告输出目录为${project.build.directory}/jmeter/reports。
使用Jenkins的参数化构建对于JMeter测试非常有用,例如用户可以配置参数定义负载测试的大小(即:线程的数量和迭代)。在jenkins项目的主界面点击左侧的Build with Parameters,即可进入如下的参数设置界面,设置好参数,点击开始构建,即可执行jmeter脚本。
项目执行构建之后,在项目主界面会显示Performance Trend,如下图所示。通过趋势图,可以很方便地看出接口性能随时间的一个变化趋势。
想获取更多测试技能,欢迎添加BestTest交流群:
besttest软件测试交流1群:435092293
besttest软件测试交流1群:384240776
以上是关于Jmeter+Maven+Jenkins实现简单性能自动化的主要内容,如果未能解决你的问题,请参考以下文章
使用jmeter+maven+jenkins实现restful接口自动化测试