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
相关产品推荐
相关产品推荐

