怎么看全局变量_Jmeter坑:每次运行脚本后没有清空全局变量值

在JMeter性能测试中,全局变量用于存储如token的认证信息,方便多接口复用。然而,发现每次执行脚本后全局变量值并不自动清空,导致登录状态异常。例如,登录接口的Authorization头值在不同执行中交替出现空值和token,影响测试结果。问题可能源于全局变量未被正确初始化,寻找解决方案成为当务之急。

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

我们知道,在Jmeter中做性能测试的时候,常常会把身份验证的参数(如:token)设置成全局变量,然后供http信息头管理器引用,这样就可以达到一个效果:不用在每个需要身份校验的接口设置token了(因为绝大多数项目token都是放在header中带过去)。但是我今天却发现了一个全局变量的坑,请看下面(个别图中的具体步骤不在这里说明,百度教程很多~):

1.如图1,在【登录】接口下用正则表达式提取器提取token,并用Bean Shell取样器设置成全局变量,然后放在http信息头管理器中引用:Authorization=${__P(newToken)} PS:注意我设置的缺省值是空值(空字符串)。

92916a34e5101e02621d31bd19c4b78d.png
图1

2.如图2,执行一次脚本,在察看结果树中看到【登录】接口的Authorization是空值(因为我在第1步设置过缺省值为空),并登录成功

03e84571bdd30fb13610cdd7fc6a581c.png
图2

3.如图3,执行第二次脚本(这里每次执行完不清空结果树),在察看结果树看到【登录】接口的Authorization是一串token值,此时登录失败(因为我们后台没有对登录接口做例外处理,Authorization不为空会身份校验)。这下奇怪了,我不是明明设置过缺省值吗?为什么呢?继续看下面

8dc511b85d09244bb44185e7f6fc07ba.png
图3

4.如图4,执行第三次脚本,咦?Authorization又为空,此时登录成功,是不是很奇怪?(成功与失败交替出现,即变量token空值与正确的值交替出现)

4f870693b6295743eb3569490bc05b5b.png
图4

现在我们来分析大概原因:我们这个Request Headers中的Authorization值来源于http信息头管理器,而后者的值来源于全局变量token,而全局变量token又来源于正则提取器,正则提取器肯定没有问题(因为图3中确实有token值),那问题就只能出在全局变量了。

根据具体的每次执行脚本情况来分析:第一次执行脚本没有问题,【登录】成功【获取用户信息】也成功;第二次,登录失败,而【登录】接口却拿到了token,而这个token值正好是第一步提取出来的,到这里,我已经有了一个初步判断:第一次执行脚本后全局变量token没有清空。继续,执行完第二次后,登录失败,肯定提取不到token,那么此时全局变量赋值空值;为了验证我的猜想,执行第三次脚本,没错登录成功,此时Request Headers中的Authorization为空值。

结论:在Jmeter中,全局变量在每次执行完脚本后不会自动清空(或者初始化)。

虽然我发现了这个Jmeter坑,但是我还没有想到很好的办法怎么解决,如果有哪位大佬知道怎么解决,请评论留言,不胜感激!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值