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

Gatling如何实现同时并行启动100次相同单用户测试场景?

Gatling 单场景100次并行同时启动实现方案

方案1:独立会话并行(默认首选)

适用于100次场景执行分别使用独立的用户会话(每个会话有独立的身份凭证、缓存等),是最常用的实现方式:

  • 直接使用Gatling内置的atOnceUsers注入规则,该规则会在同一时间点一次性生成指定数量的虚拟用户,每个用户完整执行一次你定义的测试场景
  • 示例代码:
// 定义HTTP协议配置
val httpProtocol = http
  .baseUrl("https://你的测试域名")
  .acceptHeader("application/json")

// 定义你原本的单用户测试场景
val apiTestScenario = scenario("API单用户测试场景")
  .exec(
    http("目标接口请求")
      .get("/你的接口路径")
      .check(status.is(200))
  )

// 测试启动配置:一次性同时启动100个虚拟用户并行执行场景
setUp(
  apiTestScenario.inject(atOnceUsers(100))
).protocols(httpProtocol)

方案2:同一会话并行

适用于需要100次场景执行复用同一个用户身份(比如同一个登录token、同一个会话上下文)的场景:

  • 使用Gatling的parallel方法构建并行执行块,在同一个用户会话下同时触发100次场景执行
  • 示例代码:
val httpProtocol = http
  .baseUrl("https://你的测试域名")
  .acceptHeader("application/json")

val sameUserParallelScenario = scenario("同用户多并行场景")
  // 先执行一次登录,拿到全局复用的用户凭证
  .exec(
    http("用户登录")
      .post("/登录接口路径")
      .formParam("username", "测试账号")
      .formParam("password", "测试密码")
      .check(jsonPath("$.token").saveAs("userToken"))
  )
  // 同时并行执行100次目标接口请求
  .exec(
    parallel(
      (1 to 100).map(_ => 
        exec(
          http("并行目标接口请求")
            .get("/你的接口路径")
            .header("Authorization", "Bearer ${userToken}")
            .check(status.is(200))
        )
      ):_*
    )
  )

// 仅需启动1个虚拟用户即可
setUp(
  sameUserParallelScenario.inject(atOnceUsers(1))
).protocols(httpProtocol)

注意事项

  • parallel方法为Gatling 3.4及以上版本原生支持,低版本需要自行升级后使用
  • 如果你需要严格保证所有请求完全同时启动,不要使用rampUsers等递增注入规则,必须使用atOnceUsers
  • 测试前需要确认测试机的端口上限、文件句柄数等资源配置,避免客户端资源不足导致测试结果出现误差

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 01:24:07