JMeter 登录 + CSV 参数化 + JSON 关联 完整实操步骤(可直接跟着配置) 📅 2026/6/30 21:40:06 JMeter 登录CSV参数化JSON关联 完整实操步骤可直接跟着配置整体流程线程组 → CSV参数化账号密码→ 仅一次控制器登录→ HTTP登录请求 → JSON提取器拿token → 业务接口Header携带token→ 断言校验一、前置准备CSV参数文件新建user.csv放到JMeter bin目录内容username,pwd test01,123456 test02,654321 test03,888888分隔符逗号第一行为变量名后续每行一组账号密码。二、完整组件层级结构照着建测试计划 └── 线程组并发用户数3Ramp-Up3循环5 ├── 配置元件 │ ├── HTTP请求默认值统一域名/端口 │ ├── CSV Data Set Config读取user.csv账号 │ └── HTTP信息头管理器存放token后续业务接口共用 ├── 逻辑控制器仅一次控制器登录接口只执行1次 │ └── HTTP取样器登录接口 │ ├── JSON提取器提取返回token │ └── JSON断言校验登录成功code200 └── HTTP取样器查询用户业务接口 ├── JSON断言校验返回数据三、分步详细配置1. HTTP请求默认值统一域名简化接口路径右键线程组 → 添加 → 配置元件 → HTTP请求默认值协议http服务器名称或IP127.0.0.1端口号8080路径/api后续接口只需要填写后缀如/login/user/info不用重复写完整地址2. CSV Data Set Config 参数化账号右键线程组 → 添加 → 配置元件 → CSV数据文件设置配置项填写内容说明文件名user.csv文件放jmeter/bin下写相对路径变量名称username,pwd和csv表头一一对应分隔符,csv逗号分隔忽略首行✅勾选跳过表头行循环读取True读完循环复用账号读到文件结束停止线程False不停止循环使用共享模式当前线程组同组线程分开读取避免账号重复抢占接口引用变量${username}${pwd}3. 仅一次控制器登录只执行1次右键线程组 → 添加 → 逻辑控制器 → 仅一次控制器把登录HTTP请求拖进这个控制器内每个线程只会执行一次登录循环只跑业务接口。4. 登录HTTP请求取样器右键仅一次控制器 → 添加 → 取样器 → HTTP请求方法POST路径/login参数表单/JSON二选一方式1表单参数参数名username值${username}参数名pwd值${pwd}方式2JSON请求体主流后端HTTP信息头管理器新增Content-Type: application/json请求体{username:${username},password:${pwd}}登录接口返回示例标准JSON{code:200,msg:登录成功,data:{token:eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9,userId:1001}}5. JSON提取器提取token接口关联核心右键登录请求 → 添加 → 后置处理器 → JSON提取器配置项填写值引用名称tokenJSON路径表达式$.data.token匹配数字1拓展同时提取userId新增JSON提取器引用名称userId表达式$.data.userId6. 登录接口JSON断言校验登录成功右键登录请求 → 添加 → 断言 → JSON断言测试字段路径$.code测试模式等于测试值200作用登录返回code≠200时标记请求失败聚合报告统计错误率。7. 全局请求头管理器下游接口自动携带token右键线程组 → 添加 → 配置元件 → HTTP信息头管理器新增头名称Authorization值Bearer ${token}所有下层HTTP请求会自动带上该鉴权头无需每个接口重复配置。8. 业务接口查询用户信息直接放在线程组下仅一次控制器外部请求方法GET路径/user/info?userId${userId}添加JSON断言校验返回用户名测试字段路径$.data.name测试模式非空9. 添加监听器调试压测报表查看结果树GUI调试用运行时看请求/响应、断言失败原因压测时删除防止内存溢出聚合报告性能压测核心指标平均响应、95%响应、吞吐量、错误率四、非GUI命令行执行脚本线上压测保存脚本为api_test.jmxbin目录执行命令jmeter-n-tapi_test.jmx-lresult.jtl-e-oreport_html-n无界面运行-t指定脚本-l输出日志jtl文件-e -o自动生成可视化html报告五、高频拓展脚本/函数补充1. 随机字符串函数注册接口随机用户名打开工具-函数助手生成${__RandomString(8,abcdefgh123456,randName)}8位随机字符变量名randName请求中${randName}使用2. 自增数字唯一订单号${__counter(false,orderNum)}false全局计数器所有线程共用一套自增数字3. If控制器示例token存在才执行查询接口新建If控制器表达式${__jexl3(${token} ! ,)}只有token不为空时内部业务接口才会执行。六、常见踩坑解决CSV读取同一行账号并发冲突CSV共享模式改为「当前线程」每个线程独立读取一行数据JSON提取器拿不到token检查JSONPath表达式、接口返回JSON格式是否正确查看结果树校验响应体下游接口401未鉴权确认HTTP信息头管理器在线程组层级token变量名书写无错${token}仅一次控制器多次执行控制器必须在线程组下登录请求放在控制器内部不要嵌套循环控制器GUI压测卡死大并发压测删除「查看结果树」监听器改用命令行非GUI模式运行