1 JMeter 概述
1.1 JMeter 是什么
Apache JMeter 是 Apache 软件基金会开源的性能测试工具,基于纯 Java 开发,最初用于 Web 应用的接口与服务压测,现已广泛支持 HTTP/HTTPS、FTP、JDBC、TCP 等多种协议,可用于接口功能验证、并发压力测试与性能报告输出。
本指南按实际操作顺序编排:先完成下载安装(第 2 章)、界面中文化(第 3 章),随后安装插件管理器与中文报告模板(第 4、5 章),再编写测试计划脚本(第 6 章),最后执行压测并导出 HTML 报告(第 7、8 章)。其中第 2 章对应原始笔记的下载与基础配置,第 4、5、7 章分别对应插件管理器(plugins-manager.jar)、中文报告模板与 HTML 报告导出三个环节。
1.2 环境要求
JMeter 要求 Java 8 或更高版本,并建议正确配置 JAVA_HOME 环境变量。安装或解压前,可先在命令行执行以下命令确认环境:
|---------------|
| java -version |
命令行能正常输出版本信息(如 java version "1.8.0_xxx")即表示环境就绪;若提示不是内部或外部命令,请先安装 JDK 并配置环境变量后再继续。
2 JMeter 下载与安装
2.1 下载安装包
JMeter 为绿色软件,下载解压后即可使用,无需安装。访问官网下载页 Apache JMeter - Download Apache JMeter,在 Binaries 分组下下载 apache-jmeter-x.x.x.zip(Windows)或 .tgz(Linux/Mac)压缩包,解压到本地目录即可。建议解压路径不含中文与空格,例如 D:\tools\apache-jmeter-5.6.3。
2.2 启动 JMeter
进入解压目录下的 bin 子目录,按操作系统选择以下任一方式启动:
- 直接启动:直接启动 bin 目录下的 ApacheJMeter.jar,即可弹出 GUI 页面;
- Windows:双击 bin\jmeter.bat,弹出的黑色 CMD 窗口不要关闭,稍等几秒 GUI 界面会自动启动;
- Linux / Mac:在 bin 目录下执行 ./jmeter.sh。
**注意:**jmeter.bat / jmeter.sh 启动时弹出的命令行窗口是 JMeter 的宿主进程,关闭该窗口 GUI 也会随之退出。
3 界面中文化
3.1 临时切换
菜单栏依次选择 Options → Choose Language → Chinese(Simplified),界面立即切换为简体中文。该设置只对当前运行有效,重启后恢复英文。
3.2 永久切换
编辑 bin 目录下的 jmeter.properties 文件,新增一行 language=zh_CN,保存后重启 JMeter,界面即为中文。该方式对后续所有启动均生效。
4 安装插件管理器(Plugins Manager)
插件管理器用于在线安装各类扩展插件(如阶梯加压线程组、服务器资源监控、图形化报告等),建议在编写脚本之前先完成安装。
4.1 下载
访问 Install :: JMeter-Plugins.org,下载 plugins-manager.jar 文件。
4.2 安装步骤
- 将 plugins-manager.jar 复制到 JMeter 解压目录下的 lib\ext\ 文件夹;
- 完全退出并重新启动 JMeter;
- 菜单栏出现 Options → Plugins Manager 菜单,即表示安装成功。
4.3 常用插件推荐
打开 Options → Plugins Manager,切换到 Available Plugins 标签页,搜索并勾选以下常用插件,点击 Apply Changes and Restart JMeter 完成安装并重启:
| 插件 | 用途 |
|---|---|
| Custom Thread Groups | 提供阶梯加压(Stepping Thread Group)等更灵活的并发模型 |
| 3 Basic Graphs | 响应时间、吞吐量、活跃线程数等基础图形监听器 |
| PerfMon (Servers Performance Monitoring) | 监控被测服务器的 CPU、内存、磁盘、网络等资源指标 |
| Throughput Shaping Timer | 按预设吞吐量曲线精确控制压测节奏 |
5 配置中文版 HTML 报告模板
JMeter 自带的 HTML 报告为英文界面,可通过国内维护的中文汉化模板替换。建议在编写脚本前提前配置好模板,压测结束后即可直接生成中文报告;替换过程不改动 JMeter 的其他文件。
5.1 下载模板
模板下载地址:https://gitee.com/smooth00/jmeter-cn-report-template。打开页面后下载 jmeter-cn-report-template 压缩包并解压备用。
5.2 使用方法
将 jmeter-cn-report-template 中的所有 .html.fmkr 文件覆盖到 JMeter 安装目录下的 bin\report-template\ 中,目录内原本的其他文件保持不变。
5.3 编码说明
模板目前为 UTF-8(无 BOM)格式,可同时兼容 Windows 与 Linux 环境下的中文显示。如果生成的 HTML 报告出现中文乱码,可自行将模板文件转存为合适的编码格式:Windows 下可将所有文件(包括 content/pages 目录下的 .fmkr 文件)另存为 ANSI/ASCII 格式。
6 编写测试计划(脚本开发)
JMeter 的测试计划按 线程组 → 取样器 → 监听器 的层级组织,必要时配合断言与配置元件。基本流程为:添加线程组 → 添加 HTTP 请求 →(需要登录时配置 Cookie)→ 添加监听器 → 调试运行并保存。
6.1 添加并配置线程组
在左侧测试计划节点上右键,选择 添加 → 线程(用户)→ 线程组。线程组用于模拟并发用户,首次调试推荐按下表初值设置:
| 参数 | 含义 | 推荐初值(用于首次调试) |
|---|---|---|
| 线程数(Number of Threads) | 模拟的并发用户数 | 10 |
| Ramp-Up 时间(秒) | 在多少秒内启动完所有线程;0 表示瞬间并发 | 10 |
| 循环次数(Loop Count) | 每个线程发送请求的次数;勾选"永远"则持续运行 | 1(调试),正式压测配合调度器持续运行 |
| 调度器 | 设定持续时间与启动延迟 | 调试阶段不勾选 |
举例:线程数 100、Ramp-Up 60 秒,表示每秒启动约 1.67 个用户;线程数 100、循环次数 2,则总计发送 200 次请求。
6.2 添加 HTTP 请求(取样器)
在线程组节点上右键,选择 添加 → 取样器 → HTTP 请求,按被测接口信息填写以下参数:
| 参数 | 说明 | 示例 |
|---|---|---|
| 协议(Protocol) | http 或 https,留空默认 http | https |
| 服务器名称或 IP | 被测服务的主机名或 IP 地址 | www.example.com |
| 端口号 | http 默认 80,https 默认 443 | 443 |
| HTTP 方法 | GET、POST、PUT、DELETE 等 | POST |
| 路径(Path) | 接口地址中域名之后的部分,可带查询参数 | /api/v1/login |
| 内容编码 | 请求报文编码,建议显式指定,避免中文乱码 | UTF-8 |
| Parameters / 消息体数据 | GET 参数填写在 Parameters;POST 的表单或 JSON 报文填写在消息体数据(Body Data) | {"username":"admin","password":"123456"} |
发送 JSON 报文时,还需在线程组下添加 HTTP 信息头管理器(添加 → 配置元件 → HTTP 信息头管理器),新增一条 Content-Type: application/json,否则服务端可能无法正确解析请求体。
6.3 需要登录时:添加 Cookie
多数业务系统需登录后才能访问业务接口,压测此类接口时必须让请求携带登录态。JMeter 中常用以下两种方式添加 Cookie。
方式一:HTTP Cookie **管理器(自动携带,推荐)。**在线程组节点上右键,选择 添加 → 配置元件 → HTTP Cookie 管理器,并将登录接口的 HTTP 请求放在业务请求之前。登录成功后,服务端返回的 Set-Cookie 会被自动保存,后续业务请求会像浏览器一样自动携带 Cookie,无需手动填写。若每个循环都需要重新登录,可勾选管理器中的 Clear cookies each iteration(每次迭代清空 Cookie)。
方式二:HTTP 信息头管理器手动填写。 若已从浏览器或登录响应中获取到固定的 Cookie 值,可右键 线程组 → 添加 → 配置元件 → HTTP 信息头管理器,新增一条信息头:名称填 Cookie,值填完整的 Cookie 字符串(多个键值对用分号分隔),例如:
|-----------------------------------------------------|
| Cookie: JSESSIONID=3A5F8C21D6E9; token=abc123def456 |
Cookie **值的获取方法:**① 浏览器登录后按 F12 打开开发者工具,切换到 Network(网络)标签页,选中任意请求,在 Request Headers(请求标头)中复制 Cookie 的完整值;② 先在 JMeter 中运行一次登录请求,通过查看结果树查看登录响应的 Set-Cookie 内容,将各键值对用分号拼接后填入。
**注意:**Cookie 管理器、登录请求与业务请求应放在同一线程组内,各虚拟线程各自维护独立会话;若接口采用 Token 鉴权(如登录响应 JSON 中的 token,后续请求需放在 Authorization: Bearer xxx 请求头中),同样通过 HTTP 信息头管理器添加对应请求头即可。
6.4 添加监听器
在线程组节点上右键,选择 添加 → 监听器。监听器负责收集与展示压测数据,调试与压测阶段推荐使用以下两个:
| 监听器 | 主要用途 |
|---|---|
| 查看结果树 | 逐条查看请求与响应明细,用于调试;批量压测时应禁用,避免占用内存 |
| 聚合报告(Aggregate Report) | 汇总平均响应时间、中位数、90% 线、错误率、吞吐量等核心指标 |
| 汇总报告(Summary Report) | 以更简洁的表格实时汇总各请求的执行情况 |
6.5 添加响应断言(可选)
为让工具自动判断接口是否返回预期内容,可在 HTTP 请求节点上右键,选择 添加 → 断言 → 响应断言,填写需匹配的响应内容(如返回码 200 或响应文本中的关键字)。断言失败的请求会在查看结果树中标红。
6.6 调试运行与保存脚本
点击工具栏绿色启动按钮运行测试,通过查看结果树确认请求全部为绿色(成功)。调试通过后,选择 文件 → 另存测试计划为,将脚本保存为 .jmx 文件(如 demo_test.jmx),供后续压测与报告生成使用。
**注意:**调试阶段线程数建议不超过 10、循环次数保持 1,避免误触发大量请求。
7 执行压测并导出 HTML 报告
HTML 报告由测试过程中各监听器收集的数据汇总生成,可通过 GUI 界面或命令行两种方式导出。
7.1 方式一:GUI 界面生成报告
先完整运行一次测试,并在聚合报告等监听器中指定结果文件(.jtl)的保存路径;然后通过菜单 " 工具" → "Generate HTML report" 打开报告生成对话框,依次填写:
- Result file(结果文件):选择上一步生成的 .jtl 结果文件;
- user.properties:保持默认即可;
- Output directory(输出目录):指定一个空目录用于存放报告;
- 点击 Generate report 生成报告,完成后用浏览器打开输出目录中的 index.html 查看。
7.2 方式二:命令行非 GUI 模式生成
正式压测推荐使用非 GUI 模式:资源占用低、结果更稳定,且可在压测结束后自动生成报告。在 bin 目录执行以下命令:
|----------------------------------------------------|
| jmeter -n -t test.jmx -l result.jtl -e -o ./report |
| 参数 | 含义 |
|---|---|
| -n | 以非 GUI 模式运行 |
| -t | 指定测试计划(.jmx)文件 |
| -l | 指定压测结果记录文件(.jtl / .csv) |
| -e | 压测结束后生成 HTML 报告 |
| -o | 指定报告输出目录(必须为空或不存在) |
7.3 压测与报告生成注意事项
GUI **模式仅用于脚本调试;**并发量大时务必使用非 GUI 模式,否则界面渲染本身会消耗大量资源、影响压测结果。生成报告时,输出目录必须为空或不存在,结果文件(如 result.jtl)不能已存在,否则命令会报错退出。压测前建议先用小并发(如 10 线程、循环 1 次)验证脚本正确性,再逐步加压到目标并发。
8 HTML 报告解读与常见问题
8.1 报告关键指标
打开报告输出目录中的 index.html,Dashboard 页顶部的 APDEX 应用性能指数综合反映用户满意度(满意阈值默认 500ms、可容忍阈值 1500ms,可在配置中调整);Statistics 统计表列出每个请求的详细数据,主要列含义如下:
| 指标 | 含义 |
|---|---|
| Samples | 请求总次数 |
| Average | 平均响应时间(毫秒) |
| Median | 响应时间中位数(毫秒) |
| 90th Line(90th pct) | 90% 的请求响应时间不超过该值(毫秒) |
| Min / Max | 最小 / 最大响应时间(毫秒) |
| Error % | 请求错误率 |
| Throughput | 吞吐量,即每秒处理的请求数(TPS) |
| Received / Sent KB/sec | 每秒接收 / 发送的数据量 |
评估接口性能时,建议综合关注三点:90th Line 与 Average 的差距(差距越大说明响应时间波动越大)、Error % 是否为 0,以及吞吐量是否达到业务预期目标。
8.2 常见问题与解决
| 问题现象 | 原因与解决 |
|---|---|
| 双击 jmeter.bat 后窗口闪退 | 未安装 Java 8 及以上版本或未配置 JAVA_HOME,先执行 java -version 排查环境 |
| 误关黑色 CMD 窗口导致 JMeter 退出 | CMD 窗口是 GUI 的宿主进程,操作过程中保持窗口开启即可 |
| HTML 报告中文乱码 | 参见 5.3 节,将模板 .fmkr 文件转存为对应平台的编码格式后重新生成 |
| 业务请求提示未登录或跳转到登录页 | 请求未携带有效登录态:参见 6.3 节,添加 HTTP Cookie 管理器,或通过信息头管理器手动填写 Cookie |
| 生成报告时报错,提示目录无法写入 | 输出目录已存在且非空,或结果文件已存在,更换或清空后重试 |
| GUI 压测越跑越卡 | 查看结果树等监听器占用大量内存,压测时应禁用监听器并改用非 GUI 模式 |