If statement jMeter-如果控制器仅在包含采样器时执行?

If statement jMeter-如果控制器仅在包含采样器时执行?,if-statement,controller,jmeter,sequence,If Statement,Controller,Jmeter,Sequence,jMeter中的If控制器有问题 我有一个线程组。线程组中有一个循环控制器。每次循环执行时,它都运行一个HTTP采样器 我想根据这个采样器的响应触发If控制器 但是,If控制器似乎只有在包含另一个采样器时才会触发 但我不希望它包含一个采样器。触发时要执行的步骤是JSON路径提取器和Beanshell后处理器。这些用于从现有采样器中提取响应中的部分JSON,然后使用此值更新Beanshell后处理器中的共享hashmap。但是如果If控制器中没有采样器,它们将无法运行。如果我把一个采样器放在那里,

jMeter中的If控制器有问题

我有一个线程组。线程组中有一个循环控制器。每次循环执行时,它都运行一个HTTP采样器

我想根据这个采样器的响应触发If控制器

但是,If控制器似乎只有在包含另一个采样器时才会触发

但我不希望它包含一个采样器。触发时要执行的步骤是JSON路径提取器和Beanshell后处理器。这些用于从现有采样器中提取响应中的部分JSON,然后使用此值更新Beanshell后处理器中的共享hashmap。但是如果If控制器中没有采样器,它们将无法运行。如果我把一个采样器放在那里,任何描述——即使是一个虚拟的采样器,来自第一个采样器的响应数据都会丢失,我再也无法从它获取JSON响应——然后测试就被破坏了

你知道怎么绕过它吗

我尝试过添加空白侦听器之类的东西,但它们不会导致If控制器触发。唯一能做的就是一个取样器,它会打破我的测试顺序


If控制器不允许作为第一个采样器的子控制器。

是,jmeter内部仅与采样器一起工作。因此,要在某个作用域中运行后处理器(如果控制器创建了作用域),需要在其内部安装一个采样器。所有后处理器/计时器/侦听器等实际上都连接到其作用域的采样器。了解JMeter很重要


为了实现您的目标,您可以做一个技巧,将Regexp提取器附加到主采样器,并将所有响应主体提取到某个变量。然后添加一个虚拟采样器,并将该变量作为响应主体。现在,您可以将信息传递给范围内的提取器。

谢谢。如果没有采样器,它就不会触发,这似乎有点愚蠢,因为您通常会根据响应做出决策。最后,我使用了Beanshell后处理器脚本和RegEx提取器(在原始采样器的范围内)来实现相同的结果,并完全摆脱了If控制器。不过,要知道如何伪造第二个采样器还是很方便的。顺便说一句,它可以与正则表达式提取器一起工作,而不是我最初使用的JSON路径,原因是正则表达式提取器可以正确地处理空响应(我的测试得到200个body或304个body,这取决于刚刚发生的事)。如果在没有正文的响应上运行JSON路径提取器,它将抛出Java异常。RegEx提取器显然写得更好,因为它没有。因此,无论响应如何,我都可以运行RegEx提取器。我希望If控制器只在200 response.Done上运行JSON路径提取器。我相信你的话,因为我最后没有用它。但正如我提到的,这是一个方便的片段,供将来参考。再次感谢。