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() 函数代替。
我有一个 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() 函数代替。