Es posible definir escenarios de carga en Gatling de dos modos distintos: basados en usuarios (hilos / threads) o basados en throughput (RPS – requests per second). Según los objetivos que tengamos para nuestras pruebas de performance, utilizaremos uno u otro.
Pruebas basadas en usuarios
Simplemente se define la cantidad de usuarios a ejecutar, y la forma en la que se inician.
setUp(scn.inject(atOnceUsers(10)).protocols(httpConf))
En ese código se ejecutan 10 usuarios que se inician en el momento en que inicia la prueba.
Para que vayan ingresando de a poco, se podría configurar un rampup de 10 segundos así:
setUp(scn.inject(rampUsers(10) over (10 seconds)).protocols(httpConf))
El rampup es el período en el cual van ingresando los usuarios de manera progresiva, de forma tal que al finalizar ese período se cuenta con todos los usuarios establecidos.
Cada usuario ejecutará el script, y por lo general lo ideal es definir un repeat o during, para que cada uno quede ejecutando cierta cantidad de iteraciones o de tiempo.
val scn = scenario("OpenCart") .during(duration) { feed(feeder) .exec(http("home") .get("/") ... }
Pruebas basadas en RPS
En ocasiones se quiere llegar a simular cierta cantidad de peticiones por segundo. Esto se puede definir también con un rampup, también definido en base a RPS. Veamos cómo se puede hacer esto:
setUp(scn.inject(constantUsersPerSec(10) during(20 second))) .throttle(reachRps(20) in (20 second)).protocols(httpProtocol)
En este ejemplo se inyectarán 10 usuarios por segundo durante 20 segundos. Si cada usuario tiene un loop, esto va a hacer que a los 20 segundos hayan 200 usuarios ejecutando. Lo que se logra con la segunda parte de la definición del escenario, es que no se supere lo que está indicando el “throttle“. En este se está indicando que se quiere llegar a 20 RPS en 20 segundos, lo cual se puede comprobar en la siguiente gráfica del reporte de la ejecución:
Esto se podría ajustar como para mantener esa carga por 3 minutos con la sentencia holdFor
setUp(scn.inject(constantUsersPerSec(10) during(20 second))) .throttle(reachRps(20) in (20 second), holdFor(3 minutes)) .protocols(httpProtocol)
El DSL que brinda Gatling da mucho juego para variar bastante los escenarios. Para seguir viendo distintas opciones, revisar lo que aparece en la documentación por acá.