【Jmeter】Jmeter 高并发性能压力测试

目录

[一、下载 Jmeter](#一、下载 Jmeter)

二、配置环境变量

三、设置中文语言

四、入门最简单的高并发性能压测流程

[1. 添加线程组](#1. 添加线程组)

[2. 添加请求](#2. 添加请求)

[3. 添加监听器](#3. 添加监听器)

[3.1 添加聚合报告](#3.1 添加聚合报告)

[3.2 添加结果树](#3.2 添加结果树)

[4. 启动测试](#4. 启动测试)

[2 种启动方式:](#2 种启动方式:)

查看结果树:

聚合报告:

五、其它操作

[1. 清理测试数据](#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.jarjorphan.jar的环境变量即可正常运行测试。

  • 即使未设置 JMETER_HOME,只要直接运行 jmeter.bat(Windows)或 jmeter.sh(Linux/Mac)且 JMeter 目录结构完整,脚本也能通过相对路径找到 JAR 包。

  • 为了能快速命令方式启动以及兼容性和避免路径问题,建议设置 JMETER_HOME

Windows11 直接搜索环境变量

  1. 打开环境变量
  2. 系统变量 ---> 增加 JMETER_HOME ---> 值建议 jmeter主目录\ Jmeter 版本
  3. 系统变量 ---> 找到 path 双击打开 ---> 增加 %JMETER_HOME%\bin

三、设置中文语言

  1. Options选项
  2. Choose Language 更改语言
  3. Chinese中文

四、入门最简单的高并发性能压测流程

  1. 添加线程组
  2. 添加请求
  3. 添加监听树
  4. 启动测试

1. 添加线程组

右击 TestPlan --> 添加 --> 线程(用户) --> 线程组

填入测试

  • 线程组:100
  • Ramp-Up:10
  • 循环次数:10

JMeter 线程组核心参数解释表

参数名称 含义 示例说明
线程数 定义测试中要模拟的 最大并发虚拟用户 (VU) 数量 线程数 = 10:表示 JMeter 最终会创建并运行 10 个独立的线程(虚拟用户),每个用户都会执行测试计划中定义的请求。
Ramp-Up 时间 (秒) 定义 JMeter 启动所有线程 (虚拟用户) 所需的总时间 (秒)。目的是平滑增加负载,避免瞬间压力冲击。 线程数 = 10Ramp-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 等方法中发送的 ParametersBody 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)告诉服务器如何解析。 * ParametersFiles Upload 互斥!
文件上传 (Files Upload) 用于模拟 文件上传 场景 (multipart/form-data)。 * 文件路径: 选择要上传的本地文件路径。 * 参数名称: 服务器端接收文件字段的名称 (通常是 fileupload)。 * MIME 类型: 指定上传文件的 MIME 类型 (如 image/png, text/plain, application/pdf)。 注意: * 会自动 设置 Content-Type: multipart/form-data 请求头。 * ParametersBody 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 种启动方式

  1. 在顶部导航栏图标下的绿色按钮即可启动/停止
  2. 右击线程组 --> 启动 (start)

注意

  • 这里让保存现有已配置的信息,可以直接 No 或者 × 掉,但是下次信息无
  • 保存配置信息,下次打开

查看结果树:

  • 请求:包含请求头、请求体
  • 响应:包含响应头、响应体
  • 取样结果:可以查看配置信息

聚合报告:

当前测试吞吐量:每秒请求 100次


五、其它操作

1. 清理测试数据

当测试后,我们一般需要清除这一次的数据

  • 在顶部导航栏图标下的扫把按钮即可清除当前测试数据,
    • 注意两个扫把,需选中监听测试组件 --> 点击
    • 另一个直接点击清除全部的扫把按钮
相关推荐
沉豆11 小时前
Jmeter调用jar包中的方法,并使用返回值当请求参数
java·jmeter·jar
慢飞的笨鸟1 天前
Jmeter压测手册:脚本配置、服务器环境搭建与运行
jmeter
软件测试大叔3 天前
arm服务器运行Jmeter报错问题UseG1GC
jmeter
海姐软件测试3 天前
使用Jmeter做功能测试有哪些优点?
功能测试·jmeter
明月与玄武6 天前
JMeter 实现 MQTT 协议压力测试 !
jmeter·压力测试·jmeter实现 mqtt协议
文小大6 天前
五、jmeter脚本参数化
jmeter
程序员的世界你不懂6 天前
Jmeter(四) - 如何在jmeter中创建网络测试计划
jmeter
1.01^10007 天前
[5-02-04].第01节:Jmeter环境搭建:
jmeter
太阳之神aboluo7 天前
压测软件-Jmeter
java·运维·jmeter