目录
一、下载 Jmeter
二、配置环境变量
三、设置中文语言
四、入门最简单的高并发性能压测流程
1. 添加线程组
2. 添加请求
3. 添加监听器
3.1 添加聚合报告
3.2 添加结果树
4. 启动测试
2 种启动方式:
查看结果树:
聚合报告:
五、其它操作
1. 清理测试数据
一、下载 Jmeter
Jmeter 下载链接
随便下载一个压缩包版本
解压后进入 bin 打开:
- jmeter.sh :Linux 版本的启动脚本
- jmeter.cmd :Windows 版本的启动脚本
ApacheJMeter.jar | JAR文件 | JMeter的核心文件,包含所有类和资源,双击可启动JMeter。 |
BeanShellAssertion.bshrc | BeanShell脚本 | BeanShell断言配置,用于测试过程中执行脚本断言。 |
BeanShellFunction.bshrc | BeanShell脚本 | BeanShell函数配置,定义和使用自定义BeanShell函数。 |
BeanShellListeners.bshrc | BeanShell脚本 | BeanShell监听器配置,用于测试过程中的监听操作。 |
BeanShellSampler.bshrc | BeanShell脚本 | BeanShell取样器配置,用于测试过程中的取样操作。 |
create-rmi-keystore.bat/.sh | 批处理/脚本文件 | 创建RMI信任存储,用于配置RMI安全。 |
hc.parameters | 参数文件 | Harmony Class Loader参数,配置类加载器行为。 |
heapdump.cmd/.sh | 命令/脚本文件 | 生成堆转储文件,用于内存分析。 |
jaas.conf | 配置文件 | JAAS配置,配置Java认证和授权服务。 |
jmeter.bat/.sh | 批处理/脚本文件 | 启动JMeter,分别适用于Windows和Unix/Linux。 |
jmeter.log | 日志文件 | 记录JMeter运行日志,用于问题排查。 |
jmeter.properties | 属性文件 | JMeter全局配置,如语言、线程数等。 |
jmeter-n.cmd/-n-r.cmd | 命令文件 | 非GUI模式运行JMeter,后者还重定向输出。 |
jmeter-server | 目录 | JMeter服务器配置,用于分布式测试。 |
jmeter-server.bat/.sh | 批处理/脚本文件 | 启动JMeter服务器,分别适用于Windows和Unix/Linux。 |
krb5.conf | 配置文件 | Kerberos客户端配置,用于Kerberos认证。 |
log4j2.xml | 日志配置文件 | Log4j2配置,定义日志输出格式和级别。 |
mirror-server | 目录 | 镜像服务器配置,用于镜像测试。 |
reportgenerator.properties | 属性文件 | 报告生成器配置,定义报告生成参数。 |
saveservice.properties | 属性文件 | 保存服务配置,定义测试结果保存格式。 |
shutdown.cmd/.sh | 命令/脚本文件 | 关闭JMeter,分别适用于Windows和Unix/Linux。 |
stoptest.cmd/.sh | 命令/脚本文件 | 停止JMeter测试,分别适用于Windows和Unix/Linux。 |
system.properties | 属性文件 | 系统级配置,定义JVM参数等。 |
threaddump.cmd/.sh | 命令/脚本文件 | 生成线程转储文件,用于线程分析。 |
upgrade.properties | 属性文件 | 升级配置,定义JMeter升级参数。 |
user.properties | 属性文件 | 用户级配置,定义用户相关参数。 |
utility.groovy | Groovy脚本 | 实用工具脚本,可能包含自定义函数或工具类。 |
二、配置环境变量
- 在正常情况下,JMeter不需要单独配置
ApacheJMeter_core.jar
或jorphan.jar
的环境变量即可正常运行测试。 -
即使未设置
JMETER_HOME
,只要直接运行jmeter.bat
(Windows)或jmeter.sh
(Linux/Mac)且 JMeter 目录结构完整,脚本也能通过相对路径找到 JAR 包。 -
为了能快速命令方式启动以及兼容性和避免路径问题,建议设置
JMETER_HOME
。
Windows11 直接搜索环境变量:
- 打开环境变量
- 系统变量 ---> 增加 JMETER_HOME ---> 值建议 jmeter主目录\ Jmeter 版本
- 系统变量 ---> 找到 path 双击打开 ---> 增加 %JMETER_HOME%\bin
三、设置中文语言
- Options 选项
- Choose Language 更改语言
- Chinese 中文
四、入门最简单的高并发性能压测流程
- 添加线程组
- 添加请求
- 添加监听树
- 启动测试
1. 添加线程组
右击 TestPlan --> 添加 --> 线程(用户) --> 线程组
填入测试:
- 线程组:100
- Ramp-Up:10
- 循环次数:10
JMeter 线程组核心参数解释表
参数名称 | 含义 | 示例说明 |
---|---|---|
线程数 | 定义测试中要模拟的 最大并发虚拟用户 (VU) 数量。 | 线程数 = 10 :表示 JMeter 最终会创建并运行 10 个独立的线程(虚拟用户),每个用户都会执行测试计划中定义的请求。 |
Ramp-Up 时间 (秒) | 定义 JMeter 启动所有线程 (虚拟用户) 所需的总时间 (秒)。目的是平滑增加负载,避免瞬间压力冲击。 | 线程数 = 10 ,Ramp-Up = 100 秒:* 0秒: 启动第1个用户。 * 10秒: 启动第2个用户 (100秒 / 10用户 = 10秒/用户)。 * 20秒: 启动第3个用户。 * ... * 90秒: 启动第10个用户。 所有10个用户将在第90秒时全部启动完毕。 |
循环次数 | 定义 每个线程 (虚拟用户) 执行其包含的请求 (采样器) 序列的次数。 | 循环次数 = 5 :* 每个线程(用户)会从头到尾完整地执行测试计划中定义的请求(比如:登录 -> 浏览商品 -> 下单)5次。 * 如果勾选了“永远”,线程会无限循环执行请求序列,直到手动停止测试、达到设置的测试持续时间或线程被停止(如通过定时器)。 |
线程组勾线永久:模拟持续并发量用户请求,常用配置!
2. 添加请求
右击线程组 --> 添加 --> 取样器 --> HTTP 请求
填入参数
- 协议:http
- 服务器名称/IP:127.0.0.1
- 端口号:8080
- HTTP请求方法:GET
- 请求路径(必须 / 开头):/test-thread-2
- 内容编码(不分大小写):UTF-8
- 无参
SpringBoot 项目 Test Demo 接口信息
JMeter HTTP 请求配置项详解表
配置项 | 解释说明 | 示例/注意事项 |
---|---|---|
名称 (Name) | 为这个 HTTP 请求采样器起一个描述性名称。便于在结果树、报告等组件中识别不同的请求。 | 首页访问 ,用户登录 API ,查询订单详情 |
注释 (Comments) | 可选字段,用于添加关于此请求的额外说明。 | |
协议 (Protocol) | 指定请求使用的应用层协议。 | * http : 默认值,标准 HTTP。* https : 加密的 HTTP (SSL/TLS)。* 留空: JMeter 会继承线程组或 HTTP 请求默认值中设置的协议(如果有)。 注意: 使用 https 时,JMeter 会自动处理 SSL 握手,但可能需要配置信任库来处理自签名证书。 |
服务器名称或 IP (Server Name or IP) | 指定目标 Web 服务器的域名或 IP 地址。这是构建请求 URL 最核心的部分。 | * www.example.com * api.myapp.com * 192.168.1.100 注意: 不要包含 http:// 或 https:// 前缀,也不要在末尾加 / 。 |
端口号 (Port Number) | 指定目标服务器监听的网络端口号。 | * 80 : HTTP 默认端口。* 443 : HTTPS 默认端口。* 8080 , 8443 : 常见的应用服务器 HTTP/HTTPS 端口。* 留空: 如果使用 http 协议则默认为 80 ,使用 https 协议则默认为 443 。 |
HTTP 请求 (HTTP Request) | 选择 HTTP 请求方法 (Verb)。 | * GET : 获取资源(参数通常在 URL 后 ?key=value )。* POST : 提交数据(数据通常在 Body 中)。* PUT : 更新资源。* DELETE : 删除资源。* HEAD , OPTIONS , PATCH 等。 POST 最常用,特别是带表单或 JSON 时。 |
路径 (Path) | 指定请求的资源路径 (URI),相对于服务器的根目录。 | * /index.html * /api/v1/login * /products/search 注意: * 必须以 / 开头。* 可以包含路径参数 (如 /users/{userId} ),但 JMeter 不直接处理占位符,需用变量或硬编码值替换。 |
内容编码 (Content encoding) | 指定 HTTP 请求体 (Body) 的字符编码。主要影响 POST /PUT 等方法中发送的 Parameters 或 Body Data 。 | * utf-8 : 最常用,支持多语言。* iso-8859-1 * gbk (中文)注意: 如果服务器响应返回乱码,可能需要检查响应头中的 Content-Type 编码或使用 JMeter 的后置处理器(如 BeanShell PostProcessor )进行转码。 通常保持 utf-8 即可。 |
参数 (Parameters) | 用于添加 GET 请求的查询字符串参数 (URL 后 ?key=value&key2=value2 ) 或 POST 请求的 application/x-www-form-urlencoded 表单参数。 | * 模式: 名称=值 对。* GET: 参数会自动附加到 URL 后。 * POST (x-www-form-urlencoded): 参数会被编码后放入请求体。 注意: * 勾选 Encode? 让 JMeter 自动对参数值进行 URL 编码。* 勾选 Include Equals? 确保即使值为空也发送 key= 。 与 Body Data 互斥! |
消息体数据 (Body Data) | 用于 直接输入 HTTP 请求体 (Body) 的原始内容。适用于 POST /PUT 等方法发送 非表单数据,如 JSON , XML , 纯文本 。 | * {"username": "test", "password": "secret"} (JSON)* <request><id>123</id></request> (XML)* This is plain text 注意: * 必须设置正确的 Content-Type 请求头(如 application/json )告诉服务器如何解析。* 与 Parameters 和 Files Upload 互斥! |
文件上传 (Files Upload) | 用于模拟 文件上传 场景 (multipart/form-data )。 | * 文件路径: 选择要上传的本地文件路径。 * 参数名称: 服务器端接收文件字段的名称 (通常是 file 或 upload )。* MIME 类型: 指定上传文件的 MIME 类型 (如 image/png , text/plain , application/pdf )。注意: * 会自动设置 Content-Type: multipart/form-data 请求头。* 与 Parameters 和 Body Data 互斥! JMeter 会在此模式下忽略它们(除非在下面单独添加额外参数)。 |
3. 添加监听器
3.1 添加聚合报告
右击线程组 --> 添加 --> 监听器 --> 监听器 --> 聚合报告
JMeter 聚合报告 (Aggregate Report) 各统计列详解表
列名 | 解释说明 | 重要性/解读 |
---|---|---|
Label (标签) | 对应 采样器 (Sampler) 的名称。就是你为 HTTP 请求、JDBC 请求等设置的“名称”。 | 关键标识。用于区分不同请求类型的性能数据。确保为每个重要请求设置清晰、唯一的名称。 |
# Samples (样本数) | 在测试运行期间,该采样器总共被执行的次数。即这个请求一共发送了多少次。 | 基础量度。表示该请求承受的总负载量。结合线程数、循环次数、持续时间理解。样本数少可能意味着测试配置错误(如持续时间太短)或请求本身没有被正确调用。 |
Average (平均值) ms | 所有 样本响应时间的算术平均值。单位是毫秒 (ms)。 | 总体趋势参考。反映请求的“平均”响应速度。注意: 平均值容易受极少数特别长或特别短的响应时间影响,可能掩盖实际用户体验(如大部分用户很快,但少数极慢请求拉高了平均值)。 |
Median (中位数) ms | 将所有样本的响应时间从小到大排序,位于最中间的那个值。如果样本数是偶数,则取中间两个值的平均值。单位是毫秒 (ms)。 | 更贴近“典型”用户体验。表示至少 50% 的请求响应时间小于或等于这个值。相比平均值,中位数对极端值不敏感,更能代表大多数用户的感受。例如,中位数 200ms 表示一半请求在 200ms 内完成。 |
90% Line (90% 百分位) ms | 将所有样本的响应时间从小到大排序,90% 的样本响应时间小于或等于这个值。单位是毫秒 (ms)。 | 关键性能指标 (KPI)。也称为 P90。表示 90% 的用户体验在这个时间范围内。这是评估系统性能满足 服务水平协议 (SLA) 的常用指标(如 SLA 要求 95% 请求 < 1s,则看 95% Line)。它揭示了尾部延迟 (Tail Latency),比平均值/中位数更能反映“慢请求”的影响。值越接近中位数越好。 |
95% Line (95% 百分位) ms | 将所有样本的响应时间从小到大排序,95% 的样本响应时间小于或等于这个值。单位是毫秒 (ms)。 | 更严格的 KPI。也称为 P95。表示 95% 的用户体验在这个时间范围内。对要求更高的场景(如金融交易核心接口)非常重要。关注其与 90% Line 的差距,差距过大可能意味着系统不稳定或存在瓶颈。 |
99% Line (99% 百分位) ms | 将所有样本的响应时间从小到大排序,99% 的样本响应时间小于或等于这个值。单位是毫秒 (ms)。 | 揭示最差情况。也称为 P99。表示 99% 的用户体验在这个时间范围内,只有 1% 的请求比这个慢。用于评估极端情况下的用户体验和系统稳定性。这个值过高,即使平均值/90%很低,也会让那 1% 的用户感觉非常糟糕,可能影响口碑。 |
Min (最小值) ms | 所有样本响应时间中的最短时间。单位是毫秒 (ms)。 | 参考值。表示该请求理论上能达到的最快速度。通常由缓存命中或极简操作导致。单独看意义不大,需与其他值对比。 |
Max (最大值) ms | 所有样本响应时间中的最长时间。单位是毫秒 (ms)。 | 揭示问题点。表示该请求遇到的最慢情况。这个值非常高通常是问题的信号(如数据库死锁、资源耗尽、网络中断、特定请求触发了慢逻辑)。需要结合日志和监控排查具体原因。 |
Error % (异常率/错误率) % | 该采样器执行失败的请求占总样本数的百分比。失败可能由多种原因引起:HTTP 状态码 4xx/5xx、连接超时、响应断言失败等。 | 核心健康指标。最重要指标之一! 理想情况下应为 0%。非零表示有请求失败,直接影响用户体验和系统可用性。即使是 0.1% 也需要关注。高错误率通常意味着系统存在严重问题(代码缺陷、配置错误、资源不足等)。必须分析错误类型(查看结果树、日志)并解决。 |
Throughput (吞吐量) / sec | 单位时间内(每秒)服务器成功处理的该请求的数量。单位通常是 requests per second (请求数/秒)。JMeter 计算方式:Throughput = (样本数 - 错误数) / 测试运行总时长(秒) 。 | 核心性能容量指标。表示系统处理该请求的能力。数值越高越好。是评估系统性能、容量规划(需要多少服务器支撑预期流量)的关键依据。注意:这是该特定请求的吞吐量,不是整个系统的总吞吐量。总吞吐量需要看聚合报告最底部的汇总行或使用其他监听器(如 Summary Report)。 |
Received KB/sec (接收 KB/秒) | 单位时间内(每秒)JMeter 从服务器接收到的该请求响应数据的总量。单位是千字节每秒 (KB/sec)。 | 网络消耗指标。反映该请求返回数据的大小和频率对下行带宽的压力。对于返回大量数据(如图片、文件下载)的请求,这个值会很高。需关注是否可能成为网络瓶颈。 |
Sent KB/sec (发送 KB/秒) | 单位时间内(每秒)JMeter 向服务器发送的该请求请求数据的总量。单位是千字节每秒 (KB/sec)。 | 网络消耗指标。反映该请求发送数据的大小和频率对上行带宽的压力。对于上传文件或提交大量表单数据的请求(POST with large body),这个值会很高。需关注是否可能成为网络瓶颈。 |
Avg. Bytes (平均字节数) | 每个样本响应体大小的平均值。单位是字节 (Bytes)。 | 数据量参考。帮助理解单个响应通常返回多少数据。结合吞吐量可以估算网络流量 |
3.2 添加结果树
右击线程组 --> 添加 --> 监听器 --> 查看结果树
JMeter 查看结果树 (View Results Tree) 显示格式详解表
格式名称 | 适用数据 | 核心功能与特点 | 典型使用场景 | 注意事项 |
---|---|---|---|---|
Text | 任何文本响应 | * 最原始格式。 直接将响应体作为纯文本显示。 * 对于非文本响应(如图片),会显示二进制乱码或提示。 | * 快速查看原始响应内容。 * 查看非结构化文本。 * 当其他解析器不可用时。 | * 二进制内容(如图片、PDF)会显示乱码。 * 长文本无格式化,可读性差。 |
RegExp Tester | 任何文本响应 | * 专门用于测试正则表达式。 * 提供一个输入框输入正则表达式。 * 高亮显示匹配到的文本。 * 显示匹配组结果。 | * 调试和验证 正则表达式提取器 (Regular Expression Extractor) 的正则表达式。 * 快速测试正则是否能匹配响应内容。 | 仅用于测试正则表达式,不是常规查看响应的格式。 |
Boundary Extractor Tester | 任何文本响应 | * 专门用于测试边界提取器。 * 提供输入框设置左边界和右边界。 * 高亮显示根据边界提取到的文本。 * 显示提取结果。 | * 调试和验证 边界提取器 (Boundary Extractor) 的左右边界设置。 | 仅用于测试边界提取器,不是常规查看响应的格式。 |
CSS Selector Tester | HTML 响应 | * 专门用于测试 CSS/JQuery 选择器。 * 提供一个输入框输入 CSS 选择器表达式。 * 高亮显示匹配到的 HTML 元素。 * 显示提取结果(如 text, html, 属性值)。 | * 调试和验证 CSS/JQuery 提取器 (CSS/JQuery Extractor) 的选择器表达式。 | 仅用于测试 CSS/JQuery 选择器,不是常规查看响应的格式。 |
JSON Path Tester | JSON 响应 | * 专门用于测试 JSON Path 表达式。 * 提供一个输入框输入 JSON Path 表达式。 * 高亮显示或定位匹配的 JSON 节点。 * 显示提取结果。 | * 调试和验证 JSON 提取器 (JSON Extractor) 或 JSON Path 断言 的 JSON Path 表达式。 | 仅用于测试 JSON Path,不是常规查看响应的格式。 |
XPath2 Tester | XML 响应 | * 专门用于测试 XPath 2.0 表达式。 * 提供一个输入框输入 XPath 2.0 表达式。 * 高亮显示或定位匹配的 XML 节点。 * 显示提取结果。 | * 调试和验证 XPath2 提取器 (XPath2 Extractor) 或 XPath2 断言 的 XPath 2.0 表达式。 | 仅用于测试 XPath 2.0,不是常规查看响应的格式。 |
JSON JMESPath Tester | JSON 响应 | * 专门用于测试 JMESPath 表达式。 * 提供一个输入框输入 JMESPath 表达式。 * 高亮显示或定位匹配的 JSON 节点。 * 显示提取结果。 | * 调试和验证 JMESPath 提取器 (JMESPath Extractor) 或 JMESPath 断言 的 JMESPath 表达式。 | 仅用于测试 JMESPath,不是常规查看响应的格式。JMESPath 是 JSON 查询的更强大语言,功能类似 JSON Path 的超集。 |
XPath Tester | XML 响应 | * 专门用于测试 XPath 1.0 表达式。 * 提供一个输入框输入 XPath 1.0 表达式。 * 高亮显示或定位匹配的 XML 节点。 * 显示提取结果。 | * 调试和验证 XPath 提取器 (XPath Extractor) 或 XPath 断言 的 XPath 1.0 表达式。 | 仅用于测试 XPath 1.0,不是常规查看响应的格式。 |
HTML | HTML 响应 | * 渲染 HTML 视图。 尝试像浏览器一样渲染 HTML 页面。 * 显示基本的页面布局和元素。 * 不加载外部资源(图片、CSS、JS)。 | * 快速检查页面渲染的基本结构和内容是否符合预期。 * 查看纯 HTML 内容呈现的效果。 | * 渲染非常基础,不支持现代 CSS/JS,效果远不如真实浏览器。 * 性能消耗大,在压测中开启会严重影响结果,调试时使用,压测时务必禁用。 |
HTML Source Formatted | HTML 响应 | * 格式化显示 HTML 源代码。 * 对原始 HTML 进行缩进、换行等格式化,提高可读性。 | * 最常用! 清晰、可读地查看 HTML 响应的原始源代码。 * 分析 HTML 结构,查找特定元素或内容。 | 比原始的 Text 模式更易读,但仍是源代码视图。 |
HTML (download resources) | HTML 响应 | * 渲染 HTML 视图并尝试下载资源。 类似 HTML 模式,但会尝试下载页面中引用的图片、CSS、JS 等资源。* 极其消耗资源且不稳定。 | * 理论上可以更完整地模拟浏览器,但实际很少用且强烈不推荐。 | * 性能消耗巨大! 严重影响 JMeter 性能和压测结果。 * 下载过程可能失败或卡住。 * 强烈建议避免使用此模式,尤其在压测时绝对禁用。 |
Document | HTML / XML 响应 | * 基于 DOM 的视图。 将 HTML/XML 解析成文档对象模型 (DOM) 并以树形结构展示。 * 可以展开/折叠节点。 * 显示元素标签、属性、文本内容等。 | * 以结构化方式分析 HTML/XML 文档的层次结构。 * 辅助编写 XPath 或 CSS 选择器。 | 比纯文本更结构化,但不如源代码视图直观。 |
JSON | JSON 响应 | * 格式化显示 JSON 数据。 * 对原始 JSON 进行缩进、换行、语法高亮(取决于 JMeter 版本/主题)。 * 可展开/折叠 JSON 对象和数组。 | * 最常用! 清晰、可读地查看 JSON 响应的结构。 * 快速定位特定字段的值。 * 调试 JSON 接口的必备视图。 | 极大地提高了 JSON 数据的可读性和调试效率。 |
XML | XML 响应 | * 格式化显示 XML 数据。 * 对原始 XML 进行缩进、换行、语法高亮(取决于 JMeter 版本/主题)。 * 可展开/折叠 XML 元素节点。 | * 最常用! 清晰、可读地查看 XML 响应的结构。 * 快速定位特定元素或属性。 * 调试 XML 接口的必备视图。 | 极大地提高了 XML 数据的可读性和调试效率。 |
4. 启动测试
2 种启动方式:
- 在顶部导航栏图标下的绿色按钮即可启动/停止
- 右击线程组 --> 启动 (start)
注意:
- 这里让保存现有已配置的信息,可以直接 No 或者 × 掉,但是下次信息无
- 保存配置信息,下次打开
查看结果树:
- 请求:包含请求头、请求体
- 响应:包含响应头、响应体
- 取样结果:可以查看配置信息
聚合报告:
当前测试吞吐量:每秒请求 100次
五、其它操作
1. 清理测试数据
当测试后,我们一般需要清除这一次的数据
- 在顶部导航栏图标下的扫把按钮即可清除当前测试数据,
- 注意两个扫把,需选中监听测试组件 --> 点击
- 另一个直接点击清除全部的扫把按钮