Search code examples
scalagatling

How to use variables in Gatling duration specifications?


I'm looking for a way to set the duration of a scenario using a variable. I need to be able to use different numbers here when starting the test from the command line.

I can pass a value from command line to my configuration, it works fine. What I can't figure out is how to describe this part: during (10 minutes) using a variable instead of the magic number 10. As far as I can tell, two imports are related to this part of the code: scala.concurrent.duration.DurationInt and scala.language.postfixOps.

So here is a sample of my code:

val usersPerSec: Double = 5
val pingScenario: ScenarioBuilder = {
    scenario("Ping")
      .exec(http("Ping").get(myUrl).check(status.is(200)))
}

setUp(
    pingScenario.inject(
      constantUsersPerSec(usersPerSec) during (10 minutes)
    ).protocols(myHttpProtocol)

And this is what I'd like to have:

val usersPerSec: Double = 5
val duration = 10
val pingScenario: ScenarioBuilder = {
    scenario("Ping")
      .exec(http("Ping").get(myUrl).check(status.is(200)))
}

setUp(
    pingScenario.inject(
      constantUsersPerSec(usersPerSec) during (duration minutes)
    ).protocols(myHttpProtocol)

Thanks for any help.


Solution

  • As you can see, during() takes a FiniteDuration as opposed to an Int

      case class ConstantRateBuilder(rate: Double) {
        def during(d: FiniteDuration) = ConstantRateOpenInjection(rate, d)
      }
    

    Therefore, you can do something like:

      import scala.concurrent.duration._
    
      val usersPerSec: Double = 5
      val duration = FiniteDuration(10, MINUTES)
      val pingScenario: ScenarioBuilder = {
        scenario("Ping")
          .exec(http("Ping").get("test").check(status.is(200)))
      }
    
      setUp(
        pingScenario.inject(
          constantUsersPerSec(usersPerSec) during (duration)
        ).protocols(myHttpProtocol)