Jmeter的线程组之间传递参数

使用jemter做接口测试,有时候需要会遇到不同线程组之间调用相同变量的情况,最多见的就是token的传递,网上有很多处理方法,这里只记录setProperty的办法,一招鲜走遍天!

首先我有两个线程组:

线程组1中要获取token值,

然后传递到线程组2的http header中使用。

由接口规则,向HTTP接口发送请求后,返回了需要的包含token的内容:

由图可见,返回的json格式为:

token:value

expirationPeriodMills:value

在这个HTTP请求下,添加一个后置处理器,JSON提取器:

token_value是变量名,获取到的token存入这个变量。

$.token表示从根开始的键值为token的值。

这里我们可以给这个线程组添加一个 debugger sampler,默认设置就可以:

运行进程的时候,就会像结果树一样显示采样结果,其中包含当前线程组里变量的值。这样可以检查json提取器是否生效。

然后在线程组添加一个BeanShell后置处理器,放在HTTP请求后面:

${__setProperty(TOKEN,${token_value})}

表示把${token_value}这个函数的值存入名称为TOKEN的属性中。

下一步开始在第二个线程组里使用这个属性:

在第二个线程组里添加一个 用户参数,增加参数值,名称和${__P(TOKEN,)}

一定要注意,这里的下划线是两个__,保存后,这个存有token值的参数${mytoken},就可以在第二个线程组里使用了。

以此类推,所有线程组之间传递参数的问题,都可以迎刃而解。

### JMeter 中实现跨线程组传递参数的方法 在 JMeter 的测试计划中,默认情况下,不同的线程组是相互独立运行的,彼此之间不会共享任何数据[^1]。然而,在某些场景下可能需要实现在不同线程组传递参数的功能。以下是几种常见的方法及其具体实现方式: #### 方法一:通过文件作为中间媒介 可以利用外部文件(如 CSV 文件)作为存储介质来完成线程组间的参数传递。 ##### 实现步骤说明: 1. **写入文件** 在第一个线程组中提取所需的参数值并将其保存到指定路径下的文件中。可以通过 `JSR223 PostProcessor` 使用 Groovy 或 Java 编写的脚本来操作文件。 ```groovy import java.io.FileWriter; FileWriter writer = new FileWriter("path/to/your/file.csv", true); writer.write(vars.get("parameterName") + "\n"); writer.close(); ``` 2. **读取文件** 在第二个线程组中使用 `CSV Data Set Config` 组件加载该文件中的内容,并将这些值分配给相应的变量供后续使用[^2]。 --- #### 方法二:借助 JMeter 属性 (Properties) JMeter 提供了一种机制允许设置全局属性,从而可以在整个测试范围内访问它们。这种方法适用于简单的字符串类型的参数交换。 ##### 实现细节如下: 1. 设置属性 利用 `${__P}` 函数或者直接通过 JavaScript/Groovy 脚本动态创建新的 Property 对象并将目标值赋给它。 ```javascript props.put("sharedParameter", vars.get("sourceVariable")); log.info("Shared Parameter Value: " + props.get("sharedParameter")); ``` 2. 获取属性 另一线程组可通过相同的逻辑检索已定义好的 Properties 值。 ```javascript String sharedValue = props.get("sharedParameter").toString(); vars.put("targetVariable", sharedValue); // 将其存放到本地 Variables 集合里以便进一步处理 ``` 注意这里使用的 `props` 是指代当前 JVM 运行实例内的所有配置项集合[^3]。 --- #### 方法三:采用 Inter-Thread Communication 插件 如果上述两种基础方案难以满足复杂需求,则可考虑安装第三方扩展插件——Inter-Thread Communication Plugin 来简化流程控制过程。这个插件专门设计用于解决多线程协作问题,支持阻塞队列等功能特性。 ##### 安装与应用指南: 1. 下载最新版本的 inter-thread communication plugin 并按照官方文档指示导入至您的 JMeter 环境之中; 2. 创建名为 “Synchronization Timer”的定时器元件,并调整相关选项卡里的设定以匹配实际业务模型; 3. 结合 BeanShell Scripting Language 编写出具体的交互代码片段,例如等待特定信号触发后再继续执行下一步动作等等。 ```java // Example of using the ITCP API within a Beanshell sampler to send data between threads. import org.apache.jmeter.util.JMeterUtils; String queueName = "myQueue"; Object messageToSend = vars.get("message"); synchronized(JMeterUtils.class){ Object lockObj = JMeterUtils.getProperty(queueName+"_LOCK"); if(lockObj==null){ lockObj=new Object(); JMeterUtils.setProperty(queueName+"_LOCK",lockObj); } synchronized(lockObj){ List<Object> messagesList=(ArrayList<Object>)JMeterUtils.getProperty(queueName); if(messagesList==null){ messagesList=new ArrayList<>(); JMeterUtils.setProperty(queueName,messagesList); } messagesList.add(messageToSend); } } ``` 以上展示了如何发送消息;接收端则需监听对应名称的消息列表即可。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

你说我听海绵宝宝派大星

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值