Gatling如何实现场景顺序执行?andThen配置后仍并行问题
问题根因
两个场景同时启动是场景写法存在语法错误,导致场景1启动后瞬间执行完成,直接触发了andThen的子场景启动条件,和andThen本身的功能无关:
- 核心错误:
exec()仅支持传入请求动作(ActionBuilder类型)、会话处理函数,你写的两处exec传入内容都不符合规范:- 第一行
.exec{ComputerScenarios.scnCheckSerialNumberIsValidForComputerDeletion(serialNumber)}用大括号包裹了ScenarioBuilder类型的封装场景,这部分逻辑不会被加入场景1的执行链; - 第二行
.exec(pause(1.minutes))写法错误,pause是场景链式调用的原生API,不需要包在exec()里,这行等待逻辑完全不生效。
- 第一行
- 配置问题:全局
maxDuration(60)设置的时长和你预期的场景1等待时长完全一致,就算修复了前面的语法问题,也会因为触发全局超时强制中断场景1的执行,导致串行逻辑异常。
修复后的正确代码
val scn: ScenarioBuilder = scenario("Scenario-1 ***") // 直接传入执行动作,不要额外包大括号传入ScenarioBuilder .exec(ComputerScenarios.scnCheckSerialNumberIsValidForComputerDeletion(serialNumber)) .pause(1.minutes) // pause直接链式调用,不需要包裹在exec()中 val scn2: ScenarioBuilder = scenario("Scenario-2") .exec(ComputerScenarios.scnCheckSerialNumberIsValidForComputerDeletion(serialNumber2)) setUp( scn.inject(atOnceUsers(1)) .andThen(scn2.inject(atOnceUsers(1))) ) .maxDuration(120) // 全局最大时长要大于两个场景的总预期耗时,预留足够冗余 .protocols(httpProtocol)
修复后运行可以在控制台观察到明确的执行阶段分割:场景1的1个用户完成所有请求、等待1分钟完全终止后,才会开始注入场景2的用户,完全符合串行执行的预期。
内容的提问来源于stack exchange,提问作者Emre Varol
相关产品推荐
相关产品推荐

