如何通过条件判断启动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
相关产品推荐
相关产品推荐

