带有while循环控制器的第二个采样器在第一个线程

时间:2021-02-10 13:35:47

标签: jmeter

我有一个 http 请求 sampler1 并使用正则表达式提取器提取“JobID”值。现在,我有 http 请求 sampler2 来检查同一线程组中的作业状态,该线程组使用来自先前正则表达式提取器的“JobID”。 sampler2 有一个 while 循环控制器,条件为 ${__javaScript("${Status}"!="Ready",)} 这就是说继续执行采样器直到状态为就绪。变量“状态”再次使用与采样器 2 关联的常规表达式提取器获得。现在,问题是当我运行 1 个以上的线程时,一旦作业状态就绪,第二个采样器在第一次运行后停止执行,并且不会使用来自采样器 1 的下一个 JobID 执行。是因为 While 控制器吗?对此的任何投入都会有很大帮助。谢谢!

1 个答案:

答案 0 :(得分:0)

当然不是。

如果您在 Thread Group 中有多次迭代,或者您的两个采样器都位于 Loop Controller 下,则当第二次迭代开始时,您的 ${Status} 变量的值为 Ready,因此由于条件不满足,JMeter 不会进入 While 控制器。

如果您想运行多次迭代,您需要以某种方式重置 ${Status} 变量值,其中一种方法是使用 JSR223 Sampler 和以下代码: >

 SampleResult.setIgnore()
 vars.put('Status', 'Not ready')  

示例设置:

enter image description here

在上面的代码片段中:

  • 第一行从 Listeners/.jtl 结果文件中删除了 JSR223 Sampler,(你对它的时间不感兴趣,是吗?)
  • 第二行使用 JMeterVariables 类实例的 vars 简写将 ${Status} 变量设置为 Not ready(有关 JMeter API 的更多信息,请参阅 Top 8 JMeter Java Classes You Should Be Using with Groovy 文章可用于 JSR223 测试元素的简写)
相关问题