首页 > 解决方案 > 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))

标签: scalagatling

解决方案


是的。您需要为场景创建变量并根据您的条件进行设置。

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
  )

推荐阅读