PloniStacker
PloniStacker

Reputation: 666

Gatling: is it possible to execute concurrent scenarios in a simulation depending on an if statement?

I am running many different scenarios concurrently in my simulation. I'd like to add an option in Jenkins to choose which scenarios will be executed concurrently, so my first thought was a simulation code that looks as follows but setUp only accepts a Simulation class which I am not sure if there is a way to chain scenarios in such manner (Apologies for my lousy Scala skills) Is it supposed to be possible? or maybe another way to go about this?

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))

Upvotes: 1

Views: 1339

Answers (1)

Amerousful
Amerousful

Reputation: 2545

Yes. You need to create variable for scenario and set by your condition.

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)
  )

UPD:

If you want add and run several scenarios you will need to create a list which will contain these scenarios.

var population = new ListBuffer[PopulationBuilder]()

Then I created variables with scenarios and .inject.(...)

val injector1: PopulationBuilder = scn1.inject(
    atOnceUsers(1)
  ).protocols(protocol)

val injector2: PopulationBuilder = scn2.inject(
    atOnceUsers(1)
  ).protocols(protocol)


Now it remains only to add conditions:

if (true) {
    population += injector1
    population += injector2
  }

  setUp(
    population.toList
  )

Upvotes: 1

Related Questions