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

Gatling中如何在POST调用执行指定时长后仅运行一次GET请求

Gatling 先执行指定时长POST压测后单次执行GET的实现方案

核心思路是拆分两个独立执行场景,通过Gatling内置的执行顺序控制能力实现阶段流转,具体实现如下:

实现步骤

  • 第一阶段定义POST压测场景:用during方法控制POST请求的总执行时长,所有并发用户仅在该时长内循环执行POST请求
  • 第二阶段定义GET校验场景:仅配置1个用户执行单次GET,通过andThen方法指定该场景必须在POST场景完全结束后再启动

完整示例代码

import io.gatling.core.Predef._
import io.gatling.http.Predef._
import scala.concurrent.duration._

class PostThenGetSimulation extends Simulation {
  // HTTP公共配置,替换为你自己的测试域名和头信息
  val httpConf = http.baseUrl("https://test.example.com")
    .acceptHeader("application/json")
    .contentTypeHeader("application/json")

  // POST请求逻辑,替换为你自己的接口路径和请求体
  val postAction = exec(http("业务POST请求")
    .post("/api/business")
    .body(StringBody("""{"param":"testValue"}""")).asJson
    .check(status.is(200))
  )

  // GET请求逻辑,替换为你自己的接口路径
  val getAction = exec(http("校验GET请求")
    .get("/api/queryResult")
    .check(status.is(200))
  )

  // POST压测场景:配置并发用户数和运行时长
  val postScenario = scenario("POST压测阶段")
    // 这里可按需添加登录、初始化等前置逻辑
    .during(10 minutes) { // 替换为你需要的POST执行时长,支持seconds/minutes/hours单位
      exec(postAction)
      // 按需添加思考时间,例如.pause(2 seconds)
    }

  // GET校验场景:仅执行1次
  val getScenario = scenario("GET校验阶段")
    .exec(getAction)

  // 配置执行顺序
  setUp(
    // POST阶段的并发注入策略,这里示例为30秒内匀速启动20个并发用户
    postScenario.inject(rampUsers(20).during(30 seconds))
      .andThen(
        // POST全部结束后,立即发起1次GET请求
        getScenario.inject(atOnceUsers(1))
      )
  ).protocols(httpConf)
}

注意事项

  • andThen链式执行场景的能力需要Gatling 3.3及以上版本支持,低版本可通过拆分两个独立脚本依次运行实现相同效果
  • 如果需要POST结束后间隔固定时间再发起GET,可在getScenario的exec(getAction)前添加.pause(需要的等待时长)配置
  • POST场景如果需要携带登录态,可把登录逻辑放到during循环之前执行,避免每次循环重复登录

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 19:24:00