Tutorial de Gatling y Maven

En este post (preparado por Oscar Calderín, y revisado por Iván Serrano, de Abstracta, ¡gracias a ambos!) veremos otro aspecto interesante de Gatling (herramienta para pruebas de performance que hablé de ella por acá) que es su fácil integración a través de plugins con algunas herramientas de construcción modernas, como por ejemplo, Maven. En el mundo de CI/CD realizar este tipo de integraciones se vuelve muy necesario. En este artículo entonces, mostraremos la integración y luego utilizaremos Scala para desarrollar una simulación, la ejecutaremos con Maven y veremos los reportes generados.



Preparando el proyecto con Maven

Comenzamos creando un proyecto Maven limpio y le añadimos las dependencias. Este enfoque sirve para incluir Gatling en un proyecto existente (si las pruebas de performance van a convivir en el mismo proyecto que otras pruebas, o que el sistema mismo) o en uno creado de cero. Si se quiere armar un proyecto Maven con Gatling, el cual se crea de cero y es específico para tener las pruebas Gatling y nada más, tal vez sirva también construirlo a partir de un archetype (template de proyecto Maven), siguiendo los pasos que documentan aquí.

Si preferís hacerlo con Gradle, acá encontré un buen post que explica cómo (en inglés).

Dependencias y Plugins

Para utilizar Gatling con Maven necesitamos añadir una dependencia (gatling-charts-highcharts) y un plugin (gatling-maven-plugin) al fichero pom.xml de nuestro proyecto. En Maven, los plugins son los encargados de realizar todas las tareas, como por ejemplo compilar el proyecto, ejecutar las pruebas, crear los ficheros .jar, entre otras. Generalmente proveen al proyecto de una serie de comandos que pueden ser ejecutados utilizando la siguiente sintaxis:

mvn [plugin-name]:[goal-name]

Más adelante veremos que utilizaremos alguno de estos comandos.

El archivo pom.xml se ve más o menos así


<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>tests-ejemplo</groupId>
    <artifactId>test-ejemplo-performance</artifactId>
    <version>1.0-SNAPSHOT</version>

    <dependencies>
        <dependency>
            <groupId>io.gatling.highcharts</groupId>
            <artifactId>gatling-charts-highcharts</artifactId>
            <version>2.2.5</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>io.gatling</groupId>
                <artifactId>gatling-maven-plugin</artifactId>
                <version>2.2.4</version>
            </plugin>
        </plugins>
    </build>

</project>

Al añadir estas líneas a nuestro fichero pom.xml se nos añaden al proyecto las librerías necesarias para utilizar Gatling y el plugin nos brinda las opciones necesarias para ejecutar los comandos Maven que nos permitirán la construcción y ejecución del proyecto, así como la generación de los reportes.

Acá hay un ejemplo de un proyecto funcionando con Maven y Gatling, con algunas simulaciones preparadas en un sistema de pruebas. Este proyecto está armado en base al archetype que mencionamos arriba.

IDE de Desarrollo

Probé dos IDEs distintos, uno basado en Eclipse, y el IntelliJ. Me quedo con el segundo. Para que funcione es necesario instalar un plugin de Scala, pero al abrir un archivo .scala aparece un link para que se instale automáticamente. Luego hay que agregar el SDK al proyecto (el IDE también da esa sugerencia y es casi automático), y queda funcionando.

Preparar una Simulación (script)

Ahora pasamos a desarrollar un script utilizando Scala que contendrá la simulación que queremos ejecutar.


InicioSimulation.scala

package uy.com.test

import scala.concurrent.duration._
import io.gatling.core.Predef._
import io.gatling.http.Predef._
import io.gatling.jdbc.Predef._

class InicioSimulation extends Simulation {

  val httpProtocol = http
    .baseURL("http://localhost:8080/inicio/")
    .acceptHeader("text/html,application/xhtml+xml,application/xml")
    .acceptEncodingHeader("gzip, deflate, sdch, br")
    .acceptLanguageHeader("es-US,es;q=0.8,es-419;q=0.6,en;q=0.4,gl;q=0.2")
    .userAgentHeader("Mozilla/5.0 (Windows NT 6.3; Win64; x64)")

  object InitialPage {

    val initialPage = exec(http("InitialPage")
      .get("initial/page"))
      .pause(25)
  }

  val scenario1 = scenario("MyScenario")
    .exec(InitialPage.initialPage)

  setUp(scenario1.inject(rampUsers(10) during(10 seconds), 
                          rampUsers(2) during(10 seconds)))
    .protocols(httpProtocol)
    .assertions(global.successfulRequests.percent.is(100))

}

Cómo preparar un test simple

Hay distintas formas de identificar las URLs que queremos utilizar en nuestras simulaciones y a su vez los datos necesarios para su configuración. Es necesario capturar el tráfico HTTP entre el cliente y el servidor. Una de las formas de hacer esto es utilizando la pestaña “Network” de la barra de herramientas del navegador Chrome, podemos acceder a esta barra presionando la tecla F12. Luego activamos la pestaña Network, accedemos en el navegador a la URL deseada, hacemos clic derecho sobre la petición y utilizamos la opción Copy/Copy as cURL (cmd). En el resultado de esta copia encontraremos todos los datos que nos facilitaran una correcta configuración de las URLs en el script de nuestra simulación.

Ejecución de Gatling con Maven

Ahora utilizaremos Maven para ejecutar nuestro script. Para ello abrimos una terminal y nos ubicamos en el directorio raíz de nuestro proyecto y ejecutamos la siguiente instrucción:

mvn clean gatling:execute

Update Marzo 2020:

mvn clean gatling:test

Esto Maven lo reconoce como un comando gracias al plugin de Gatling que asociamos en el pom.xml. En el proyecto también incluye dos instrucciones más que pueden ser utilizadas, las cuales son:

mvn clean gatling:help (Muestra una ayuda sobre el plugin)
mvn clean gatling:recorder (Ejecuta el Recorder de Gatling)

Al ejecutar veremos el log de ejecución en consola:

Resultados

Al terminar la ejecución de nuestro script la herramienta nos genera unos excelentes reportes los cuales podemos analizar accediendo al directorio que nos muestra en el resultado de la ejecución en el terminal. En nuestro caso sería:

Please open the following file: C:\Users\Oscar\Documents\GitHub\TestPerformance\target\gatling\iniciosimulation-1495632636063\index.html

Al abrirlo vemos un reporte web como este:

Cierre

Con lo visto en este tutorial ya podemos comenzar a integrar nuestros scripts con la herramienta de construcción de proyectos Maven, esto nos facilitará también ejecutar dichos scripts en herramientas de integración continua, como por ejemplo, Jenkins.

2 thoughts on “Tutorial de Gatling y Maven

  1. Freeman says:

    Hola..Me puedes ayudar con una duda?

    Se trata de que cuando modifico un request de web service en un archivo scala, no se visualiza para ejecutar o simplemente ejecuta los request anteriores al que modifiqué…

    Saludos buen blog

    1. Federico says:

      Hola Freeman
      A qué te referís con que no se visualiza para ejecutar? Podés compartir tu script? aunque sea eliminando las urls?
      saludos

Leave a Reply

Your email address will not be published. Required fields are marked *