Jmeter - 不同线程组之间的参数传递

本文介绍了如何在JMeter中实现不同线程组之间的参数传递,特别是针对登录获取的token值如何传递到新建操作的线程组。通过在登录线程组A中使用正则表达式提取器获取token,并利用BeanShell Post Processor设置为全局变量userToken。随后在新建操作的线程组B中,通过HTTP Header Manager引用该全局变量,实现token的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

场景:

线程组A为登录操作,只需要登录一次,登录后进行新建操作,需要并发,这样,新建操作需要放在新的线程组B中,而新建又要用到登录后得到的token,所以就存在A中登录接口返回的token值传给编程组B的情况。

解决方案:

在线程组A内,将token变量使用“__setProperty”函数设置成jmeter的全局变量,在另一个线程组中通过"__property"/"__P"函数调用。

步骤1:如下图,Login中使用正则表达式提取器,设置了变量token,用于存放响应消息中的token值

步骤2,在Login中添加“后置处理器->BeanShell Post Processor”,添加脚本,如下图:

Parameters:把需要操作的参数传给BeanShell Post Processor

通过setProperty函数设置为全局变量,名称为userToken,后面线程组调用时要用userToken这个名称。

步骤3,上图中“流程接口”线程组需要使用上面的token,所以在HTTP Header Manager中设置如下:

### 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
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值