使一些失败的请求停止线程,允许其他请求继续的最佳实践
Best practice for making some failed requests stop a thread, allowing others to continue
我认为这是一个常见的情况,虽然我相信我有一个可行的解决方案,但感觉可能还有更好的方法。
问题是我需要比 Thread Group
级 Action 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,你的解决方案很好,所以解决方案是使用:
- Test Fragment 将包含您的 IfController:
- Module Controller 将指向它:
我认为这是一个常见的情况,虽然我相信我有一个可行的解决方案,但感觉可能还有更好的方法。
问题是我需要比 Thread Group
级 Action 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,你的解决方案很好,所以解决方案是使用:
- Test Fragment 将包含您的 IfController:
- Module Controller 将指向它: