You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 10:45:07