JMeter如何实现请求2失败时启动新线程从请求1重新执行?
JMeter 特定请求失败时启动新线程重试的配置方案
针对你提出的需求——仅当Http Request 2失败时启动新线程从Http Request 1重新执行,而Http Request 3失败不做处理,可按以下步骤配置:
1. 标记Http Request 2的失败状态
- 给Http Request 2添加响应断言,根据你的业务规则设置失败判定条件(比如响应码不等于200、响应体包含特定错误关键词等)。
- 在Http Request 2下添加JSR223 PostProcessor,用Groovy代码记录请求是否失败:
// 标记当前请求是否失败 props.put("req2Failed", !prev.isSuccessful())
2. 创建独立的重试线程组
- 在测试计划根节点下新增一个线程组,命名为「重试线程组」,初始线程数设为0,勾选调度器的「永久」选项。
- 把原线程组里的Http Request 1到后续所有请求复制到这个重试线程组中;如果想复用配置,也可以用Module Controller直接引用原线程组的请求集合(注意处理变量隔离问题)。
3. 在原线程组中触发重试逻辑
- 在原线程组的Http Request 2之后、Http Request 3之前,添加JSR223 Sampler,编写代码检测Http Request 2的失败状态,触发重试线程组:
def needRetry = props.get("req2Failed") if (needRetry) { // 获取重试线程组实例 def retryThreadGroup = ctx.getThreadGroup().getTestPlan().getThreadGroups().find { it.getName() == "重试线程组" } // 启动1个重试线程 retryThreadGroup.setNumThreads(1) def jmeterEngine = org.apache.jmeter.engine.StandardJMeterEngine.engine jmeterEngine.configure(retryThreadGroup) jmeterEngine.runTest() // 重置线程数,避免重复触发 retryThreadGroup.setNumThreads(0) // 清除标记 props.put("req2Failed", false) }
4. 忽略Http Request 3的失败影响
- 给Http Request 3添加响应断言(如果需要判定失败的话),然后勾选断言面板里的「如果失败则继续」选项。这样即使该请求失败,原线程仍会继续执行后续请求,且不会触发任何重试逻辑。
内容的提问来源于stack exchange,提问作者Arik Hazan
相关产品推荐
相关产品推荐

