金天牛

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

JMeter中多个线程组之间的变量调用

测试背景:测试时,需要测试某个接口A的并发极限值。而这个接口A的一些参数依赖于其他接口B,B和A部署在一台机器上,依赖接口B不需要并发,以免影响目标接口A。

测试分析:在使用JMeter时,一个线程组下的接口,是受整个线程组的并发数控制的,所以这2个接口不能在一个线程组中。那么就要使用2个线程组来实现,不同线程组控制不同并发数。使用时,第2个线程组就需要调用第一个线程组的参数,问题点在这里。

解决办法:需要使用jmeter自带函数__setProperty来实现,成为全局变量。

解决步骤:1、线程组1中使用接口B,通过B的返回值,使用json提取器,获取到对应的参数值。

                  2、参数通过“BeanShell 取样器”,利用脚本,变成全局变量

                  3、下面的线程组使用“${__property(参数)}”来调用,这样就传递给第2个线程组中的接口A了.

                  4、使用时,测试计划需要勾选:需要独立运行每个线程组

 

 

具体实现截图:

 1、第一个线程组

①请求返回值是JSON格式,通过json提取器,获取返回值中的字段。$代表返回值,$.data.token就是2层嵌套中的token值

 

 ②使用“BeanShell 取样器”,把json提取器中获得的这些值变为全局变量。JMeterUtils.setProperty("参数", "值") 全局变量赋值

 

 里面使用的脚本是:

import org.apache.jmeter.util.JMeterUtils;

JMeterUtils.setProperty("name","${token}");

JMeterUtils.setProperty("rname","${rtoken}");  

 2、第2个线程组,主要是调用,把原来调用时常用的${参数}改成“${__property(参数)}” 即可。  

下面这个截图中,参数名为name,即上面设为的全局变量name

 

 

写在最后:开始也试过“BeanShell断言” 来获取变量。这个也是可以的,但在跑并发时,会有个别报错的,没有取到全局变量值。所以推荐使用“BeanShell 取样器”

 

 

 

参考博客:https://www.cnblogs.com/VashGu927/p/7651150.html   和  https://blog.csdn.net/weixin_42596342/article/details/84673412       

 

posted on   金天牛  阅读(1859)  评论(0编辑  收藏  举报

编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示