当前位置: 首页 > 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脚本

http://www.xdnf.cn/news/446149.html

相关文章:

  • JavaScript 中级进阶技巧之map函数
  • 哈希表的实现01
  • java每日精进 5.14【参数校验】
  • qml中定时器的用法
  • 操作系统期末复习笔记
  • WHAT - 前端开发滚动场景API罗列
  • Web UI测试效率低?来试Parasoft Selenic的智能修复与分析!
  • 从 “学会学习” 到高效适应:元学习技术深度解析与应用实践
  • 常见 RPC 协议类别对比
  • 《Effective Python》第2章 字符串和切片操作——深入理解 Python 中 __repr__ 与 __str__
  • 行业趋势与技术创新:驾驭工业元宇宙与绿色智能制造
  • 【氮化镓】AlGaN合金中成分相关的辐射响应
  • 最短路和拓扑排序知识点
  • 各省网上零售额数据(2015-2022年)-社科数据
  • C++之fmt库介绍和使用(1)
  • TCP/IP-——C++编程详解
  • 【windows server脚本每天从网络盘复制到本地】
  • C 语言学习笔记(8)
  • 【3Ds Max】.ive格式文件的导出与加载
  • Oracle数据库中,WITH..AS 子句用法解析
  • 解读红黑树:揭晓高效数据结构的核心引擎
  • 精益数据分析(58/126):移情阶段的深度实践与客户访谈方法论
  • 全面解析 Server-Sent Events(SSE)协议:从大模型流式输出到实时通信场景
  • Spring MVC数据绑定和响应 你了解多少?
  • 如何下载和安装 Ghost Spectre Windows 11 24H2 PRO
  • 102. 二叉树的层序遍历递归法:深度优先搜索的巧妙应用
  • 软件设计师考试《综合知识》计算机编码考点分析
  • [Linux] vim及gcc工具
  • Spring中的循环引用
  • 一发入魂:极简解决 SwiftUI 复杂视图未能正确刷新的问题(上)