文章目录
- [JMeter 性能测试](#JMeter 性能测试)
-
- [JMeter 基本使用流程](#JMeter 基本使用流程)
-
- [JMeter 元件作用域和执行顺序](#JMeter 元件作用域和执行顺序)
- 重点组件
-
- 线程组
- [HTTP 取样器](#HTTP 取样器)
- 查看结果树
- [HTTP Cookie 管理器](#HTTP Cookie 管理器)
- [HTTP 请求默认值](#HTTP 请求默认值)
- 用户定义的变量
- [CSV 数据文件设置](#CSV 数据文件设置)
- [JSON 提取器](#JSON 提取器)
- [JSON 断言](#JSON 断言)
- 同步定时器(集合点)
- 事务控制器
- 安装插件
- [Stepping Thread Group](#Stepping Thread Group)
- 常见监听器
-
- 聚合报告
- [Response Times Over Time](#Response Times Over Time)
- [Transactions per Second(TPS)](#Transactions per Second(TPS))
- 测试报告
JMeter 性能测试
JMeter 基本使用流程
- 启动 JMeter
- 在"测试计划"下添加"线程组"

- 在"线程组"下添加"HTTP 取样器"

-
填写"HTTP 请求"的相关请求数据(协议、IP、端口、方法、路径、参数等)

-
在"线程组"下添加"查看结果树"监听器

-
点击"启动"按钮运行,查看接口测试结果

JMeter 元件作用域和执行顺序
- 作用域:由测试计划的树形结构中的元件父子关系确定
- 执行顺序:取样器不依赖其他元件即可执行,因此不存在作用域问题;其他元件作用域只对子节点起作用
重点组件
线程组

- 控制 JMeter 执行测试的线程数(一个线程 = 一个测试用户)
- 线程组配置项 :
- 名称、注释
- 在取样器错误后要执行的动作(继续/启动下一进程循环/停止线程/停止测试/立即停止测试)
- 线程属性 :
- 线程数:发送请求的线程数量
- Ramp-Up 时间(秒):启动所有线程所需时间
- 循环次数:配置指定次数或"永远"
- Same user on each iteration
- 延迟创建线程直到需要
- 调度器 :
- 持续时间(秒):脚本执行时间
- 启动延迟(秒):等待指定时间后才开始运行
HTTP 取样器

- 配置项 :
- 名称、注释
- Web 服务器:协议(http/https)、端口(80/443)
- HTTP 请求:方法(GET/POST等)、路径
- 自动重定向、跟随重定向、使用 KeepAlive、对 POST 使用 multipart/form-data、与浏览器兼容的头
- 参数(可拼在路径里或写在参数表中)
- 消息体数据(POST 参数放于此,如
{wd:test}) - 内容编码:建议使用 UTF-8
查看结果树

- 取样器结果 :
- Thread Name:线程组名称
- Sample time:发送请求时间
- Load time:响应时间
- Response code:接口响应状态码
- 请求:显示 HTTP 请求头和请求体
- 响应:显示 HTTP 响应头和响应体
HTTP Cookie 管理器
- 像 Web 浏览器一样存储和发送 Cookie
- 如果响应包含 Cookie,则自动存储并用于后续对该网站的请求
- 每个 JMeter 线程有自己的 Cookie 存储区
- 缓存配置可选择 standard 或 compatibility
- 可手工添加 Cookie
- 添加后会自动存储并发送 Cookie(示例中展示了 JSESSIONID)


HTTP 请求默认值
- 将协议、IP、端口号等公共配置抽取出来,供多个 HTTP 取样器复用



用户定义的变量

- 添加方式:线程组 → 配置元件 → 用户定义的变量
- 使用:在 HTTP 请求中通过
${变量名}引用 - 适用场景:变量需要在多个脚本中统一管理和修改

CSV 数据文件设置

- 用途:模拟多用户登录,提供更多用户名/密码
- 添加方式:线程组 → 配置元件 → CSV 数据文件设置
- 操作步骤 :
- CSV 数据文件设置:

- 文件名:填写 CSV 文件路径(建议绝对路径)
- 文件编码:UTF-8
- 变量名称:读取数据后保存的变量名(多个用逗号分隔)
- 是否忽略首行:是否从第一行开始读取
- 分隔符:与 CSV 文件中列分隔符一致
- 遇到文件结束符再次循环:True 则从头取,False 需勾选"遇到文件结束符停止线程"
-
编写 test.csv 文件(示例)
-
修改登录接口及其他涉及 username/password 的参数,替换为
${变量名}
-
修改线程组中的线程数,使每次取到的数据不同

-
运行结果

JSON 提取器

- 用途:从接口响应中提取特定字段,供后续接口使用
- 添加方式:针对某个 HTTP 请求添加 → 后置处理器 → JSON 提取器
- JSONPath 操作符参考 :
$:根元素@:当前元素*:通配符,所有节点..:选择所有符合条件的节点.<name>:子元素['<name>','<name>']:子元素列表[<number>,<number>]:数组索引或索引列表[start:end]:数组切片[?(<expression>)]:过滤器表达式
- 示例:获取所有 blogId:
$..blogId;获取第一个:$..[0]blogId - 配置后,后续接口可引用提取的变量(如
${blogId}) 

JSON 断言
-
用途:验证接口响应数据是否符合预期(不仅检查状态码)
-
添加方式:针对某个 HTTP 请求添加 → 断言 → JSON 断言


-
配置注意点:
- 若不选 "Additionally assert value",则可判断字段是否存在
- 若选择此项,则必须填写 Expected Value
- 若不选 "Match as regular expression",则 Expected Value 必须完整匹配
- 若选择正则匹配,则可仅填写关键词
同步定时器(集合点)

- 用途:模拟多用户并发,让多个线程在同一时刻执行操作
- 添加方式:线程组 → 定时器 → 同步定时器
- 作用:当线程数量达到指定值后一起释放,产生瞬间压力
- 类比:红绿灯,所有人等待绿灯同时通过
事务控制器
- 用途:测试执行嵌套测试元素所花费的总时间,将多个接口统一作为一个事务
- 添加方式:线程组 → 逻辑控制器 → 事务控制器
- 默认情况下,一个接口即一个事务;加入事务控制器后可将多个接口合并为一个事务

安装插件
-
通过插件管理工具下载其他插件:
-
下载其他监听器插件

-
下载线程组插件(Custom Thread Groups)

-
-
操作:在 Jmeter Plugins Manager 中,选择 Available Plugins,搜索并安装,点击 Apply Changes and Restart JMeter
-


Stepping Thread Group

- 参数配置:
- This group will start:启动多少个线程
- First, wait for:等待多少秒才开始压测(默认0)
- Then start:一开始有多少个线程数(默认0)
- Next, add:下一次增加多少个线程数
- threads every:当前运行多长时间后再次启动线程
- using ramp-up:启动线程的持续时间(如5秒)
- then hold load for:全部启动后持续运行时间
- finally, stop / threads every:多长时间释放多少个线程
常见监听器
聚合报告
- 展示整体性能数据,包含以下指标:
- Label:请求名称
- #样本:请求数
- 平均值:平均响应时间(ms)
- 中位数:50% 请求的响应时间
- 90% 百分位、95% 百分位、99% 百分位
- 最小值、最大值
- 异常%:调用失败占比
- 吞吐量:TPS/QPS,每秒处理事务数
- 接收 KB/sec、发送 KB/sec:网络传输流量

Response Times Over Time

- 监听整个运行期间的响应时间变化
- 横坐标:运行时间,纵坐标:响应时间(ms)
- 用于观察响应时间稳定性和波动
Transactions per Second(TPS)
- 分析系统吞吐量(TPS = 每秒事务数)
- 横坐标:运行时间,纵坐标:TPS 值
- 红色表示通过的 TPS,绿色表示失败的 TPS

测试报告
-
生成命令:
JMeter -n -t 脚本文件 -l 日志文件 -e -o 报告目录-n:无图形化运行-t:被运行的脚本-l:将运行信息写入 jtl 日志文件-e:生成测试报告-o:指定报告输出目录(必须为空或不存在)
-
正确示例命令及执行后生成的文件(包括 index.html)
-
双击 index.html 即可查看报告


性能测试报告生成后,在rizhi文件夹下

