线程组之间的JMeter传递变量

2024软件测试面试刷题,这个小程序(永久刷题),靠它快速找到工作了!(刷题APP的天花板)_软件测试刷题小程序-优快云博客文章浏览阅读2.9k次,点赞85次,收藏12次。你知不知道有这么一个软件测试面试的刷题小程序。里面包含了面试常问的软件测试基础题,web自动化测试、app自动化测试、接口测试、性能测试、自动化测试、安全测试及一些常问到的人力资源题目。最主要的是他还收集了像阿里、华为这样的大厂面试真题,还有互动交流板块……_软件测试刷题小程序https://blog.youkuaiyun.com/AI_Green/article/details/134931243?spm=1001.2014.3001.5502下面,我们将看看如何在线程组之间共享和传递变量。

在开发高级JMeter脚本时,很可能您将拥有多个线程组。每个线程组将执行不同的请求。

一个很好的例子是我们需要使用Bearer Tokens对用户进行身份验证。一个线程组执行身份验证并保存令牌。另一个线程组需要访问此令牌并在另一个请求中使用它。

因此,我们需要一种在线程组之间传递变量的机制。

在JMeter中传递线程组之间的变量

对于此示例,我们的测试计划将具有两个线程组。第一个线程组向Web服务发出GET请求。然后,我们使用JSON Extractor插件来解析JSON响应。

使用JSONPath,我们提取特定键的值并将其保存为JMeter变量。

这就是我们的JMeter请求的样子:

上述请求的结果以JSON格式生成以下响应:

和我们的JSONPath提取第一个url看起来像:

JSONPath查询的值保存为first_url。此变量只能在同一个线程组中访问,我们可以通过使用获取其值${first_url}。现在,我们如何通过其他线程组访问此变量?

答案是用于BeanShell Assertion将变量保存为全局属性。通过这种方式,我们可以在线程组之间传递变量。

要添加BeanShell断言,请右键单击Test Plan> Add> Assertion> BeanShell Assertion

在我们的BeanShell断言中,我们可以输入以下代码

${__setProperty(first_url, ${first_url})};

现在在线程组2中,我们可以使用${__property(first_url)} 如下所示直接访问此变量:

或者,我们可以使用BeanShell PreProcessor来操作变量:

在BeanShell PreProcessor中,我们可以通过使用来访问从另一个Thread组传入的变量props.get("name_of_variable") 。然后我们可以执行一些String操作并将结果保存为新变量。

在上面的例子中,我们http:// 从Thread Group 1传递的变量中删除了,我们将结果保存为变量host。

该变量host 现在是线程组2的本地变量,并使用${host} 如下所示直接访问它:

行动吧,在路上总比一直观望的要好,未来的你肯定会感谢现在拼搏的自己!如果想学习提升找不到资料,没人答疑解惑时,请及时加入群: 759968159,里面有各种测试开发资料和技术可以一起交流哦。

最后: 下方这份完整的软件测试视频教程已经整理上传完成,需要的朋友们可以自行领取【保证100%免费】

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

<think>嗯,用户想了解如何在JMeter中跨线程组传递变量,特别是使用props.put设置全局变量。我之前已经回答过类似的问题,用户现在又进一步提问,可能希望得到更详细的步骤或确认某些细节。首先,我需要回顾之前的回答和用户提供的引用内容,确保信息的一致性。根据引用[1]和[2],props.put是设置全局变量的关键方法,而vars则是线程组内的局部变量。用户可能需要明确两者的区别,以及如何正确使用props。引用[3]中提到使用__BeanShell函数来获取全局变量,这也需要注意。用户的问题集中在跨线程组变量传递,所以需要分步骤说明设置和获取全局变量的方法。可能需要包括BeanShell脚本的具体示例,以及如何在其他线程组中引用这些变量。同时,注意事项如线程安全、性能影响等也需要提及,确保用户全面了解潜在问题。另外,用户可能对命令行动态设置全局属性或分布式测试中的变量同步有疑问,但当前问题主要集中在基本用法上。需要保持回答的结构清晰,步骤明确,避免信息过载。确保每个步骤都有示例代码和引用标记,增强可信度。最后,生成的相关问题要围绕跨线程组传递变量的扩展,比如与vars的区别、命令行设置、分布式测试等,帮助用户深入探索。需要检查引用是否正确,并确保LaTeX格式符合要求,尽管当前问题可能不涉及数学公式,但需留意是否有变量或代码块需要正确格式化。</think>### JMeter中使用`props.put`实现跨线程组变量传递的详细方法 在JMeter中,`props.put`是设置全局变量的核心方法,其作用域覆盖整个测试计划,所有线程组均可访问。以下是具体实现步骤及注意事项: --- #### 一、核心步骤 1. **设置全局变量** 在任意线程组中使用**BeanShell脚本**(如前置处理器、后置处理器或Sampler)通过`props.put`存储变量: ```java // BeanShell Sampler中设置全局变量 String token = "abc123"; props.put("global_token", token); // 全局属性赋值[^1][^2] ``` 2. **跨线程组调用变量** 在其他线程组中通过JMeter内置函数`${__P()}`或`${__property()}`引用: ```java // 示例:HTTP请求头中使用全局变量 Authorization: Bearer ${__P(global_token)} // 直接调用[^2] ``` --- #### 二、典型场景示例 **场景:线程组A生成Token,线程组B使用Token** 1. **线程组A**(生成Token): ```java // BeanShell后置处理器(在登录请求后执行) String token = vars.get("token"); // 从局部变量提取 props.put("global_token", token); // 提升为全局属性[^2] ``` 2. **线程组B**(使用Token): ```http GET /api/user Headers: Authorization: ${__property(global_token)} // 跨线程组调用[^3] ``` --- #### 三、作用域对比:`props` vs `vars` | 对象 | 作用域 | 读写方法 | 典型用途 | |--------|----------------|-------------------------|------------------------| | `props`| **全局** | `props.put()/get()` | 跨线程组共享参数 | | `vars` | **线程组局部** | `vars.put()/get()` | 线程组内临时变量 | - **关键区别**:`vars`仅在当前线程组有效,`props`全局可见[^2]。 --- #### 四、动态初始化全局变量 在**测试计划启动时**初始化全局变量(如配置文件路径): ```java // 测试计划中的BeanShell初始化脚本 props.put("config_path", "/data/env_config.json"); // 启动时设置[^2] ``` 调用方式:`${__property(config_path)}` --- #### 五、注意事项 1. **线程安全** `props`是线程安全的,但多线程并发修改同一变量时需谨慎(如使用锁机制)[^2]。 2. **性能优化** 避免频繁读写`props`,建议仅在必要场景使用全局变量。 3. **变量覆盖风险** 同名属性会被后执行的`props.put`覆盖。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值