Jmeter 在下一个线程循环中保留“结果变量名”的值
Posted
技术标签:
【中文标题】Jmeter 在下一个线程循环中保留“结果变量名”的值【英文标题】:Jmeter is retaining value of "result variable name" in next thread loop 【发布时间】:2021-03-05 09:42:40 【问题描述】:我有一个 jmeter 线程组,它在其中使用事务控制器和 while 循环控制器来运行查询以从数据库中获取令牌。 while 循环控制器具有以下条件 - $__javascript("$db_data".indexOf("replay") == -1,)
这个变量 db_data 是通过一个选择查询结果来检索的,并且循环将一直运行,直到有一个值(在线程组的开头插入一个 http 请求)。我的问题是直到线程组中的循环计数为 1;它工作正常,但是一旦循环计数为 2 或更多,第二次迭代就会立即中断 while 循环。如何确保每个线程循环以变量 db_data 为 null 且不保留之前运行中插入的值启动?
【问题讨论】:
【参考方案1】:发生这种情况是因为在第二次和下一次迭代中,您的 $db_data
JMeter 变量包含 replay
,因此不再满足 Controller 的条件。
解决方案是在迭代开始时重置变量,其中一个可能的选项是添加 JSR223 Sampler 作为线程组中的第一个采样器并使用以下代码:
SampleResult.setIgnore()
vars.remove('db_data')
它将“清除”$db_data
变量,因此您的测试将能够在后续迭代中重新进入 While 控制器。
在上面的 sn-p vars 代表 JMeterVariables 类实例,请参阅 JavaDoc 了解所有可用函数,Top 8 JMeter Java Classes You Should Be Using with Groovy 了解有关此信息和其他可用的 JMeter API 简写的更多信息JSR223 测试元素。
另外我建议重新考虑使用 __javaScript() 函数,它的性能是一个很大的问号,而且没有 JavaScript language support in latest Java versions 所以它可能是切换到 __jexl3() 或 __groovy() 函数的好机会。
【讨论】:
以上是关于Jmeter 在下一个线程循环中保留“结果变量名”的值的主要内容,如果未能解决你的问题,请参考以下文章