当前位置: 首页 > news >正文

Jmeter变量传递介绍

文章目录

  • 一、Jmeter变量类型及作用域
  • 二、变量传递方式
    • 1. 用户定义变量(User Defined Variables)
    • 2. CSV 数据文件(CSV Data Set Config)
    • 3.正则表达式提取器
    • 4.后置处理器(Post Processor)
      • 4.1BeanShell/JSR223 后置处理器:
      • 4.2 JSON提取器:从JSON响应中提取值
    • 5.函数助手(Function Helper)
  • 三、跨线程组传递变量
    • 1:通过属性(推荐)
    • 2.通过文件共享
  • 四、高级技巧
    • 1. 动态变量名解析
    • 2. 变量转换
    • 3. 条件变量设置
    • 4. 跨测试计划传递
  • 五、常见问题与解决方案
  • 六、最佳实践
    • 1.最小化全局变量
    • 2.分层设计:
    • 3.使用函数替代硬编码:
    • 4.调试工具:
    • 5.参数化策略:

一、Jmeter变量类型及作用域

JMeter 中,变量传递是实现测试逻辑复用、数据共享和参数化的核心机制。
在这里插入图片描述

二、变量传递方式

1. 用户定义变量(User Defined Variables)

作用:定义全局常量,在测试计划开始时初始化
引用:${baseUrl}/endpoint

<UserDefinedVariables><elementProp name="variables" elementType="Arguments"><collectionProp name="Arguments.arguments"><elementProp name="baseUrl" elementType="Argument"><stringProp name="Argument.value">https://api.example.com</stringProp></elementProp></collectionProp></elementProp>
</UserDefinedVariables>

定义:
在这里插入图片描述
引用

在这里插入图片描述
HTTP Request Defaults可以设置协议、IP和端口号,这样便于多环境改动,图示参考
在这里插入图片描述

2. CSV 数据文件(CSV Data Set Config)

作用:数据驱动测试,从文件读取参数
使用方法:

  • 创建 CSV文件,编码保存为UTF-8:
  • 添加CSV配置元件,从CSV读取测试数据
  • 通过CSV配置元件设置的变量名引用测试数据

CSV配置元件介绍

3.正则表达式提取器

作用:从响应中动态提取数据

4.后置处理器(Post Processor)

4.1BeanShell/JSR223 后置处理器:

// 设置变量
vars.put("calculatedValue", "123");// 设置属性(全局共享)
props.put("globalToken", vars.get("token"));

4.2 JSON提取器:从JSON响应中提取值

5.函数助手(Function Helper)

常用函数:
${__threadNum}:当前线程编号
${__time}:当前时间戳
${__Random(1,100)}:生成随机数
${__setProperty(propName,value)}:设置属性
KaTeX parse error: Expected group after '_' at position 2: {_̲_V(var{index})}:动态解析变量名

三、跨线程组传递变量

由于 JMeter 变量默认是线程私有的,跨线程组传递需通过属性或文件:

1:通过属性(推荐)

3.1 设置方法:

  • 通过函数:${__setProperty(prop_name, value,)}
  • 通过元件:添加 BeanShell 后置处理器 或 JSR223 后置处理器

3.2 通过元件实现跨线程组传递实例

在线程组A中设置属性

// BeanShell 后置处理器
//将变量token转为属性
props.put("sharedToken", vars.get("token"));

在线程组B中读取属性

// BeanShell 前置处理器
vars.put("localToken", props.get("sharedToken"));

3.3引用方式

// 读取属性
${__P(localToken,)} 

2.通过文件共享

//写入文件
FileWriter fw = new FileWriter("shared_data.txt");
fw.write(vars.get("token"));
fw.close();//读取文件
BufferedReader br = new BufferedReader(new FileReader("shared_data.txt"));
vars.put("token", br.readLine());
br.close();

四、高级技巧

1. 动态变量名解析

// 假设 index=1,动态获取 param_1 的值
${__V(param_${index})}

2. 变量转换

变量 → 属性:KaTeX parse error: Expected group after '_' at position 2: {_̲_setProperty(my…{myVar},)}
属性 → 变量:vars.put(“myVar”, props.get(“myProp”));

3. 条件变量设置

// BeanShell 中根据条件设置变量
if (vars.get("status").equals("success")) {vars.put("nextStep", "proceed");
} else {vars.put("nextStep", "retry");
}

4. 跨测试计划传递

使用 Include Controller 引用外部 JMX 文件时,通过属性传递变量:

// 在主测试计划中设置属性
props.put("importedVar", "value");// 在被引用的 JMX 文件中读取
vars.put("localVar", props.get("importedVar"));

五、常见问题与解决方案

在这里插入图片描述

六、最佳实践

1.最小化全局变量

尽量使用线程私有变量,减少全局属性的使用

2.分层设计:

测试计划层:全局配置(如服务器地址)
线程组层:线程特定配置
取样器层:请求特定参数

3.使用函数替代硬编码:

如 ${__threadNum} 替代固定线程编号

4.调试工具:

  • 添加 Debug Sampler 查看变量状态
  • 使用 View Results Tree 验证提取器结果

5.参数化策略:

固定值:用户定义变量
动态值:正则表达式提取器 / JSON 提取器
批量数据:CSV 数据文件
计算值:BeanShell/JSR223脚本

相关文章:

  • 【Java面试题】——this 和 super 的区别
  • Jmeter对服务端进行压测快速上手
  • 使用IDEA创建Maven版本的web项目以及lombok的使用
  • PyTorch 中神经网络相关要点(损失函数,学习率)及优化方法总结
  • Jmeter -- JDBC驱动连接数据库超详细指南
  • VS打印printf、cout或者Qt的qDebug等传出的打印信息
  • 微服务调试问题总结
  • OpenHarmony 开源鸿蒙南向开发——linux下使用make交叉编译第三方库——wget
  • SPL做量化--DMA(平均差分析指标)
  • 嵌入式Linux Qt开发:2、Qt creator简单配置、Qt Designer使用以及信号槽机制使用
  • 进阶数据结构: AVL树
  • LeetCode 热题 100 114. 二叉树展开为链表
  • 【C++】map和set的模拟实现
  • PyTorch深度神经网络(前馈、卷积神经网络)
  • hacker送书第22期
  • React 第三十九节 React Router 中的 unstable_usePrompt Hook的详细用法及案例
  • 鸿蒙OSUniApp 实现的语音输入与语音识别功能#三方框架 #Uniapp
  • ORACLE查看归档是否打开
  • C++23 中的 ranges::starts_with 与 ranges::ends_with
  • 灰度图像和RGB图像在数据大小和编码处理方式差别
  • 六连板成飞集成:航空零部件业务收入占比为1.74%,市场环境没有重大调整
  • 商务部新闻发言人就暂停17家美国实体不可靠实体清单措施答记者问
  • 王征、解宁元、牛恺任西安市副市长
  • 金砖国家召开经贸联络组司局级特别会议,呼吁共同抵制单边主义和贸易保护主义
  • 国台办:台湾自古属于中国,历史经纬清晰,法理事实清楚
  • 台行政机构网站删除“汉人”改为“其余人口”,国台办回应