首页 > 解决方案 > 带有 while 循环控制器的第二个采样器在第一个线程后停止

问题描述

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

标签: jmeter

解决方案


当然不是。

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

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

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

示例设置:

在此处输入图像描述

在上面的代码片段中:


推荐阅读