jmeter+ant+Jenkins持续性能测试
jdk安装
jmeter基于Java,所以使用jmeter前需要安装jdk,目前最新jmeter版本需要JDK8
jmeter安装
下载jmeter zip包
jmeter官网:https://jmeter.apache.org/
下载最新版本jmeter zip包,2018/8/22当前最新版本为4.0,需要JDK8,如下图:
解压jmeter zip包
mac环境下,将zip解压到/user/loacal路径下
jmeter解压路径.jpg
jmeter环境变量配置
修改mac的.bash_prifile配置文件,便于直接唤起jmeter
# add jmeter
export JMETER=/usr/local/apache-jmeter-4.0
export CLASSPATH=$JMETER/lib/ext/ApacheJMeter_core.jar:$JMETER/lib/jorphan.jar:$JMETER/lib/logkit-2.0.jar:$CLASSPATH
export PATH=$PATH:$JMETER/bin
jmeter安装验证
iTerm中输入:jmeter -v 查看jmeter版本
jc@jc:~$ jmeter -v
_ ____ _ ____ _ _ _____ _ __ __ _____ _____ _____ ____
/ \ | _ \ / \ / ___| | | | ____| | | \/ | ____|_ _| ____| _ \
/ _ \ | |_) / _ \| | | |_| | _| _ | | |\/| | _| | | | _| | |_) |
/ ___ \| __/ ___ \ |___| _ | |___ | |_| | | | | |___ | | | |___| _ <
/_/ \_\_| /_/ \_\____|_| |_|_____| \___/|_| |_|_____| |_| |_____|_| \_\ 4.0 r1823414
Copyright (c) 1999-2018 The Apache Software Foundation
iTerm中输入:jmeter 启动jmeter的GUI mode
jc@jc:~$ jmeter
================================================================================
Don't use GUI mode for load testing !, only for Test creation and Test debugging.
For load testing, use NON GUI Mode:
jmeter -n -t [jmx file] -l [results file] -e -o [Path to web report folder]
& increase Java Heap to meet your test requirements:
Modify current env variable HEAP="-Xms1g -Xmx1g -XX:MaxMetaspaceSize=256m" in the jmeter batch file
Check : https://jmeter.apache.org/usermanual/best-practices.html
================================================================================
jmeter用例编写
线程组
作用:设置并发用户数,循环次数,循环时间的模块
新建路径: TestPlain -> Threads(Users) -> Thread Group
线程组.jpg
模块属性:
number of Threads(users):并发用户数
Ramp-Up Period(in seconds):全量并发启动的完成时间
Loop Count: Forver/n, Forver:一直运行;n:执行次数
Duration(seconds):循环时间
如下图,设置为10并发,持续30秒,其中1秒内并发数达到10
线程组设置举例.jpg
HTTP Request
作用:新建http请求
新建路径:
线程组 -> Add -> Sampler -> HTTP Request
http.jpg
模块属性:
Protocol [http] //协议类型,默认为http,可选择https
Server Name or IP //请求域名,或IP+端口号
Method // GET / POST请求
Path //请求路径
Send Parameters //请求参数
如下请求
https://xxx.xxx.163.com?_tdchannel={tdchannel} & sdkAuth={sdkAuth}
设置如下图,其中{tdchannel},{sdkAuth}采用CSV文件读取,稍后会介绍
CSV参数读取
作用:从CSV文件中读取数据,作为HTTPS的请求
新建路径:
线程组 -> Config ELement -> CSV Data Set Config
csv参数读取.jpg
模块属性:
Filename //CSV文件路径
Variable Name //定义变量名
Delimiter //CSV分割符,模式使用","
Sharing mode //作用域,默认选择全域,All thread
如下图,
从指定路径读取csv文件,
csv文件第一列变量名定义为channel,第二列变量定义为sdkAuth
分割符为","
作用域为全域
定义参数变量channel,sdkAuth后,可在请求中使用该变量
csv设置.jpg
正则表达式提取
作用:从请求结果中按正则表达式提取参数,即动态提取参数
新建路径:
Http请求 -> Add -> Post Processors -> Regular Expression Extractor
正则参数提取.jpg
模块属性:
Apply to //使用作用域,默认选择 Main sample only
Field to check //匹配作用域,如选择Response Headers, 在响应请求头匹配正则表达式
Name of created variable //参数变量名
Regular Expression //正则表达式
Template //匹配参数
如下图,定义正则匹配参数:
定义参数名为ch5sdk
参数使用域:请求全局
正则匹配范围为Response Headers
正则表达式为:_ch5sdk.us.c.v.online=(.*); Domain=,即匹配online的值
正则参数简介.jpg
观察结果树
作用:查看性能测试结果
新建路径:
线程组 -> Listener -> View Result Tree
结果树.jpg
模块属性:
Sampler result // 请求基本信息
Request // Request数据
Response data // Response 数据
结果树rs.jpg
ant安装
官网:
http://ant.apache.org/bindownload.cgi
下载最新版本的ant zip安装包
解压ant zip包到指定文件
ant安装路径.jpg
环境变量设置
# add ant
export ANT_HOME=/usr/local/apache-ant-1.10.5
export PATH=$PATH:$ANT_HOME/bin
安装验证
ant -version
ant验证.jpg
Ant 运行jmeter脚本
配置
1)将 jmeter的extras目录中ant-jmeter-1.1.1.jar包拷贝至ant安装目录下的lib目录中
作用使Ant运行时能够找到"org.programmerplanet.ant.taskdefs.jmeter.JMeterTask"这个类,从而成功触发JMeter脚本
jmeter的jar设置.jpg
2)修改Jmeter的bin目录下jmeter.properties文件的配置:jmeter.save.saveservice.output_format=xml
作用使Jmeter报告输出文件格式为xml
jmeterxml.jpg
Ant执行jmeter脚本
1.jmeter安装目录下新建文件夹
TestReport文件夹:用于保存html的结果报告
TestScrip文件夹:用于保存jmeter的测试脚本
jmeter新建文件夹.jpg
2.运行jmeter脚本
如下图,需要注意2个文件
antBuild.jpg
build.xml:ant根据该文件运行jmeter脚本
build.xml通用模版如下:
<?xml version="1.0" encoding="UTF-8"?>
<project name="ant-jmeter-test" default="run" basedir=".">
<tstamp>
<format property="time" pattern="yyyyMMddHHmm" />
</tstamp>
<!-- 需要改成自己本地的 Jmeter 目录-->
<property name="jmeter.home" value="/usr/local/apache-jmeter-4.0" />
<!-- jmeter生成jtl格式的结果报告的路径-->
<!-- <property name="jmeter.result.jtl.dir" value="/usr/local/apache-jmeter-4.0/TestReport/testToken/jtl"/> -->
<property name="jmeter.result.jtl.dir" value="/Users/jc/.jenkins/workspace/helloWorld/test_token/jtl" />
<!-- jmeter生成html格式的结果报告的路径-->
<!-- <property name="jmeter.result.jtl.dir" value="/usr/local/apache-jmeter-4.0/TestReport/testToken/html"/> -->
<property name="jmeter.result.html.dir" value="/Users/jc/.jenkins/workspace/helloWorld/test_token/html" />
<!-- 生成的报告的前缀-->
<property name="ReportName" value="TestReport" />
<property name="jmeter.result.jtlName" value="${jmeter.result.jtl.dir}/${ReportName}${time}.jtl" />
<property name="jmeter.result.htmlName" value="${jmeter.result.html.dir}/${ReportName}${time}.html" />
<!-- 输出生成的报告名称和存放路径-->
<echo message="${jmeter.result.jtlName}"/>
<echo message="${jmeter.result.htmlName}"/>
<echo message="${jmeter.result.html.dir}"/>
<target name="run">
<antcall target="test"/>
<antcall target="report"/>
</target>
<!--加载jar包,解决显示时间问题-->
<path id="xslt.classpath">
<fileset dir="${jmeter.home}/lib" includes="xalan*.jar"/>
<fileset dir="${jmeter.home}/lib" includes="serializer*.jar"/>
</path>
<target name="test">
<taskdef name="jmeter" classname="org.programmerplanet.ant.taskdefs.jmeter.JMeterTask" />
<jmeter jmeterhome="${jmeter.home}" resultlog="${jmeter.result.jtlName}">
<!-- 声明要运行的脚本。"*.jmx"指包含此目录下的所有jmeter脚本-->
<testplans dir="/usr/local/apache-jmeter-4.0/TestScrip" includes="test.jmx" />
<property name="jmeter.save.saveservice.output_format" value="xml"/>
</jmeter>
</target>
<target name="report">
<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">
<!--显示dateReport的时间-->
<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>
根据个人环境的不同,上述需要修改的模版参数为:
<!-- 需要改成自己本地的 Jmeter 目录-->
<property name="jmeter.home" value="/usr/local/apache-jmeter-4.0" />
<!-- jmeter生成jtl格式的结果报告的路径-->
<property name="jmeter.result.jtl.dir" value="/Users/jc/.jenkins/workspace/helloWorld/test_token/jtl" />
<!-- jmeter生成html格式的结果报告的路径-->
<property name="jmeter.result.html.dir" value="/Users/jc/.jenkins/workspace/helloWorld/test_token/html" />
<!-- 声明要运行的脚本。"*.jmx"指包含此目录下的所有jmeter脚本-->
<testplans dir="/usr/local/apache-jmeter-4.0/TestScrip" includes="test.jmx" />
jmeter脚本xx.jmx
根据build.xml中的testplans节点配置,运行test.jmx
3.运行结果
对应build.xml的路径,输入
ant run
运行结果结果
ant运行结果.jpg
4.查看运行报告
build.xml中设置的jmeter生成html格式的结果报告的路径查看结果
ant测试结果.jpg
html测试结果浏览器查看
html结果.jpg
Jenkins安装
安装Jenkins
官网:https://jenkins.io/index.html
安装方式
1.官网下载zip包
2.brew install jenkins
jenkins环境变量配置
mac 命令行编辑.bash_profile
# add jmeter
export JMETER=/usr/local/apache-jmeter-4.0
export CLASSPATH=$JMETER/lib/ext/ApacheJMeter_core.jar:$JMETER/lib/jorphan.jar:$JMETER/lib/logkit-2.0.jar:$CLASSPATH
export PATH=$PATH:$JMETER/bin
JDK配置
配置路径:
系统管理 -> 全局工具配置 -> JDK
jdk配置.jpg
Ant配置
配置路径:
系统管理 -> 全局工具配置 -> JDK
ant配置.jpg
1.构建一个自由风格的项目
image.png
2.配置构建步骤
参数说明
Ant Version //jenkins全局工具配置过Ant后,点击表单会出现在下拉框中,直接选中即可;
Targets //前一章中提到的build.xml文件中的targets的名字;
Build File //指定build.xml文件的路径以及文件名
image.png
3.jmeter.log授权
命令行输入
ls -lh
chmod 777 jmeter.log
如下图,jmeter.log为可执行文件
image.png
4.运行Jenkins任务
image.png
5.邮件配置
全局配置邮件发送者:
配置路径:
Jenkins的系统管理 -> 系统设置 -> Extended E-mail Notification
image.png
项目配置邮件接收者:
配置路径:
Jenkins项目 -> 配置 -> 构建后操作
参数配置
Project Recipient List //邮件接收者列表,间隔符为","
Content Type //邮件格式,选择“HTML(text/html)”
Default Content //默认邮件模版
Attachments //邮件附件,如test_token/html/*.html,表明html文件夹下所有html都会作为邮件附件
Triggers //高级设置的选项,建议选择运行success/failure-any 都Send To Reciplent List
邮件配置截图如下:
image.png
image.png
附件路径说明
1.Jenkins主目录
查看路径:系统管理 -> 系统设置 -> 主目录
image.png
2.Jenkins工作共建
Jenkins主目录/workspace
image.png
3.Ant执行build.xml配置
Jenkins能够获取工作区间的文件,因此需要修改builder.xml中的参数,将测试结果保存到Jenkins对应项目的工作区间,附件就能正确读取
如下
工作空间路径:
/Users/jc/.jenkins/workspace/helloWorld/
对应build.xml的参数设置为:
<property name="jmeter.result.jtl.dir" value="/Users/jc/.jenkins/workspace/helloWorld/test_token/jtl" />
<!-- jmeter生成html格式的结果报告的路径-->
<property name="jmeter.result.html.dir" value="/Users/jc/.jenkins/workspace/helloWorld/test_token/html" />
验证方法
运行对应项目,查看工作区间是否生成目标附件,如下图
image.png