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

如何通过条件判断启动Gatling多场景或指定单场景?

实现Gatling条件启动单/多场景的方案

嘿,这个需求在Gatling里其实很好实现,核心思路就是通过条件判断动态组装要执行的场景列表,我给你分享几种实用的方案,你可以根据自己的使用场景选:

方法1:通过系统属性传参控制(最常用)

这种方式适合本地调试或者手动触发测试的场景,你可以在运行测试时通过-D参数指定要运行的场景组合。

首先把两个场景单独定义,然后根据传入的参数决定启动哪些:

// 1. 先单独定义好两个场景,复用你原有的配置
val loginMyPostAdminScenario = Scenarios.test01LoginMyPostAdmin
  .inject(rampUsers(1) over (30 seconds))
  .protocols(createHttpConf("mypostadmin", System.getProperty("env.current"), false))

val loginCiPlatformScenario = Scenarios.test01LoginCiPlatform
  .inject(rampUsers(1) over (30 seconds))
  .protocols(createHttpConf("ciplatform", System.getProperty("env.current"), false))

// 2. 读取控制参数,默认值设为"both"(即默认跑两个场景)
val runMode = System.getProperty("runScenarios", "both")

// 3. 根据参数组装要运行的场景列表
val scenariosToRun = runMode match {
  case "both" => List(loginMyPostAdminScenario, loginCiPlatformScenario)
  case "mypost" => List(loginMyPostAdminScenario) // 只跑mypostadmin场景
  case "ciplatform" => List(loginCiPlatformScenario) // 只跑ciplatform场景
  case _ => throw new IllegalArgumentException(s"无效的runScenarios参数值: $runMode,请使用'both'、'mypost'或'ciplatform'")
}

// 4. 最终设置setUp,把场景列表传进去
setUp(scenariosToRun: _*)
  .assertions(global.responseTime.max.lte(15000))
  // 你的其他断言...

运行方式:

  • 跑两个场景:mvn gatling:test -DrunScenarios=both
  • 只跑mypostadmin场景:mvn gatling:test -DrunScenarios=mypost
  • 只跑ciplatform场景:mvn gatling:test -DrunScenarios=ciplatform

方法2:通过环境变量控制(适合CI/CD流水线)

如果你的测试是在CI/CD流水线里自动执行的,用环境变量会更方便(避免和其他系统参数冲突):

// 读取环境变量,默认值还是"both"
val runMode = sys.env.getOrElse("RUN_SCENARIOS", "both")

// 后面的场景组装逻辑和方法1完全一样
val scenariosToRun = runMode match {
  case "both" => List(loginMyPostAdminScenario, loginCiPlatformScenario)
  case "mypost" => List(loginMyPostAdminScenario)
  case "ciplatform" => List(loginCiPlatformScenario)
  case _ => throw new IllegalArgumentException(s"无效的RUN_SCENARIOS环境变量值: $runMode,请使用'both'、'mypost'或'ciplatform'")
}

setUp(scenariosToRun: _*)
  .assertions(global.responseTime.max.lte(15000))

运行方式:

  • Linux/macOS:RUN_SCENARIOS=ciplatform mvn gatling:test
  • Windows(CMD):set RUN_SCENARIOS=mypost && mvn gatling:test
  • Windows(PowerShell):$env:RUN_SCENARIOS="both"; mvn gatling:test

方法3:根据当前环境自动判断(无需手动传参)

如果想让测试根据当前环境自动决定跑哪些场景(比如生产环境只跑核心场景,测试环境跑全量),可以直接用你已有的env.current参数判断:

val currentEnv = System.getProperty("env.current")

val scenariosToRun = currentEnv match {
  case "prod" => List(loginMyPostAdminScenario) // 生产环境只跑admin场景
  case _ => List(loginMyPostAdminScenario, loginCiPlatformScenario) // 其他环境跑全量
}

setUp(scenariosToRun: _*)
  .assertions(global.responseTime.max.lte(15000))

小提示

  • 记得给参数/环境变量设置默认值,避免没传参时测试直接报错
  • 如果后续要扩展更多场景,只需要在match分支里新增case和对应的场景列表即可
  • 异常处理可以根据自己的需求调整,比如不想抛出异常的话,也可以默认跑全量场景

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:00:30