scala - Gatling:是否可以根据 if 语句在模拟中执行并发场景?
问题描述
我在模拟中同时运行许多不同的场景。我想在 Jenkins 中添加一个选项来选择哪些场景将同时执行,所以我的第一个想法是模拟代码如下所示,但 setUp 只接受一个模拟类,我不确定是否有链接的方法以这种方式的场景(为我糟糕的 Scala 技能道歉)这应该是可能的吗?或者也许是另一种方式来解决这个问题?
setUp(
if(isScenario1){
scenario1.inject(rampConcurrentUsers(1) to 1000 during (Config.rampUpDuration minutes))
.protocols(rest_httpconf),
scenario12.inject(rampConcurrentUsers(1) to 1000 during (Config.rampUpDuration minutes))
.protocols(rest_httpconf),
scenario13.inject(rampConcurrentUsers(1) to 1000 during (Config.rampUpDuration minutes))
.protocols(rest_httpconf),
}
if (isScenario2){
scenario2.inject(rampConcurrentUsers(1) to 1000 during (Config.rampUpDuration minutes))
.protocols(option_httpconf),
scenario22.inject(rampConcurrentUsers(1) to 1000 during (Config.rampUpDuration minutes))
.protocols(option_httpconf),
scenario23.inject(rampConcurrentUsers(1) to 1000 during (Config.rampUpDuration minutes))
.protocols(option_httpconf),
}
if(isScenario3){{
scenario3.inject(rampConcurrentUsers(1) to 1000 during (Config.rampUpDuration minutes))
.protocols(option_httpconf)
}
if(isScenario4){
scenario4.inject(rampConcurrentUsers(1) to 1000 during (Config.rampUpDuration minutes))
.protocols(rest_httpconf)
}
).maxDuration(Config.scenarioDuration minutes).assertions(global.successfulRequests.percent.is(98))
解决方案
是的。您需要为场景创建变量并根据您的条件进行设置。
val protocol: HttpProtocolBuilder = http.baseUrl("https://httpbin.org")
var headScenario: ScenarioBuilder = null;
val scn1: ScenarioBuilder = scenario("Http bin scenario")
.exec(http("get request 1")
.get("/get"))
val scn2: ScenarioBuilder = scenario("Http bin scenario")
.exec(http("get request 2")
.get("/get"))
if(true) {
headScenario = scn2;
}
setUp(
headScenario.inject(
atOnceUsers(1)
).protocols(protocol)
)
升级版:
如果您想添加并运行多个场景,您需要创建一个包含这些场景的列表。
var population = new ListBuffer[PopulationBuilder]()
然后我用场景和 .inject.(...) 创建了变量
val injector1: PopulationBuilder = scn1.inject(
atOnceUsers(1)
).protocols(protocol)
val injector2: PopulationBuilder = scn2.inject(
atOnceUsers(1)
).protocols(protocol)
现在只剩下添加条件了:
if (true) {
population += injector1
population += injector2
}
setUp(
population.toList
)
推荐阅读
- r - 错误:参数暗示不同的行数:42、15,将数据转换为数据帧
- javascript - 如何使按钮更具反应性
- r - R/dyplr:读取文件夹中的所有 CSV 文件,如果条目不存在则追加到新文件
- laravel - Laravel:在迁移中显示控制台命令的输出?
- javascript - Node/Express 服务器控制器调用异步本地函数返回得太快
- javascript - 一般来说,是否有可能将递归函数转换为使用 JavaScript 中的手动堆栈的函数?
- ffmpeg - 在 ffmpeg 中没有获得所需的音频编解码器
- reactive-programming - Spring WebFlux - 如何从数据库中获取值并设置此值以创建对象
- reactjs - React useEffect 跟踪依赖数组最佳实践中可用的所有值
- vue.js - pouchdb live 对于实时聊天来说有点太快了