Jmeter中变量如何使用?

发布于:2025-06-15 ⋅ 阅读:(16) ⋅ 点赞:(0)

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
  • CSV 文件示例:
admin,123456
test,abcdef
  • 每个线程读取一行,并将 ${user} 和 ${password} 替换为相应值。

2.3 BeanShell / JSR223 赋值

  • 在 JSR223 PreProcessor 中设置变量:
vars.put("authToken", "Bearer 123456abc")
  • 引用方法:${authToken}。

2.4 提取器生成变量

  • 例如使用 JSON Extractor:
JSONPath:$.data.token
变量名:token
  • 提取成功后,${token} 就可用于后续请求。

3 变量的作用域说明

  • 变量的作用范围会影响其可用性和更新行为:
变量类型 作用范围 生命周期
用户自定义变量 整个线程组内可见 脚本运行期间不变
CSV 变量 当前线程 每线程一行,生命周期随线程
vars.put() 当前线程 动态创建,可被后续请求访问
提取变量 当前线程请求后 通常只在后续使用
  • 注意事项:

不同线程组间变量不可共享(除非用 JMeter Properties);
使用 vars.get() / vars.put() 访问线程变量;
使用 props.get() / props.put() 访问全局变量(不推荐用于并发写)。

4 变量嵌套与函数辅助

  • JMeter 支持变量嵌套和函数组合使用:
${__RandomString(8,abcdefghijklmnopqrstuvwxyz,varname)}
  • 可以动态生成一个变量 ${varname},后续引用 ${varname} 即可。
  • 嵌套示例:
服务器地址:${__P(env)}.example.com
  • 结合命令行传参:-Denv=dev。

5 变量使用实战案例

场景:登录后提取 Token 并用于后续请求

5.1 HTTP 请求 - 登录接口

  • 请求类型:POST
  • 请求体:
{"username": "admin", "password": "123456"}

5.2 JSON Extractor

  • JSONPath 表达式:$.data.token
  • 变量名称:token

5.3 HTTP 请求 - 需要鉴权的接口

  • Header:
Authorization: Bearer ${token}
  • 此场景实现了从响应中提取变量并在后续请求中使用的链式操作。

6 常见问题与错误排查

问题 原因 解决方案
${var} 显示为空 变量未定义或作用域不对 检查变量是否在当前线程组定义
CSV 参数未变化 缓存导致、共享模式错误 设置 Sharing Mode=Current Thread
多线程变量冲突 使用 props 全局变量 改用 vars 或线程安全写法
提取失败导致后续接口报错 提取器配置不正确 使用 Debug Sampler 检查返回体