使一些失败的请求停止线程,允许其他请求继续的最佳实践

Best practice for making some failed requests stop a thread, allowing others to continue

我认为这是一个常见的情况,虽然我相信我有一个可行的解决方案,但感觉可能还有更好的方法。

问题是我需要比 Thread GroupAction to be taken after a Sampler error 行为更精细的粒度。我的一些采样器表示会阻止在失败时进一步执行工作流的请求。在这些情况下,我希望线程继续进行下一个迭代循环,而不是继续处理真实用户无法发出且无论如何都会失败的后续请求,从头开始。其他采样器表示即使其中一些失败也会继续发出的请求。在这些情况下,我希望线程继续运行。

我现在使用的方法,虽然笨拙但似乎有效,如下所示:在 Thread-Group 级别,我将 Action to be taken after a Sampler error 设置为 Continue。我假设这意味着默认情况下,如果 Sampler 失败,线程将继续执行下一条指令,直到它结束。

这使我想要 block/halt/restart 工作流的请求失败。我找到的解决方案是在每个 Critical Actions 后面加上一个 If Controller:

如果上一个示例失败,条件 !${JMeterThread.last_sample_ok} 应解析为 true。在 If Controller 中,我有一个 Test Action 来停止执行并开始线程的下一个循环迭代:

我假设Go to next loop iteration意味着重新启动线程,假设线程组设置了循环计数。

此设置似乎有效,因为每次采样器失败时线程都会从树的顶部重新开始,然后是此 If/Action 组合。没有跟在这个块后面的采样器不会在失败时停止执行。

这个设置看起来也很笨拙,而且很烦人,因为我到处复制粘贴这个失败条件。是否有更优雅的方式来获得这种行为,或者我是否偶然发现了或多或少正确的方式来做到这一点?谢谢!

除了你说的copy/paste,你的解决方案很好,所以解决方案是使用: