Apache JMeter™ 应用程序是开源软件,是一个 100% 纯 Java 应用程序,旨在负载测试功能行为和测量性能。 它最初设计用于测试 Web 应用程序,但后来扩展到其他测试功能。
Apache JMeter 可用于测试静态和动态资源、Web 动态应用程序的性能。
它可用于模拟服务器、服务器组、网络或对象上的重负载,以测试其强度或分析不同负载类型下的整体性能。
Apache JMeter 功能包括:
1. 能够加载和性能测试许多不同的应用程序/服务器/协议类型:
网络 - HTTP、HTTPS(Java、NodeJS、PHP、ASP.NET,...)
SOAP/REST 网络服务
FTP
通过 JDBC 数据库
LDAP
通过 JMS 的面向消息的中间件 (MOM)
邮件 - SMTP(S)、POP3(S) 和 IMAP(S)
本机命令或 shell 脚本
TCP
Java 对象
2. 功能齐全的测试 IDE,允许快速记录测试计划(来自浏览器或本机应用程序)、构建和调试。
3. CLI 模式(命令行模式(以前称为非 GUI)/无头模式)从任何 Java 兼容的操作系统(Linux、Windows、Mac OSX 等)加载测试
4. 完整且可随时呈现的动态 HTML 报告
5. 通过从最流行的响应格式、HTML、JSON、XML 或任何文本格式中提取数据的能力轻松关联
6. 完全的可移植性和 100% 的 Java 纯度。
7. 完整的多线程框架允许多线程并发采样和不同线程组同时采样不同功能。
8. 缓存和离线分析/重放测试结果。
9. 高度可扩展的核心:
可插拔采样器允许无限的测试功能。
可编写脚本的采样器(与 JSR223 兼容的语言,如 Groovy 和 BeanShell)
可以使用可插拔计时器选择多个负载统计信息。
数据分析和可视化插件允许极大的可扩展性和个性化。
函数可用于为测试提供动态输入或提供数据操作。
通过适用于 Maven、Gradle 和 Jenkins 的第 3 方开源库轻松实现持续集成。
jmeter优缺点及与loadrunner对比
jmeter(二) 优缺点_我的E家-CSDN博客_jmeter的优缺点
jmeter依赖java环境
地址:JDK 18 Early-Access Builds
|
|
|
|
|
根据操作系统决定运行哪个文件,linux下运行jmeter,windows运行jmeter.bat,mac运行jmeter.sh
|
启动之后如下图所示
注意:使用jdk18时从本地打开.jmx文件会报如下错误
|
解决方式为在jmeter文件中添加--add-opens=java.desktop/sun.awt.shell=ALL-UNNAMED
如果客户端只有x86的机器,建议使用jdk8,不会有上述错误
(1)添加线程组
添加完成后有以下参数可自行设置:
注意:客户端最大支持的线程数,一般为1000到2000,表示模拟的用户数,如果请求url有多个,则一个用户会发送多次请求
(2)添加http请求
添加完成之后如下图所示,如果有一些通用的参数,比如server name or IP,也可以在上层比如线程组或plan层添加http默认值
(4)添加header管理器,用于设置请求头,如果plan中所有请求都使用相同的请求头,则可以在plan上添加header管理器,或者在线程组上添加
(5)添加断言,以下表示添加返回值断言
有如下参数可设置,表示如果返回值中的以下某些内容不满足定义的断言会被认为是一次失败请求
比如要求返回状态码必须为200
(6)添加监听器,如下表示汇总报告,其他报告可自行测试
(7)发送请求,运行图标运行,结果如下
并不是所有的组件都要添加,如果没有则可以不添加,比如header,不加断言也是可以的。
手动一个一个添加url很麻烦,后面会用到使用blazemeter自动录制接口。
是一个chrome浏览器插件,用于录制接口供jmeter使用,相比于上面一个一个添加接口,blazemeter可以在浏览器上通过鼠标点击的方式自动录制接口并保存为.jmx文件,然后在jmeter中打开即可
https://www.crxforchrome.com/crx/286/
|
拖动到chrome浏览器扩展程序,添加完成后如下图所示
注意:生成.jmx文件需要登录
(1)首先给脚本取个名字,只能大小,就算小写输入也会变成大写,生成文件时会自动变成小写
(2)点击红色按钮开始录制
(3)点击页面上需要录制的接口,可批量录制很多接口
(4)点击红色方块按钮结束录制,此时插件可能会在页面上消失,需要重新点下插件
(5)点击save按钮
(6)选择.jmx格式保存,即会将.jmx文件下载到本地
(7)从本地打开录制的.jmx文件,会看到已经录制了很多接口
(8)注意可能会录制一些不需要的接口,可自己手动删除,另外不会录制header、cookie等数据,但是考虑到这些信息中一般会包含一些token等会过期的数据,录制下来也是得修改的
(9)手动添加header
在浏览器上进入待测网站,鼠标右键检查元素,复制header(以下只为演示,与上面录制的接口不匹配)
找到HTTP Header manager,从剪切板粘贴
(10)设置并行线程数、时间、循环次数
(11)添加监视器统计结果
(12)添加断言(可选)
(13)添加cookie等其他需要的参数(可选)
单节点jmeter性能有瓶颈Jmeter系列(39)- Jmeter 分布式测试 - 云+社区 - 腾讯云
运行jmeter-server的节点
修改bin/jmeter.properties文件
(1)修改 server_port,可修改为任意没有被占用的端口
server_port=1234
(2)修改 server.rmi.port,与server_port保持一致
server.rmi.port=1234
(3)修改server.rmi.ssl.disable,默认为false,表示需要认证,改为true
server.rmi.ssl.disable=true
否则会报错
|
(4)运行
|
(5)也可自定义服务,让jmeter-server开机自启动
--------------
---------------
|
master节点为运行图形化界面的节点
(1)修改bin/jmeter.properties文件
|
(2)重启jmeter,可能会出现界面不显示结果的问题,使用如下方式启动
./jmeter -Djava.rmi.server.hostname=${本机IP} |
(3)查看界面如下
(4)可选择某个slave节点进行测试,也可start all在所有slave节点进行测试
(5)选择运行的节点下会有如下输出
注:master节点不开机自启
(1)在GUI界面将脚本调试好,但并不进行真正的测试
(2)使用jmeter命令行,不启动GUI模式进行真正的测试,因为GUI会占大量资源,容易卡死
(3)不实时查看结果,只做最后的统计,将#mode=Standard注释掉
(4)压力机不要跑其他应用,以免受其他应用影响
(5)压力机配置最好一致,以免配置低的压力机影响结果,一般4c4g配置即可,单压力机性能瓶颈主要出在java本身
(6)先测试一下单压力机最大支持的并发数,避免因为压力机瓶颈导致测试结果异常,如:
两台压力机,循环数2,请求在1秒内发出,总共4000次请求,也就是单机1000次并发的结果入下:
两台压力机,循环数2,请求在1秒内发出,总共8000次请求,也就是单机2000次并发的结果入下:
数据基本差不多,说明本次测试的单个压力机支持的最大并发数能达到2000
命令行运行
# ./jmeter -Djava.rmi.server.hostname=172.20.16.185 -n -t ./test1.jmx -l rlt -r -e -o ./report -Djava.rmi.server.hostname最好指定,否则可能会收集不到结果 n表示无GUI运行 t表示要运行的jmx文件 l指生成的文件名称 r指远程将所有agent启动 -e -o表示生成html结果 |
(3)生成的html结果在report目录下
$ ls report content index.html sbadmin2-1.0.7 statistics.json |
(4)将html用浏览器打开,可查看运行结果,更多详情可点开左侧导航栏查看
注意:生成html结果只能用jdk8,因jdk8没有arm架构,因此master节点必须为x86架构,且必须使用jdk8,不然无法生成html结果,其他节点使用jdk18目前测试无影响,经测试4c4g虚拟机单机可提供2000并发
Apache JMeter - Apache JMeter™
jmeter(二) 优缺点_我的E家-CSDN博客_jmeter的优缺点
Jmeter系列(39)- Jmeter 分布式测试 - 云+社区 - 腾讯云
Jmeter最适用录制工具BlazeMeter - 知乎
推荐几款常用的性能测试工具-InfoQ