美文网首页
1、Jmeter入门

1、Jmeter入门

作者: Kevin_Luo | 来源:发表于2019-07-10 14:18 被阅读0次

1. 安装

官方网站:http://jmeter.apache.org/

2. 快速入门

2.1 使用模板,通过"文件->Templates"即可使用Jmeter默认的模板进行生成计划
测试计划

测试计划 : Jmeter测试脚本的根节点

  • 用户定义的变量 : 可在此设置用户全局变量
  • 独立运行每个线程组 , 若计划中有多个线程组,设置此项可以生效, 不设置时每个线程组同时运行
  • Run teardown Thread Groups after shutdown of main threads , 关闭主线程后运行teardown 程序来正常关闭线程组
  • 函数测试模式, 在调试脚本的过程中,我们可能需要获取服务器返回的详情信息,就可以选择此项,会记录较多的数据,但会影响测试效率, 所以执行性能测试时请关闭此项
  • Add directory or jar to classpath , 把测试需要依赖的jar包或包所有的目录加入类路径. 但建议大家把依赖包加入%JMETER_HOME%\lib目录下.

测试计划Templates 中,默认生成三个配置元件.
分别是:用户定义的变量, HTTP请求默认值, HTTP Cookie管理器.
它们作用于全局

User Defined Variables HTTP Request Defaults HTTP Cookie Manager

IE访问Web页面时会记录Cookie信息,Jmeter通过加入HTTP Cookie Manager来自动记录Cookie信息, 属性选择默认即可

2.2 测试计划四要素:
  1. 脚本中测试计划只能有1个
  2. 测试计划中至少有一个线程组
  3. 至少要有一个取样器
  4. 至少要有一个监听器
2.3 添加线程组

通过"添加->Threads->线程组" 进行添加线程组

image.png

设置线程数属性,一线程即代表一用户,通过设置线程数即可模拟大量用户负载的情况
循环次数即单个线程循环执行的次数


线程属性设置
2.4 为线程组添加逻辑控制器
添加逻辑控制器

控制器分多种:事务控制器,如果控制器,循环控制器,简单控制器,随机控制器等.可根据需求进行组合应用.

2.5 为控制器添加cookie管理器和用户参数,方便后续的控制器进行调用
Cookie管理器

该控制器内的请求会共用该Cookie

用户参数

该控制器内所有请求,都可通过${参数名}的方式调用这些参数

2.6 为控制器添加一个取样器(Http 请求)
Http 请求

取样器也有多种,基础涵盖我们常见的各种协议,如Http,FTP,JAVA,JMS,LDAP,MAIL,MongoDB,SMTP,SOAP,TCP,Junit,还支持BeanShell脚本.我们这里使用最常用的HTTP 请求即可

2.7 编辑取样器(Http 请求)
编辑取样器

在该请求内,调用了全局用户自定义参数${web_ip},和web_port


HTTP请求
  • web服务器 : 指定Http 请求的主机地址, 不需要加上"http://" , Jmeter自动会加上, 普通 web服务器端口号默认是80, 邮箱端口一般是443
  • Timeouts : 指定超时时间 , 单位是毫秒.Connect指定连接超时时间, Resopnse 指定响应超时时间.
  • Content encoding : 默认iso8859
  • 路径 : 除去主机地址部分的访问链接
  • 跟随重定向 :
2.8 添加配置元件(请求信息头管理器)
添加Header管理器

为对应的请求添加Header信息

HTTP信息头管理器

管理Header信息, 如User-Agent, Content-Type , Accept , Referer, Cookie等

2.9 添加集合点,模拟多个请求同一时刻发送的场景
选择定时器 同步定时器

定时器有多个种类:同步定时器,固定定时器,随机定时器等,可根据业务需求进行选择.我们在这里使用Synchronizing Timer同步定时器

2.10 使用关联

在第一个Http Requst 中新建一个后置处理器(正则表达式提取器),在Response的值提取到变量中,提供给别的Http Request 使用.

后置处理器列表 正则表达式提取器

通过正则提取出来的值,赋值给了变量名为itemDealMoney

新建第二个Http 请求,请在参数中调用${itemDealMoney} 中的数据即可

image.png
2.11 添加断言

选择HTTP 请求, 右键 添加-> 断言-> 响应断言.

添加断言

在断言中添加 要测试的模式


添加断言响应
  • Apply to 应用范围
    • Main sample and sub-samples : 匹配范围包括当前父取样器并覆盖至子取样器
    • Main sample only : 匹配范围是当前父取样器
    • Sub-samples only : 仅匹配子取样器
    • Jmeter Variable : 支持对Jmeter变量值进行匹配
  • 要测试的响应字段
    • 响应文本 : 响应服务器返回的文本内容,HTTP排除Header部分
    • Document(text) : 对文档内容进行匹配
    • URL样本 : 匹配URL链接
    • 响应代码 : 匹配响应代码,如200
    • 响应信息 : 匹配响应信息, 如处理成功返回"OK"字样
    • Response Headers : 匹配响应中的头信息
    • Ignore Status : 一个请求有多个响应断言 , 其中一个响应断言选中此项,当第一个响应断言失败时可以忽略此响应结果,继续进行下一个断言,若下一断言成功,则还是可以判断事务成功.
  • 模式匹配规则
    • 包含 : 响应内容包括要匹配的内容,即代表响应成功
    • 匹配 : 响应内容要完全匹配需要匹配的内容,即代表响应成功,大小写不敏感,支持正则
    • Equals : 响应内容要完全匹配需要匹配的内容才代表响应成功,大小写敏感,需要匹配内容是字符串非正则
    • Substring : 响应内容包含需要匹配的内容才代表响应成功,大小写敏感,需要匹配内容是字符串非正则
    • 否 : 选择Equals 与Substring 的是字符串,大小写敏感,有时会响应rwmt,hx时可选择此项,会降低匹配级别,类似降到"包括","匹配"的级别,这样就可以响应成功.
  • 要测试的模式 :
    • 填入你需要匹配的字符串或正则表达式,注意要与模式匹配规则搭配好.
2.12 添加"断言结果" 查看 "断言" 执行的结果.

选中线程组右键 添加 -> 监听器-> 断言结果


断言结果 image.png
2.13 添加监听器(View Results Tree)查看运行结果
image.png
2.14 运行测试
运行测试

脚本就全部写好了, 运行下,看下最终结果


聚合报告
  • Label : 请求别名
  • Sample : 执行多少次取样
  • Average : 平均响应时间,单位毫秒
  • Median : 响应时间中间值
  • 90% Line : 90%事务响应时间范围
  • Min : 最小响应时间
  • Max : 最大响应时间
  • Error% : 出错率
  • Throughput : 吞吐量,可理解为TPS
  • KB/sec : 数据传输量,单位KS
Debug Sampler

通过Debug Sampler可以查看到脚本执行中,所以变量的值

3. Jmeter运行原理

Jmeter运行原理
控制机 : 运用多台Jmeter负载机进行性能测试时,被选中为管理机的那台机器即是控制机
负载机 : 向被测试应用服务器发起负载的机器

控制机发送指令启动线程->负载机运行脚本,回传状态(包括测试结果)->控制机收集结果并显示.
JMeter是以线程的方式运行的,通过线程组来驱动多线程运行测试脚本,对被测服务器发起负载,每一个负载机上都可以运行多个线程组。并且Jmeter不仅可以在GUI方式完成,还可以使用命令行,命令行的运行方式对于负载机的资源消耗会更新.

3.2 Jmeter元件运行顺序

(1) 配置元件
(2) 前置处理器
(3) 定时器
(4) 取样器
(5) 后置处理器
(6) 断言
(7) 监听器
脚本执行顺序容易引起混乱,所以在开发脚本过程中,可按照层级先后顺序来添加你的元件.

4. 基本功能介绍

4.1 Jmeter 函数助手
函数助手菜单 Random函数举例
  • Name of variable in which to store the result (optional) : 如果填了,则运行脚本后可以在Debug Sampler看到这个变量的值

5. Jmeter 配置代理进行录制

5.1 在浏览器配置代理
在浏览器配置代理
5.2 在Jmeter中配置代理
Jmeter中配置代理 HTTP代理服务器
  • 目标控制器 : 决定将来录制的脚本放在哪个目录
  • 分组 : 录制脚本时将会增加很多个节点, 通过它可以给这些节点分个组, 即可把一个URL看成一个组.
    点击启动, 然后在浏览器中浏览WEB页面,即可录制下这些HTTP请求.

6. Jmeter参数化

添加配置元件 CSV Data Set Config元件
  • Filename : 引用文件地址
  • File encoding : 读取参数文件的编码格式
  • Variable Names : 定义的参数名称
  • Delimiter : 用来分隔参数文件的分隔符
  • Allow quoted data? : 如果选择True, 则可允许拆分完成的参数里有分隔符出现
  • Recycle on EOF : 如果选择True, 则参数文件循环遍历,False参数文件遍历完成后不循环.
  • Stop thread on EOF : 和Recycle on EOF的False选择复用;True停止测试,False不停止测试
  • Sharing mode : 参数的三种共享模式, All threads , Current thread group , Current thread.

7. 非GUI运行测试

#方式1
java -jar %JMETER_HOME%\bin\ApacheJMETER.jar -n -t %JMETER_HOME%\script\Jforum4-1-01.jmx -r -l result.jtl

#方式2
%JMETER_HOME%\bin\jmeter -n -t %JMETER_HOME%\script\Jforum4-1-01.jmx -l %JMETER_HOME%\result\results.jtl

把jtl文件转成测试报告

#第一种:在测试过程中将jtl转成测试报告(在jmeter的bin目录下执行)
./jmeter -n -t xxx.jmx -r -l xxx.jtl -e -o /home/tester/apache-jmeter-3.0/resultReport
    -n : 非GUI 模式执行JMeter
    -t : 指定运行的测试脚本地址与名称,可是相对路径或绝对路径
    -r : 远程将所有agent启动用在分布式测试场景下,不是分布式测试只是单点就不需要-r
    -l : 指定生成测试结果的保存文件, jtl 文件格式
    -e : 测试结束后,生成测试报告
    -o : 指定测试报告的存放位置
    -o 指定的文件及文件夹,必须不存在 ,否则执行会失败,对应上面的命令就是resultReport文件夹必须不存在否则报错

#第二种:使用之前的测试结果,生成测试报告
./jmeter -g xxx.jtl -e -o /home/tester/apache-jmeter-3.0/resultReport

性能参数配置

#打开 %JEMETER_HOME%\bin\jmeter.bat
rem including some tuning recommendations
set HEAP=-Xms512m -Xmx1024m   #设置JVM初始堆大小和最大堆大小
set NEW=-XX:NewSize=128m -XX:MaxNewSize=512m  #设置青年代大小
set SURVIVOR=-XX:SurvivorRatio=8 -XX:TargetSurvivorRatio=50%
set TENURING=-XX:MaxTenuringThreshold=2

使用Ant建立构建文件

<?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/jmeter" />
    <!-- jmeter生成jtl格式的结果报告的路径--> 
    <property name="jmeter.result.jtl.dir" value="/home/htdocs/t8891/report/jtl" />
    <!-- jmeter生成html格式的结果报告的路径-->
    <property name="jmeter.result.html.dir" value="/home/htdocs/t8891/report/html" />
    <!-- 生成的报告的前缀-->  
    <property name="ReportName" value="TestReport" />
    <property name="jmeter.result.jtlName" value="${jmeter.result.jtl.dir}/${ReportName}.jtl" />
    <property name="jmeter.result.htmlName" value="${jmeter.result.html.dir}/${ReportName}.html" />
    
    <target name="run">
        <antcall target="test" />
        <antcall target="report" />
    </target>
    
    <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="/home/htdocs/t8891" includes="App20180508.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">
        <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-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>    
    
</project>

Ant采用XML格式来建立 构建文件,默认名为build.xml.在脚本目录,使用以下命令:

ant run

相关文章

网友评论

      本文标题:1、Jmeter入门

      本文链接:https://www.haomeiwen.com/subject/cxjrcctx.html