您的位置:首页 > 其它

Jmeter压力测试自动化

2016-02-16 14:08 519 查看
压力测试能不能自动化?当然能,而且也可以进一步加入持续集成,说到底无非就是一个job的事儿。
在越来越快的迭代中,性能测试是否一个系统一辈子只需做一次就够了?
一周一个版本,接口、数据库、代码不断频繁改动,如何保证现有改动不影响性能?
想要做一个千万级用户的应用,任何一点接口修改的失误或者bug,可能对性能的影响都是致命的。

给大家分享一下,目前在项目中做的压力测试自动化相关,有需要的可以参考下
(初步版本,先描述大概思路,如果感兴趣的人多再补充后续)

环境篇——
性能测试工具:Jmeter 2.11
地址:http://jmeter.apache.org/download_jmeter.cgi
持续集成平台:Jenkins 1.606  + 插件 Performance Plugin v1.13
地址:http://jenkins-ci.org/  
           https://updates.jenkins-ci.org/download/plugins/performance/
建议使用最新版本,之前的版本都会有各种奇怪的bug,已踩过深坑…...

1、安装Linux Jenkins
使用64位Linux做为服务器,安装tomcat+Jenkins 形式部署 jenkins,压力测试生成的 jtl 文件可能会比较大,如果 tomcat 分配的内存过小,多半会 opps!

2、拷贝tools.jar
部分jdk和公司标装的机器可能没有tools.jar , 从有该 jar 包的目录拷贝一个到对应的jdk 环境变量中,放到 JDK 的 lib 目录下
否则可能会遇到报错:
Unable to locate tools.jar. Expected to find it in /usr/lib/jvm/java-1.6/lib/tools.jar

3、设置 JMETER_HOME
在运行性能测试的执行及上,配置 JMETER_HOME
否则可能出现报错:
You must set jmeterhome to your JMeter install directory

4、拷贝 ant-jmeter-1.1.1.jar 
为了能够在后续 ant 脚本中使用 jmeter task,必须要将 ant-jmeter-1.1.1.jar 拷贝到执行机 ant 的 classpath 中(即拷贝到 ant 的 lib 目录中),这个 jar 包一般可以在 jmeter 的目录 lib/extras 中找到
否则可能出现报错:
task class org.programmerplanet.ant.taskefs.jmeter.JMeterTask cannot be found

编写篇——
Jmeter怎么进行性能测试?不再该篇文章中赘述

1、生成性能测试案例 jmx 文件
性能测试的每个测试场景在 Jmeter 中都可以生成
尽量去除掉所有不必要的 listener ,只留一个聚合报告即可。
生成的 jmx 文件名字中不要含有中文,否则生成报告中会有乱码

2、编写ant 脚本
可参考如下 build.xml 脚本,脚本可以通用,只需要在不同 job 中设置对应要运行的 jmx 名称即可
最后一段被注释掉的,可以用于将 jtl 生成 html 报告,方便人阅读,但是同时加上这个target 在转换时候很吃 jenkins 的内存。诸君可自行选择
jmx 性能测试脚本,个人建议无需设置太长运行时间,在项目中目前一般设置为 300s,时间太短性能测试无法有效反映指标,时间越长 生成的 jtl 也越大,影响后续解析 

<?xml version="1.0" encoding="UTF-8"?>
<project name='PerformanceTest'>
<!-- ant-jmeter.jar comes with jmeter, be sure this is the release you have -->
<property name="JMETER_HOME" value="/wls/pawf/tool/apache-jmeter-2.11" />
<property name="properties.path" value="/wls/pawf/tool/apache-jmeter-2.11/bin/jmeter.properties" />
<property environment="env" />
<path id="ant.jmeter.classpath">
<pathelement location="${JMETER_HOME}/extras/ant-jmeter-1.1.1.jar" />
</path>

<taskdef name="jmeter" classname="org.programmerplanet.ant.taskdefs.jmeter.JMeterTask" classpathref="ant.jmeter.classpath" />

<target name="clean">
<delete file="jmeter.log" />
<mkdir dir="${env.WORKSPACE}/results/${env.BUILD_ID}" />

</target>

<target name="run" depends="clean">
<jmeter jmeterhome="${JMETER_HOME}" jmeterproperties="${properties.path}" runremote="true" resultlogdir="${env.WORKSPACE}/results/${env.BUILD_ID}">
<testplans dir="/wls/pawf/testcase" includes="${TestCaseName}.jmx" />
<property name="jmeter.save.saveservice.output_format" value="xml" />
</jmeter>
</target>

<!-- This is not needed for the plugin, but it produces a nice html report
which can be saved usin jenkins's archive artifact feature -->
<!--
<target name="report" depends="test">
&l
4000
t;xslt
basedir="results/jtl"
destdir="results/html"
includes="*.jtl"/>

style="${JMETER_HOME}/extras/jmeter-results-detail-report_21.xsl"/>

</target>

<target name="all" depends="test"/>
--></span>
</project>


运行篇——

1、在 jenkins 上配置 job 进行运行。
     参数化构建过程。使用一个 ant 的 build 文件运行所有的 jmx 性能测试案例。但保持每个 job 只有一个 jmx 案例,各自独立,互不影响。



2、运行 ant ,直接运行指定的build文件即可,注意执行机上需要有 ant 的环境变量。在我做的这个项目中,通过步骤1中的 String Parameter 所有job都使用一个build文件。



3、jenkins插件解析 jtl 性能测试结果文件
这里就是上文所说的Performance Plugin 插件出场了,在构建后步骤中选择 “Publish Performance test result report” 
配置生成的 jtl 文件的路径位置
正常情况下一般配置这个就可以了,不过在进行单个性能测试时候,我们可以好好的利用该插件中 “Use Relative thresholds for build comparison”,可以比较平均时间、中位数时间和 90%Line时间。



勾选 “compare with previous Build” 可以与上一次运行的性能测试结果比较。
勾选“compare with Build number”可以与指定的哪一次运行的性能测试结果比较,0为不比较。
其中“Unstable % Range”表示波动 ±百分比范围内,将本次运行结果置为 Unstable

       “Failed % Range” 表示波动 ±百分比范围内,将本次运行结果置为 Failed

如下图,会计算出两次运行之间 90%Line 时间的差值为148.0,和相差的百分比为 5.37%

 


4、测试结果图表
这是最简单的......也是最直观的。
如下图,经过至少两次运行之后,job 会运行出对应的性能测试趋势图。
第一幅图:每秒吞吐量 TPS 趋势图
第二幅图:响应时间趋势图,红色——90%Line响应时间
                                               蓝色——平均响应时间
                                               绿色——中位数响应时间
第三幅图:错误率趋势图



先到这儿 ……..等不忙了再详细补充。 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息