美文网首页
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