4. JMeter 入门:安装、线程组、取样器、监听器
JMeter 这工具,说白了就是性能测试的“瑞士军刀”。我见过太多人一上来就搞分布式、写脚本,结果连最基本的线程组都没搞清楚。今天咱们就从最基础的安装说起,一步步搭好你的测试环境。
4.1 安装与环境配置
先聊安装。JMeter 是纯 Java 应用,所以第一步——装 JDK。我个人习惯用 JDK 8,稳定、兼容性好。你要用 JDK 11 或 17 也行,但有些插件可能会报错,嗯,这点要注意。
- 下载 JMeter:去官网下载 .zip 包,别下源码。我建议用 Binaries 版本。
- 解压:放到一个没有空格和中文的路径下。C:\Program Files 这种地方千万别放,启动时会报稀奇古怪的错。
- 配置环境变量:
- 新建 JMETER_HOME,指向解压目录。
- 在 Path 里加 %JMETER_HOME%\bin。
- 启动验证:双击 jmeter.bat(Windows)或 jmeter(Mac/Linux)。看到那个深色界面的 GUI 就说明成了。
另外,bin 目录下有个 jmeter.properties 文件,我建议你改几个参数:
# 中文界面
language=zh_CN
# 增大日志级别,方便调试
log_level.jmeter=DEBUG
改完重启,界面就是中文的了。你想想看,英文界面虽然也能用,但调试时看日志多费劲。
4.2 线程组:模拟用户的核心
线程组(Thread Group)是压测的起点。它决定了:你有多少“虚拟用户”?这些用户如何启动?测试跑多久?
为什么要叫“线程组”?因为每个虚拟用户都是一个线程。在 JMeter 里,线程数 = 并发用户数。我以前有个同事,把线程数设成 500,结果本地机器直接卡死。嗯,这问题后面咱们会聊到。
4.2.1 线程组的三个核心参数
打开 JMeter,右键“测试计划” → 添加 → 线程(用户) → 线程组。你会看到这个界面:
| 参数 | 说明 | 我常用的值 |
|---|---|---|
| 线程数 | 并发用户数,每个线程模拟一个用户 | 10 ~ 1000(看机器配置) |
| Ramp-Up Period | 启动所有线程所需的时间(秒) | 线程数 / 2(或者 1~5 秒) |
| 循环次数 | 每个线程执行脚本的次数 | 1 或 ∞(永远) |
- 线程数:不是越大越好。我记得有一次压测,线程数设了 200,但 Ramp-Up 设了 1 秒,结果服务器瞬间被打爆,返回全是 502。后来把 Ramp-Up 改成 20 秒,问题解决了。
- Ramp-Up Period:这个参数很关键。它控制用户的启动速度。你想想看,如果 100 个用户在 1 秒内全挤进系统,和分 10 秒慢慢进,效果完全不一样。我建议设成线程数的一半,比如 100 个线程,Ramp-Up 设 50 秒。
- 循环次数:填“永远”的话,记得在监听器里设置运行时长,不然你以为跑完了,其实线程还在后台挂着。
4.2.2 线程组的高级选项
在线程组界面下方,还有“调度器配置”。这里可以精确控制测试时长:
持续时间(秒):300 # 跑 5 分钟
启动延迟(秒):0 # 立即启动
我个人习惯:用持续时间控制测试,而不是循环次数。这样更精准,也方便监控。你想想看,如果你设循环次数为 100 次,但脚本里有个 sleep,测试时长就不确定了。用持续时间的话,说跑 5 分钟就是 5 分钟,结果好对比。
4.3 取样器:发请求的利器
取样器(Sampler)就是“发请求”的组件。JMeter 支持 HTTP、JDBC、FTP、SOAP 等等。咱们最常用的,就是 HTTP 请求。
4.3.1 添加 HTTP 请求
在线程组下右键“添加” → “取样器” → “HTTP 请求”。你会看到:
| 字段 | 说明 | 示例 |
|---|---|---|
| 协议 | http 或 https | https |
| 服务器名称或 IP | 目标地址 | api.example.com |
| 端口号 | 默认 80(http)或 443(https) | 443 |
| 方法 | GET/POST/PUT/DELETE 等 | POST |
| 路径 | 接口路径 | /v1/login |
| 参数/Body | 请求参数或 JSON 数据 | {"username":"test","password":"123"} |
举个例子,咱们压测一个登录接口:
协议:https
服务器:api.example.com
端口:443
方法:POST
路径:/v1/login
Body Data:{"username":"${username}","password":"${password}"}
这里用了 ${} 引用变量,后面讲参数化时会细说。
4.3.2 取样器的“隐身”问题
你运行测试后,如果只加了线程组和取样器,结果会怎样?
嗯,什么也看不到。因为 JMeter 默认不显示任何结果。你必须配合监听器来查看。这也是很多新手抓狂的地方:“我明明发了请求,为啥看不到结果?”
4.4 监听器:看结果的眼睛
监听器(Listener)就是来看结果的。我建议至少加三个:查看结果树、聚合报告、图形结果。
4.4.1 查看结果树
这个最直观。右键“添加” → “监听器” → “查看结果树”。它能显示每个请求的:
- 请求头、请求体
- 响应头、响应体
- 响应时间、状态码
调试阶段,我必先用它。比如看看返回是不是 200,响应体里有没有报错信息。但注意,生产压测时别一直开着,它会消耗大量内存。我记得有一次压 500 并发,开着结果树跑了 10 分钟,JMeter 直接 OOM 了。
4.4.2 聚合报告
这个是我们分析性能的核心工具。它展示了:
| 指标 | 说明 |
|---|---|
| #Samples | 请求总数 |
| Average | 平均响应时间(ms) |
| Min | 最短响应时间 |
| Max | 最长响应时间 |
| Std. Dev | 标准差,表示响应时间的波动 |
| Error % | 错误率 |
| Throughput | 吞吐量(请求数/秒) |
| Received KB/sec | 接收数据速率 |
看这个表,我一般先看 Error % 和 Throughput。如果错误率超过 1%,就要查原因了。然后看 Average 和 90%(JMeter 没有直接显示 90% 的列,需要加“响应时间百分位”监听器)。
你想想看,平均响应时间 200ms,但 90% 是 500ms,说明大部分请求都还行,但有一小撮特别慢。这时候就要分析那 10% 的请求,是不是碰到了什么瓶颈。
4.4.3 图形结果
这个用来观察趋势。比如响应时间随并发数的变化。我习惯把它放在另一个显示器上,一边跑一边看。如果曲线突然陡峭上升,说明系统可能扛不住了。
4.5 本章知识图谱
下面这张图,概括了 JMeter 的基础组件关系。看完你应该能明白:线程组怎么用,取样器发什么,监听器看什么。
从图里你能看到:测试计划是根,下面挂线程组。线程组里可以加配置元件(比如 CSV 参数化)、取样器(发请求)、监听器(看结果)。如果你需要控制流程,还可以加逻辑控制器(比如循环、条件判断)。
一句话总结:线程组定人,取样器发请求,监听器看结果。配好这三个,你就能跑第一个性能测试了。
嗯,说到这,你可以动手试试了。打开 JMeter,搭一个最简单的测试:线程数 1,HTTP 取样器随便请求个网站,加一个查看结果树。跑一下,看看有没有数据返回。如果没返回,检查一下协议和端口对不对。没关系,刚开始多踩坑,后面就顺手了。