关于MacBook Pro

jmeter+ant+Jenkins持续性能测试

2018-08-22  本文已影响263人  龙猫六六

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
上一篇下一篇

猜你喜欢

热点阅读