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

Gatling循环内使用pause执行频率不符合预期如何解决

问题核心成因
  • 你配置的bzt参数throughput: 1会强制限制全局请求频率为每秒1次,该规则的优先级高于Gatling原生的pause配置,直接导致你代码中写的10秒等待逻辑被运行器覆盖,这是最核心的原因。
  • Gatling原生pause方法的语义是「上一个操作执行完成后,等待固定时长再执行后续操作」,实际循环间隔会叠加请求本身的执行耗时,不符合轮询场景下固定间隔发起请求的需求。
正确实现方式

第一步:调整bzt配置

删除配置中的throughput: 1参数,放开运行器侧的强制吞吐量限制,让Gatling自身的间隔控制逻辑生效,调整后的配置如下:

hold-for: 30s
concurrency: 1
iterations: 1

第二步:替换pause为pace实现固定间隔轮询

pace方法的语义是「固定两次循环起始点的间隔时长」,不管单次循环内的请求执行耗时多久,都会严格保证每隔指定时长发起一次轮询,匹配你预期的轮询逻辑,调整后的核心代码如下:

private val scn = scenario("Post, Poll, and Delete")
      .forever {
          exec(http("Post").post(url + path)
            .check(status.is(201))
            .check(jsonPath("$..id").saveAs("id"))
            // 初始化status为STARTED,避免第一次doWhile判断报错
            .exec(session => session.set("status", "STARTED"))
          )
            .doWhile(session => session("status").as[String] == "STARTED", "index") {
              pace(10.seconds)
              .exec(http("Poll")
                .get(url + path)
                .queryParam(id, session => session("id").as[String])
                .check(jsonPath("$..status").saveAs("status"))
                .check(jsonPath("$..status").not("ERROR"))
              )
          }.exec(http("Delete")
                  .delete(url + path)
                  .check(status.is(200))
            )
      }

内容的提问来源于stack exchange,提问作者Seth

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 22:27:03