Reputation: 666
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
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