Jmeter 在下一个线程循环中保留 "result variable name" 的值

Jmeter is retaining value of "result variable name" in next thread loop

我有一个 jmeter 线程组,它在其中使用事务控制器和 while 循环控制器 运行 从数据库中获取令牌的查询。 while 循环控制器具有以下条件 - ${__javaScript("${db_data}".indexOf("replay") == -1,)}

此变量 db_data 与 select 查询结果一起检索,循环将 运行 直到出现值(在线程组的开头与 http 请求一起插入)。我的问题是直到线程组中的循环计数为 1;它工作正常但一旦循环计数为 2 或更多,第二次迭代立即打破 while 循环。我如何确保每个线程循环都以变量 db_data 作为 null 启动并且不保留在先前 运行 中插入的值?

发生这种情况是因为在第 2 次和下一次迭代中,您的 ${db_data} JMeter 变量包含 replay 因此不再满足控制器的条件。

解决方案是在迭代开始时重置变量,其中一个可能的选项是添加,即JSR223 Sampler作为线程组中的第一个采样器并使用以下代码:

SampleResult.setIgnore()
vars.remove('db_data')

它将“清除”${db_data} 变量,以便您的测试能够在后续迭代中重新进入 While 控制器。

在上面的代码片段中,vars 代表 JMeterVariables class instance, see the JavaDoc for all available functions and Top 8 JMeter Java Classes You Should Be Using with Groovy 以获取有关此和其他 JMeter API 可用于 JSR223 测试元素的简写的更多信息。

另外我建议重新考虑使用 __javaScript() 函数,它的性能是一个很大的问号,而且没有 JavaScript language support in latest Java versions so it might be a good opportunity for switching to __jexl3() or __groovy() 函数代替。