Jmeter中变量如何使用?
- 1、JMeter 变量的基本概念
- 2 定义变量的几种方式
- 2.1 用户自定义变量(User Defined Variables)
- 2.2 CSV Data Set Config
- 2.3 BeanShell / JSR223 赋值
- 2.4 提取器生成变量
- 3 变量的作用域说明
- 4 变量嵌套与函数辅助
- 5 变量使用实战案例
- 5.1 HTTP 请求 - 登录接口
- 5.2 JSON Extractor
- 5.3 HTTP 请求 - 需要鉴权的接口
- 6 常见问题与错误排查
1、JMeter 变量的基本概念
- JMeter 中的“变量”指的是可在测试计划中被引用和替换的值;
- 变量可以静态定义,也可以在运行过程中动态生成。
- JMeter 支持以下几种变量类型:
类型 | 示例 | 来源 |
---|
用户自定义变量 | ${username} | Test Plan 或 User Defined Variables |
预处理器赋值 | ${var} | Beanshell / JSR223 PreProcessor |
参数化变量 | ${user_1} | CSV Data Set Config |
响应提取变量 | ${token} | JSON Extractor、Regular Expression Extractor |
系统变量 | ${__time(YMD)} | 函数助手或内置函数 |
2 定义变量的几种方式
2.1 用户自定义变量(User Defined Variables)
- 在 Test Plan、Thread Group 或 Test Fragment 下添加 User Defined Variables 元件:
变量名:username
变量值:admin
- 然后可以在任何地方用 ${username} 引用。
2.2 CSV Data Set Config
- 用于从 CSV 文件中读取参数,进行数据驱动测试:
文件路径:data/users.csv
变量名:user,password
admin,123456
test,abcdef
- 每个线程读取一行,并将 ${user} 和 ${password} 替换为相应值。
2.3 BeanShell / JSR223 赋值
- 在 JSR223 PreProcessor 中设置变量:
vars.put("authToken", "Bearer 123456abc")
2.4 提取器生成变量
JSONPath:$.data.token
变量名:token
3 变量的作用域说明
变量类型 | 作用范围 | 生命周期 |
---|
用户自定义变量 | 整个线程组内可见 | 脚本运行期间不变 |
CSV 变量 | 当前线程 | 每线程一行,生命周期随线程 |
vars.put() | 当前线程 | 动态创建,可被后续请求访问 |
提取变量 | 当前线程请求后 | 通常只在后续使用 |
不同线程组间变量不可共享(除非用 JMeter Properties);
使用 vars.get() / vars.put() 访问线程变量;
使用 props.get() / props.put() 访问全局变量(不推荐用于并发写)。
4 变量嵌套与函数辅助
${__RandomString(8,abcdefghijklmnopqrstuvwxyz,varname)}
- 可以动态生成一个变量 ${varname},后续引用 ${varname} 即可。
- 嵌套示例:
服务器地址:${__P(env)}.example.com
5 变量使用实战案例
场景:登录后提取 Token 并用于后续请求
5.1 HTTP 请求 - 登录接口
{"username": "admin", "password": "123456"}
5.2 JSON Extractor
- JSONPath 表达式:$.data.token
- 变量名称:token
5.3 HTTP 请求 - 需要鉴权的接口
Authorization: Bearer ${token}
- 此场景实现了从响应中提取变量并在后续请求中使用的链式操作。
6 常见问题与错误排查
问题 | 原因 | 解决方案 |
---|
${var} 显示为空 | 变量未定义或作用域不对 | 检查变量是否在当前线程组定义 |
CSV 参数未变化 | 缓存导致、共享模式错误 | 设置 Sharing Mode=Current Thread |
多线程变量冲突 | 使用 props 全局变量 | 改用 vars 或线程安全写法 |
提取失败导致后续接口报错 | 提取器配置不正确 | 使用 Debug Sampler 检查返回体 |