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 在下一个线程循环中保留“结果变量名”的值的主要内容,如果未能解决你的问题,请参考以下文章

Jmeter -- 循环控制器和线程并发(关注执行顺序)

jmeter循环控制器的总结(一)

jmeter-线程组

Jmeter之逻辑控制器

jmeter参数化的几种方法

JMeter:线程组中的循环计数和逻辑控制器中的循环控制器有啥区别