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安装.jpg

解压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文件读取,稍后会介绍

http请求.jpg

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安装包

antZip.jpg

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

推荐阅读更多精彩内容