Jenkins集成Jmeter进行Web自动化性能测试
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Jenkins集成Jmeter进行Web自动化性能测试
By huangweihua
Jenkins集成Jmeter进行Web自动化性能测试 (1)
一、安装Jmeter (2)
1.1下载解压版: (2)
1.2解压 (2)
1.3配置环境变量 (3)
1.4调试 (4)
二、安装badboy工具 (5)
2.1下载: (5)
2.2安装 (5)
三、录制Jmeter脚本 (6)
四、Jenkins集成Jmeter方式一:CMD来执行Job (13)
4.1下载插件 (13)
4.2新建一个Job (14)
4.3在Job里面增加一个构建步骤来执行压力测试 (14)
4.4在Job里面增加一个获取测试结果的步骤 (14)
4.5执行Job并查看结果 (15)
五、Jenkins集成Jmeter方式二:Ant来执行Job (16)
5.1、Ant安装 (16)
5.2、Jmeter的配置修改 (19)
5.3、编写build.xml (20)
5.3、Jenkins的Job配置 (25)
5.4、执行job并查看结果 (26)
问题 (28)
一、安装Jmeter
1.1下载解压版:
下载地址:/download_jmeter.cgi
1.2解压
我下载的是2.9版本,解压即可
1.3配置环境变量
新增JMTER_HOME变量
在path中增加Jmeter的的路径
1.4调试
在cmd里面输入:jmeter –h
二、安装badboy工具
badboy是录制Jmeter性能测试脚本的工具
2.1下载:
下载地址;.au/
2.2安装
按步骤安装即可
三、录制Jmeter脚本
这里介绍badboy来录制Jmeter脚本1、输入web地址并点击浏览
2、增加操作步骤并命名步骤
3、输入用户名和密码并点击“登录”
4、结束录制
5、导出Jmeter可运行的脚本
使用Jmeter优化脚本
(1)打开Jmeter工具,选择“文件”-->“打开”选择刚才保存的文件(.jmx类型),将文件导入进来了。
(2)配置线程数量,即向服务器发送的请求并发数量
(3)配置登录用户名和密码的参数化
增加一个CSV配置元件用来存放账号和密码。
四、Jenkins集成Jmeter方式一:CMD来执行Job
这种方式是通过cmd来运行执行Jmeter的负载脚本,用Performance插件来生成图表。
4.1下载插件
需要Jenkins的Performance plugin插件来生成图表报告。
4.2新建一个Job
4.3在Job里面增加一个构建步骤来执行压力测试
4.4在Job里面增加一个获取测试结果的步骤
获取的是所有的监控文件数据,便于在Jenkins执行结果里面对每次的性能监控进行比较。
4.5执行Job并查看结果
下图的结果是其他性能测试结果截图,而不是上面登录功能的监控结果。
五、J enkins集成Jmeter方式二:Ant来执行Job
通过Ant来执行Jmeter的负载脚本,并讲Jmeter测试结果由jtl文件转换成html报告。
Jmeter脚本这里用另外一个脚本,跟前一章节不一样。
5.1、Ant安装
(1)下载Ant并加压
(2)添加Ant所需依赖包
在Jmeter的extras下找到ant所需的jar包
(3)复制到Ant的lib目录下
(4)配置Ant的环境变量
(5)调试Ant
在cmd命令里输入ant -v 查看ant的版本号
5.2、Jmeter的配置修改
1、修改jmeter.properties文件,增加输入内容
修改bin目录下的jmeter.properties文件,将相关都置为true,以便在详细报告里面能查看到更多数据
2、下载jmeter.results.shanhe.me.xsl样式文件,并放入到extras目录下
此文件是定义详细报告样式的文件。
5.3、编写build.xml
1、Ant脚本简单介绍
Projects
每一个build.xml只有一个Project,Project表示一个工程吧,里面可以知道这个工程的全局属性。
这个比较固定,照写就可以。
如下:
[html]view plain copy
1.<project name="helloWorld"basedir="."default="main">
2.......
3.<target name="main"depends="clean,run"/>
4.</project>
熟悉name顺便定义一个就行。
basedir指定相对路径的基础,这里是指定了当前路径。
default是指如果执行ant时不指定哪一个target时,就使用这个默认的。
Targets
target翻译过来就是目标吧,每一个project都会包含很多的目标,例如编译/compile、执行/run、清理clean、打包/package等等。
特别是打包,我们可能要针对不同的客户打不同的包给他们,这时候就显得得心应手了。
例子如下:
1.<target name="run"depends="jar">
2.<java fork="true"classname="${main-class}">
3.<classpath>
4.<path refid="classpath"/>
5.<path location="${jar.dir}/${}.jar"/>
6.</classpath>
7.</java>
8.</target>
属性name是这个target的名字,可以被其它的target引用。
我们看depends的熟悉,jar就是另外一个target的name。
depends是指定target之间的依赖关系,这样就省去我们很多的麻烦。
例如,在run之前,需要先执行compile这个target,否则就没有东西可以run了。
通过depends的指定,我们在想run 的时候就run吧,Ant自然会根据我们的depends先执行其它的依赖,省心省力。
Tasks
而要实现一个目标,需要执行很多的任务的,因此Tasks是被包含在Targets里面的。
从上面的例子可以看到,<java />这个元素就是一个task。
这是编写build.xml的关键,因为这个才是真正被执行的。
Ant内置了很多的Task,如复制文件,删除文件夹,压缩文件等等,下面的链接
Properties
property相对于C++里面的宏吧,或者Java中的constant。
这是一个key-value的形式出现的。
这个key 可以在其它地方中引用,通过${key}这种形式。
如:
[html]view plain copy
1.<property name="build.dir"location="build"/>
2.<target name="init">
3.<mkdir dir="${build.dir}"/> //创建路径
4.</target>
这个${build.dir}现在是代表了build这个相对路径文件夹,我还可以在不改变build.xml的情况下,通过Ant的执行参数来改变这个值。
如Ant -Dbuild.dir = build-debug。
2、书写build脚本如下:
<?xml version="1.0" encoding="UTF-8"?>
<project name="ant" default="run" basedir=".">
<tstamp>
<format property="time" pattern="yyyyMMddhhmm" />
</tstamp>
<property environment="env"/>
<property name="ReportName" value="TestReport" />
<property name="jmeter.home" value="E:\software\apache-jmeter-2.9" />
<property name="jmeter.result.dir" value="${env.WORKSPACE}/results/${env.BUILD_ID}" />
<property name="jmeter.result.jtlName" value="${jmeter.result.dir}/${ReportName}.jtl" />
<property name="jmeter.result.htmlName" value="${jmeter.result.dir}/${ReportName}.html" />
<property name="jmeter.result.htmlName-detail" value="${jmeter.result.dir}/${ReportName}-detail.html" />
<target name="run">
<echo message="start..."/>
<antcall target="clean" />
<antcall target="test" />
<antcall target="report-sumarry" />
<antcall target="report-detail" />
</target>
<target name="clean">
<mkdir dir="${env.WORKSPACE}/results/${env.BUILD_ID}" />
</target>
<target name="test">
<taskdef name="jmeter" classname="org.programmerplanet.ant.taskdefs.jmeter.JMeterTask" />
<jmeter jmeterhome="${jmeter.home}" resultlog="${jmeter.result.jtlName}">
<testplans dir="${env.WORKSPACE}" includes="test.jmx" />
<property name="jmeter.save.saveservice.output_format" value="xml"/>
</jmeter>
</target>
<path id="xslt.classpath">
<fileset dir="${jmeter.home}/lib" includes="xalan*.jar"/>
<fileset dir="${jmeter.home}/lib" includes="serializer*.jar"/>
</path>
<target name="report-sumarry">
<tstamp> <format property="report.datestamp" pattern="yyyy/MM/dd HH:mm" /></tstamp>
<xslt
classpathref="xslt.classpath"
force="true"
in="${jmeter.result.jtlName}"
out="${jmeter.result.htmlName}"
style="${jmeter.home}/extras/jmeter-results-detail-report_21.xsl">
<param name="dateReport" expression="${report.datestamp}"/> </xslt>
<copy todir="${jmeter.result.html.dir}">
<fileset dir="${jmeter.home}/extras">
<include name="collapse.png" />
<include name="expand.png" />
</fileset>
</copy>
</target>
<target name="report-detail">
<tstamp> <format property="report.datestamp" pattern="yyyy/MM/dd HH:mm" /></tstamp>
<xslt
classpathref="xslt.classpath"
force="true"
in="${jmeter.result.jtlName}"
out="${jmeter.result.htmlName-detail}"
style="${jmeter.home}/extras/jmeter.results.shanhe.me.xsl">
<param name="dateReport" expression="${report.datestamp}"/> </xslt>
<copy todir="${jmeter.result.html.dir}">
<fileset dir="${jmeter.home}/extras">
<include name="collapse.png" />
<include name="expand.png" />
</fileset>
</copy>
</target>
</project>
5.3、Jenkins的Job配置
1、新建一个空的job保存并执行
2、将Jmeter负载脚本和build.xml复制到工作目录下
3、新建job并配置构建操作
5.4、执行job并查看结果
结果文件目录:
汇总报告如下:
详细报告如下:
问题
问题1:解决图表中文乱码问题
(1)在Jenkins的Jenkins.xml里面配置coding编码为utf-8
(2)在Jmeter里jmeter.properties面配置coding编码为utf-8。