JMeter3.2入门使用教程
- 背景说明
1.1. 背景简介
JMeter是Apache软件基金会下的一个开源项目,纯java开发的应用工具,可以作为进行负载和压力测试的工具来使用。从最开始时被设计成测试应用程序到现在扩展到了可测试其他功能。
JMeter可以测试静态或动态的资源或是动态的应用程序,并且支持的应用、服务、协议的类型包括有:
1) Web(HTTP、HTTPS(Java、NodeJS、PHP、ASP.NET)、...)
2) SOAP/REST Webservices
3) FTP
4) 通过jdbc的方式操作数据库
5) LDAP
6) JMS(基于中间件的消息)
7) Mail(SMTP、SMTPS、POP3、POP3S、IMAP、IMAPS)
8) TCP
9) Java Objects
支持基于浏览器或本地应用的录制,及构建和调试脚本。
支持以命令行及图形界面方式来运行,可运行在Windwos、Linux、Mac OSX操作系统上。
可基于已有jtl数据文件生成html报告文件,或是在压测完成后生成html报告文件。
支持从html、json、xml、txt的文件中来获取所需要的关联数据。
支持以多线程、多线程组的方式进行不同类别的测试。
支持各类组件的扩展及第3放的开源库扩展:如Maven、Jenkins、Graddle。
- 下载安装
2.1. 下载JDK和JMeter
2.1.1. 下载说明
下载地址:https://archive.apache.org/dist/jmeter/binaries/
2.1.2. 下载JDK
因运行3.2版本的JMeter需要JDK环境,并且需要JDK8+版本,因此还需要下载JDK8的安装包。Oracle官方网站地址:
http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
由于安装包有区分是支持32、64位操作系统,因此,可根据你需要什么操作系统上来运行及位数,来下载对应支持的系统和位数JDK的安装包。其中:X86表示支持32操作系统,x64表示支持64位操作系统。
Windows操作系统位数查看:点击开始菜单-右键计算机-进入的界面-系统栏
(路径:控制面板\所有控制面板项\系统)
Linux操作系统位数查看:
输入命令:uname -a,在结果中出现x86_64,表明系统为64位的操作系统。
2.1.3. 下载JMeter
JMeter官方网站地址:http://jmeter.apache.org/
现在JMeter最新版本为3.2,因此下载3.2版本。如果想在windows上运行,就下载apache-jmeter-3.2.zip包,想在Linux上运行,就下载apache-jmeter-3.2.tgz包。
1) tgz包的下载地址:
http://mirrors.tuna.tsinghua.edu.cn/apache//jmeter/binaries/apache-jmeter-3.2.tgz
2) zip包的下载地址:
http://mirrors.tuna.tsinghua.edu.cn/apache//jmeter/binaries/apache-jmeter-3.2.zip
2.2. 安装JDK和JMeter
2.2.1. 安装JDK1.8
2.2.1.1. 安装
在windows机器上,找到安装包的exe文件,直接双击运行exe,如果需要修改安装路径,则在安装时选择安装的路径,然后按提示默认操作即可完成。
我计算机上安装的JDK路径:D:\Program Files\Java
2.2.1.2. 配置环境变量
修改环境变量,点击开始按钮-右键计算机-点击高级系统设置-选择高级-点击环境变量-选择系统变量或某用户变量,如果已存在某变量就将值放在对应变量后面,以英文;分割,如果不存在某变量,就新增变量及值。变量值的配置参考下方,其中路径是你安装JDK时的路径。
JAVA_HOME=D:\Program Files\Java\jdk1.8.0_131
PATH=%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;%JMETER_HOME%\bin;
CLASSPATH=%JAVA_HOME%\lib;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;
2.2.1.3. 检查是否安装成功
可通过java javac java -version javac -version 个命令来验证安装和配置JDK是否成功,如果出现如下结果,则表明安装和配置JDK成功。
部分命令如图:
2.2.2. 安装JMeter3.2
2.2.2.1. 安装
JMeter是免安装的工具,直接解压后,配置好环境变量就可运行。
2.2.2.2. 配置环境变量
配置环境变量参考配置JDK的操作方式。
JMETER_HOME=D:\jmeter\jmeter3.2
CLASSPATH=%JMETER_HOME%\lib\jorphan.jar;%JMETER_HOME%\lib\ext\ApacheJMeter_core.jar;
PATH=%JMETER_HOME%\bin;
2.2.2.3. 检查是否安装成功
进入JMeter安装目录,运行bin目录下的jmeter.bat脚本,出现一个DOC窗口,及一个JMeter图形界面窗口,表明安装和配置JMeter成功,启动JMeter图形界面有点慢,请耐心等待一会。我计算机上JMeter的安装路径:D:\jmeter\jmeter3.2
DOS界面窗口
图形界面窗口
非图形界面启动:
jmeter -n -t ..\script\某系统_Ver*.*.*_某功能_yyyy-mm-dd_某人.jmx
-l ..\result\某系统_Ver*.*.*_某功能_yyyy-mm-dd_某人.jtl
-j ..\result\某系统_Ver*.*.*_某功能_yyyy-mm-dd_某人.log
-e -o ..\result\report\某系统_Ver*.*.*_某功能_yyyy-mm-dd_某人
-n 以非图形界面方式运行jmx脚本
-t 要运行的jmx脚本文件
-j 运行脚本过程中生成的日志记录文件
-l 运行脚本过程中生成的结果记录文件 可以为jtl(-l result.jtl)、xml(-l result.xml)格式的文件,同时需要修改jmeter.properties
-e 运行脚本完成后,需要生成html格式的报告文件
-o 存放生成报告文件的路径,目录不能在原路径中存在
如果jmx脚本不在% JEMTER_HOME %\bin目录下,则运行的jmx文件路径需为绝对路径
2.2.2.4. 修改其他配置项
为了提升启动JMeter的启动速度,及正确显示响应结果中的中文数据,则需要修改配置文件中的一些配置项。
修改jmeter.bat文件:set HEAP=-Xms3072m -Xmx3072m,调整堆的最大和最小值,建议为计算机内存的30%左右。
修改jmeter.properties文件:
jmeter.gui.action.save.backup_on_save=false
jsyntaxtextarea.font.family=宋体
jsyntaxtextarea.font.size=14
sampleresult.default.encoding=UTF-8
2.2.2.5. 插件安装
如果想要使用一些高级的功能操作,则需要下载一些扩展的包。首先需要将扩展管理包(jmeter-plugins-manager-0.16.jar)放到lib\ext目录下,重启JMeter后,在选项中可看到Plugins Manager选项,点击该选项,进入插件安装、升级界面,选择所需要的插件安装完成后,JMeter会自动重启,之后可在JMeter中使用你现在的扩展组件了。
JMeter插件网站:https://jmeter-plugins.org/downloads/all/
插件包名称:jmeter-plugins-manager-0.16.jar
2.2.2.6. 目录结构
从官网上下载的jmeter包中,不包含(data、script、result)目录,需要手动新建这3个目录。
- 界面结构
3.1. 结构简说
包含1标题栏、2菜单栏、3左侧组件栏、4右侧上部分、5右侧下部分,共5部分。
- 原理及作用域
4.1. 运行原理
JMeter通过线程组来启动1个或多个线程,向被测试应用发起请求操作,在测试过程中搜集压测的数据,可以图表或文件的方式保存及展示结果数据。
4.2. 作用域简介
1) 配置元件(影响作用域范围内的元件),前置处理器(在其作用域范围内每个取样器之前执行),后置处理器(在其作用域范围内每个取样器之后执行),定时器(影响作用域范围内的每个取样器),断言(在其作用域范围内每个取样器的结果执行校验),监听器(搜集在其作用域范围内每个取样器结果数据并展示在界面)
2) 取样器不存在作用域
3) 逻辑控制器仅对其子节点的逻辑控制器和取样器起作用。
4) 除了逻辑控制器和取样器外的元件,如果是某个取样器的子节点,则该元件对其父子节点起作用。
5) 除了逻辑控制器和取样器外的元件,如果父节点不是取样器,则该元件对其父子节点及后代节点都起作用。
4.3. 执行顺序简介
1) 在同一个作用域范围内,元件按(配置元件-前置处理器-定时器-取样器-后置处理器-断言-监听器)执行。
2) 前置处理器、后置处理器、断言等元件仅对取样器启作用,如果在其作用域内没有取样器,则这些元件不被执行。
3) 同一作用域中存在同一类型的元件,则按元件在测试计划中的顺序来执行。
- 元件简介
5.1. 测试计划
5.1.1. 用途
JMeter中各个组件需要放在测试计划中来运行,并且只有1个测试计划,1个测试计划下可以放多个线程组。
图标:
5.2. 测试片段
5.2.1. 用途
主要用于备份开发过程中的脚本,及该项下的组件可被模块控制器来使用。
5.3. 工作台
5.3.1. 用途
高级特性的使用,包括监控和录制压测时的请求信息,录制脚本,查看jmeter属性。
5.3.2. 常用类型介绍
5.3.2.1. 镜像服务器
HTTP Mirror Server:用于测试时的监控。
5.3.2.2. 代理服务器
HTTP代理服务器:设置好后可录制请求的URL信息。
5.3.2.3. 属性显示
Property Display:显示jmeter属性信息。
5.4. 线程组
5.4.1. 用途
用于设置怎样去模拟发起请求的用户。
5.4.2. 常用类型介绍
5.4.2.1. 普通线程组
图标:如下图
原生的线程组有3个,一种只用其中的普通线程组,如果安装了插件,则可使用其他线程组,线程组的使用可根据需要测试的类型和达到的目的去选择使用。一般使用普通线程组就可以达到目标。
可通过快捷键ctrl+t键,来启用和禁用线程组,其他组件也可通过该方式来启用和禁用。
5.5. 配置元件
5.5.1. 用途
用于设置在请求中使用到的参数化的数据和其他默认值。
5.5.2. 常用类型介绍
5.5.2.1. 自定义变量
5.5.2.2. HTTP请求默认值
5.5.2.3. HTTP Cookie管理器
5.5.2.4. HTTP信息头管理器
5.5.2.5. CSV Data Set Config
5.6. 逻辑控制器
5.6.1. 用途
用于设置运行脚本的流程和场景。
5.6.2. 常用类型介绍
5.6.2.1. 简单控制器
用于管理作用域范围内的各类元件,方便编写和阅读。
5.6.2.2. While Controller
设置作用域范围内请求,根据填写的条件的值,是否继续循环执行。
Condition:取值分3种。
保持空:迭代执行该控制器下的所有子节点,直到最后一个子节点失败时停止,如果不是最后一个执行失败,也会继续执行。
LAST:迭代执行该控制器下的所有子节点,直到最后一个子节点失败时停止,并且当控制器的上一个节点失败,则执行时不会进入该控制器。
填写表达式:表达式取值等于false字符时,退出循环。比如:${var},${__javascript(“${var}”==”found”)},${_P(var)}的结果为false时退出循环。
5.6.2.3. 事务控制器
设置综合统计作用域范围内请求的响应时间、吞吐量等信息并汇总。
5.6.2.4. 如果(If)控制器
类似编程中的if语句,设置作用域范围内的请求,根据表达式的值,来判断是否执行。如果表达式为字符串,则用””包裹起来,选中Evaluate for all children?后,其字节点执行时都会被执行1次。
5.6.2.5. 循环控制器
用于设置作用域范围内的请求执行的次数,或者一直执行。
5.6.2.6. ForEach控制器
类似编程语言中的for循环语句的作用,设置作用域范围内的请求,按照指定的条件去执行。
5.7. 定时器
5.7.1. 用途
用于设置控制请求之间时间的长短。
5.7.2. 常用类型介绍
5.7.2.1. 固定定时器
5.7.2.2. 同步定时器
Number of Simulated Users to Group by:设置该项中的数字要小于等于线程数,否则一直会线程处于等待状态。
Timeout in milliseconds:设置为0,当集合的线程达到上面项中的数字后,开始执行请求。设置>0,则超过等待固定的时间后,集合的线程还未达到上面项中的数字后,也会开始执行请求。
5.8. 前置处理器
5.8.1. 用途
用于设置在发起请求之前需要进行的操作。
5.8.2. 常用类型介绍
5.8.2.1. Bean Shell PreProcessor
BeanShell是一种免费的java源码解释器,支持对象式的脚本语言,也可以嵌入到java源码中。添加了该处理器后,可直接在里面编写java代码,实现你要的功能操作。
参考文件:
jmeter中通过beanshell访问eclipse中导出jar中的java类的方法
benshell使用手册
5.8.2.2. JSR223 PreProcessor
5.9. 取样器
5.9.1. 用途
用于设置模拟用户发起URL的请求信息。
5.9.2. 常用类型介绍
5.9.2.1. Debug Sampler
加上该取样器,可显示请求过程中各参数的值,用于跟踪调试请求是否存在问题。
5.9.2.2. HTTP请求
5.9.2.3. Java请求
5.9.2.4. JDBC Request
5.10. 后置处理器
5.10.1. 用途
用于设置在响应之后需要进行的操作。
5.10.2. 常用类型介绍
5.10.2.1. Bean Shell PostProcessor
参考BeanShellPreProcessor
5.10.2.2. JSR223 PostProcessor
参考JSR223 PreProcessor
5.10.2.3. JSON Path Extractor
5.10.2.4. 正则表达式提取器
5.11. 断言
5.11.1. 用途
用于设置验证响应结果。
5.11.2. 常用类型介绍
5.11.2.1. 响应断言
5.12. 监听器
5.12.1. 用途
用于设置收集运行脚本中的结果数据及显示数据图形的走势等。
5.12.2. 常用类型介绍
5.12.3. 察看结果树
5.12.4. 聚合报告
6.编写脚本
如果有开发文档,参考开发文档,如果没有开发文档,则需要抓取对应请求的URL的相关信息,分为对pc端Web系统上请求的抓取,及对mobile端APP上请求的抓取,及对https请求的抓取。抓取的工具分为:独立工具Fiddler,及浏览器上的开发者工具,如果谷歌的f12开发者工具。
6.1. 使用badbo方式录制(不推荐)
1) 安装Badboy工具,下载地址:http://www.badboy.com.au/
2) 设置IE代理(连接局->域网设置->高级 localhost或127.0.0.1 端口号:9088,没有被占用)
3) IE浏览器设置
4) 打开Badboy工具,点击录制按钮,在内嵌的浏览器中访问要录制的系统,之后Badboy对你操作系统的步骤进行录制。
5) 录制好后将文件导出为jmx文件。
6.2. 使用代理方式录制(也不推荐)
1) 设置IE代理(同上)
2) 启动jmeter并在工作台中:新增1个HTTP代理服务器、在测试计划中:新增1个线程组,端口:要与IE代理中的端口相同,如:9089,分组:选每个组放入一个新的控制器,目标控制器:选择你建的线程组,目的是将录制的URL放入该线程组,包含模式、排除模式,在录制过程中,你希望哪些URL被录制和不被录制,排除模式:.*\.js等,其他如图:
3) 点击启动按钮,访问被测系统,你操作的每一步对应的URL信息都被jmeter给录制下来了。
6.3. Fiddler方式抓取(推荐)
需要对被抓包的手机进行设置
6.4. 开发者工具抓取(推荐)
按F12键打开开发者工具,选中Preserve log复选框,后再访问被测系统,获取对应的URL信息,再将URL信息录入到jmeter中。
点击左侧的URL,右侧出现详细信息,点击Response标签项,可显示url对应的响应结果,然后在jmeter中录入对应的URL信息。
7.怎么测试接口
7.1. 示例截图
8.分布式测试
8.1. 使用默认端口方式
8.1.1. 主控机器配置说明
1) 控制机器(master、controler)
修改配置文件,文件在bin目录下:jmeter.properties
remote_hosts=ip1:port1,ip2:port2
比如:remote_hosts=192.168.0.1:1099,192.168.0.2:1099
控制机器上启动程序:jemter.bat
8.1.2. 负载机器配置说明
1) 负载机器(salver、agent)
a)默认使用端口:1099 ,ip1的机器,ip2的机器上都要先启动程序:jemter-server.bat
8.2. 使用自定义端口方式
8.2.1. 主控机器配置说明
1) 控制机器(master、controler)
修改配置文件,文件在bin目录下:jmeter.properties
remote_hosts=ip1:port1,ip2:port2
比如:remote_hosts=192.168.0.1:9901,192.168.0.2:9902
控制机器上启动程序:jemter.bat
8.2.2. 负载机器配置说明
1) 负载机器(salver、agent)
a)自定义端口:
修改配置文件,文件在bin目录下:jmeter.properties
server_port=port2
server.rmi.localport=port2
比如:
server_port=9901
server.rmi.localport=9901
b)启动程序:ip1的机器,ip2的机器上都要先启动程序:jemter-server.bat
说明:控制机器和负载机器的jmeter的版本和插件需一致,参数文件需在控制机器和负载机器上都要有一份,且放在同一路径下。