1、Jmeter入门

2019-07-10  本文已影响0人  Kevin_Luo

1. 安装

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

2. 快速入门

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

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

测试计划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请求
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 请求, 右键 添加-> 断言-> 响应断言.

添加断言

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


添加断言响应
2.12 添加"断言结果" 查看 "断言" 执行的结果.

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


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

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


聚合报告 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函数举例

5. Jmeter 配置代理进行录制

5.1 在浏览器配置代理
在浏览器配置代理
5.2 在Jmeter中配置代理
Jmeter中配置代理 HTTP代理服务器

6. Jmeter参数化

添加配置元件 CSV Data Set Config元件

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

猜你喜欢

热点阅读