Jmeter跨线程组传参数

花了很多时间做jmeter跨线程组传值

步骤如下:    

1、将用户管理线程组中的登陆token值传递到场景模块线程组中的GetUserInfo中去

2、用JSON Extractor 获取到token值,如图:

3、后置处理器--BeanShell PostProcessor,填写参数Parameters:${token}  ,在调用函数 ${__setProperty(newToken,${Token},)};  将值变为全局变量,如图:

4、将新的全局变量值  newToken  传递 场景模块线程组中 GetUserInfo 中的  HTTP信息头管理器中去,如图:

5、最重要的一步,在测试计划中勾选图中步骤

 

### 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、付费专栏及课程。

余额充值