JMeter入门
JMeter基本概念
Apache JMeter是Apache组织开发的基于Java的压力测试工具。用于对软件做压力测试,它最初被设计用于Web应用测试,但后来扩展到其他测试领域。 它可以用于测试静态和动态资源,例如静态文件、Java 小服务程序、CGI 脚本、Java 对象、数据库、FTP 服务器, 等等。JMeter 可以用于对服务器、网络或对象模拟巨大的负载,来自不同压力类别下测试它们的强度和分析整体性能。另外,JMeter能够对应用程序做功能/回归测试,通过创建带有断言的脚本来验证你的程序返回了你期望的结果。为了最大限度的灵活性,JMeter允许使用正则表达式创建断言。
为什么要使用JMeter
- 开源免费,基于Java编写,可集成到其他系统可拓展各个功能插件
- 支持接口测试,压力测试等多种功能,支持录制回放,入门简单
- 相较于自己编写框架活其他开源工具,有较为完善的UI界面,便于接口调试
- 多平台支持,可在Linux,Windows,Mac上运行
JMeter安装配置
Windows
- 点击下载链接,根据自己将要使用的平台,下载相应的文件。
- 安装JDK,配置环境变量
- JAVA_HOME【C:\Program Files\Java\jdk1.8.0_73】
- classpath【.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar】
- Path【;%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;】
- 解压下载的JMeter压缩包,打开/bin/jmeter.bat
配置环境变量
JMETER_HOME【E:\1-必备工具\35-JMeter\apache-jmeter-4.0】
Path【;%JMETER_HOME%\bin】
其它平台安装
与windowns一致,除打开入口不同,如Linux下/bin/jmeter.sh
JMeter目录结构
- bin目录常用文件介绍
- examples:目录下包含Jmeter使用实例
- ApacheJMeter.jar:JMeter源码包
- jmeter.bat:windows下启动文件
- jmeter.sh:Linux下启动文件
- jmeter.log:Jmeter运行日志文件
- jmeter.properties:Jmeter配置文件
- jmeter-server.bat:windows下启动负载生成器服务文件
- jmeter-server:Linux下启动负载生成器文件
- /docs目录——Jmeter帮助文档
- /extras目录——提供了对Ant的支持文件,可也用于持续集成
- /lib目录——存放Jmeter依赖的jar包,同时安装插件也放于此目录
- /licenses目录——软件许可文件,不用管
- /printable_docs目录——Jmeter用户手册
JMeter插件安装
JMeter插件安装很简单,只需要下载相应的插件解压即可。
- 点击下载
- 下载后解压放入:apache-jmeter-2.12\lib\ext\目录下
- 重启jmeter
数据库链接驱动如果需要需要专门下载,例如mysql需要jdbc的jar包,地址:http://dev.mysql.com/downloads/file/?id=462850
使用注意事项:添加第三方插件并使用后保存的jmx文件在未添加该插件的运行环境下会导致无法打开该文件并报错,请保持环境一致性。
JMeter命令行模式
- 命令
jmeter -n -t <testplan filename> -l <listener filename>
- 参数
-h
帮助 -> 打印出有用的信息并退出
-n
非 GUI 模式 -> 在非 GUI 模式下运行 JMeter
-t
测试文件 -> 要运行的 JMeter 测试脚本文件
-l
jtl文件 -> 记录结果的文件
-r
远程执行 -> 启动远程服务
-H
代理主机 -> 设置 JMeter 使用的代理主机
-P
代理端口 -> 设置 JMeter 使用的代理主机的端口号
-j
日志文件->设置JMeter日志文件的名称
JMeter分布式测试(windows下)
作为一个纯 JAVA 的GUI应用,JMeter 对于CPU和内存的消耗还是很惊人的,所以当需要模拟数以千计的并发用户时,使用单台机器模拟所有的并发用户就有些力不从心,甚至还会引起JAVA内存溢出的错误。不过,JMeter 也可以像 LoadRunner 一样通过使用多台机器运行所谓的 Agent 来分担 Load Generator 自身的压力,并借此来获取更大的并发用户数。
- 在所有期望将JMeter作为Load Generator(负载生成器)的机器上安装JMeter,并确定其中一台作为Controller,其他的机器作为Agent。然后运行所有Agent机器上的JMeter-server.bat文件(假定使用192.168.0.11和192.168.0.12作为Agent,Agent机器上必须安装JDK,并设置环境变量)
- 在Controller机器的%JMETER_HOME%\bin下,找到JMeter.properties文件,编辑该文件,查找“remote_hosts=”这个字符串,可以找到这样一行“remote_hosts=127.0.0.1”。其中的127.0.0.1表示运行JMeter Agent的机器,这里需要修改成为“remote_hosts=192.168.0.11:1099,192.168.0.12:1099”(其中1099为端口号)。一般资料显示1644为JMeter的Controller和Agent之间进行通讯的RMI端口号,但是在测试时发现设置的1644运行不成功,改成1099后运行通过。
- 双击启动Controller机器上的jmeter.bat,选择菜单Rum->Remote Start,将会看到有两台Agent。
常见问题: - 确定在controller机器上安装jdk,版本和jmeter一致,配置环境变量:Java_home等
在Agent机器上安装jdk,配置环境变量:Java_home和JMeter_home
- 在Controller端上控制某台机器Run,提示"Bad call to remote host"。
解决方法:检查被控制机器上的jmeter-server有没有启动,或者JMeter.properties中remote_hosts的端口配置错误。
- Agent机器启动Jmeter_server.bat时,后台提示:"could not find ApacheJmeter_core.jar"
解决方法:确定在Agent机器安装jdk,并设置环境变量:java_home、path、classpath和jmeter_home
- 查看1099端口是否被占用
netstat -ano | findstr "1099"
tasklist | findstr "1099"
- 启动远程时,报错:
只要将本机的jmter-server.bat执行即可。要是在jmeter.properties配置的地方写了127.0.0.1 的话就要开本机的 jmeter-sever.bat.。不写的话就不用开了。
JMeter使用
-
切换中文
- 【Options】--> 【Choose Language】--> 【Chinese】
- Jmeter_home/bin/jmeter.properties,设置language=zh_CN
- 【Options】--> 【Choose Language】--> 【Chinese】
-
正则表达式
引用名称:代表下一个请求要引用的参数名称,如填写“openid”,那么则可用“\({openid}”引用它。 正则表达式: `()`:括起来的部分就是要取的 `. `:匹配任何字符 `+`:一次或多次 `?`:在找到第一个匹配项后停止 模板:用\)$引起来,\(2\)表示取第2个值给openid
匹配:匹配多个值时,0代表随机取值,1代表取第一个
缺省值:如果参数没有取到值,那就默认给它一个值 -
图形结果
样本数目
:总共发送到服务器的请求数。
最新样本
:代表时间的数字,是服务器响应最后一个请求的时间。
吞吐量
:服务器每分钟处理的请求数。
平均值
:是总运行时间除以发送到服务器的请求数,即每个请求的平均响应时间。
中间值
:是代表时间的数字,有一半的服务器响应时间低于该值而另一半高于该值。
偏离
:表示服务器响应时间变化、离散程度测量值的大小,即数据的分布。 -
聚合报表
90%line
:90%的响应时间都比这个时间小
Min
:代表时间的数字,是服务器响应的最短时间。
Max
:代表时间的数字,是服务器响应的最长时间。
Error%
:请求的错误百分比。
KB/sec
:是每秒钟请求的字节数。 -
操作mysql数据库
操作数据库基本有四个步骤:- 导入mysql的jdbc的jar包,存放到\apache-jmeter-4.0\lib下;
- 创建数据库的连接配置,线程组里添加配置元件-JDBC Connection Configuration;
- 线程组里添加jdbc request,写sql语句;
- 添加察看结果树,点击启动按钮,就能看到执行的SQL。
特别说明:jmeter还可以操作oracle、postgreSQL、msSQL、mongodb等等数据库,同时不同的数据库,JDBC Connection Configuration填写的Database url格式和JDBC Driver驱动名称也不相同。jmeter数据库驱动列表如下表所示:
JDBC Driver class是固定的,Jmeter操作各类数据的Driver参考下图;
-
jmeter3.2以后没有SOAP/XML-Request
-
Jmeter的参数化方法
- 利用函数助手获取参数值
选项->函数助手对话框
__CSVRead
生成的函数字符串:${__CSVRead(,)}
第一个参数是文件名(包含路径),第二个参数是文件中的列(列数从0开始);
__Random
生成的函数字符串:${__Random(,,)}第一个参数为随机数的下限,第二个参数为随机数的上限,第三个参数为储存随机数的变量名;
- 利用配置元件(CSV Data Set Config)
选中线程组,右击,添加->配置元件->CSV Data Set Config
选中线程组,右击,添加->sampler->HTTP 请求,在http请求参数中引用变量
- 用户自定义变量
选中纯种组,右击,添加->配置元件->用户自定义变量
- 利用函数助手获取参数值
-
HTTP Cookie Manager
用于需要登录cookie的接口中
JMeter使用注意事项
- 变量问题
使用过程中,一定要注意控件的执行顺序以及变量的作用域。 - 路径问题
Windows下支持"/"""并存模式,推荐使用"/",方便跨平台使用。
在linux格式下支持"/"格式。 - Jmeter自身性能问题
命令行模式:命令相同。
UI模式:操作方式相同,但会存在windows下能打开linux下打不开的情况,暂不知道原因。