Artillery (test de carga) update 2024

Artillery (test de carga) update 2024

Artillery es una herramienta que permite realizar test de carga sobre APIs orientada al Cloud. Tiene una versión OpenSources y una versión PRO. Permite integraciones con GithubAtions, Azure DevOps, Jenkins, entre otros, además incorpora algunas funciones especiales para AWS Lambdas y AWS Fargate.

En este Update 2024 es una actualización del post del 2023, vamos a revisar como configurar y ejecutar un test de carga sobre una API de prueba para la que usaremos https://webhook.site/ (un webhook online temporal ).

Instalando Artillery.

Siguiendo las instrucciones de la página oficial de Artillery la instalación se realiza a través de npm (https://www.artillery.io/docs/get-started/get-artillery)

npm install -g artillery@latest

Verificar si Artillery está instalado, dependiendo si la instalación fue local o global ejecutamos $(npm bin)/artillery --version o artillery --version

artillery --version
        ___         __  _ ____
  _____/   |  _____/ /_(_) / /__  _______  __ ___
 /____/ /| | / ___/ __/ / / / _ \/ ___/ / / /____/
/____/ ___ |/ /  / /_/ / / /  __/ /  / /_/ /____/
    /_/  |_/_/   \__/_/_/_/\___/_/   \__  /
                                    /____/
VERSION INFO:

Artillery: 2.0.20
Node.js:   v18.18.2
OS:        linux

Una vez instalado Artillery, escribiremos nuestro primer archivo de pruebas. Los archivos de pruebas en Artillery son archivos .yaml, donde se describen todos los elementos, desde el endpoint que vamos a probar hasta el manejo de las respuestas.

config:
  target: "https://webhook.site/xxx"
  phases:
    - duration: 10
      arrivalRate: 10
  payload:
    path: "message.csv"
    fields:
      - "id"
      - "contacts"
    cast: true
    order: random
  http:
    # HTTP requests from all virtual users will be sent over the same ten connections.
    pool: 10
    timeout: 350

scenarios:
  - name: "Send dropoff"
    flow:
      - post:
          url: "/"
          json:
            id: "{{ id }}"
            contacts: "{{ contacts }}"

Bien que tiene este archivo, para analizarlo lo dividiremos en dos partes:

Config:

Contiene las definiciones del target que deseamos probar, la cantidad de elementos que vamos a enviar, el tiempo de la prueba (en segundos), la cantidad de eventos por segundo y la fuente de los datos como elementos principales.

Scenarios:

La definición de la prueba, indicando el body, el tipo de solicitud (get, post, put, ...) y el path donde vamos a realizar las llamadas http.

name: upload
...
over: upload

Ejecutar la pruebas

Iniciamos el test con el siguiente comando.

artillery run test.yml --record --key XXX

En este comando tenemos como parámetros:

  • run⁣: para ejecutar la pruebas

  • test.yml⁣: nombre del archivo que tiene la configuración

  • record⁣: Permite subir a la versión web (free) de la app.

  • key: Parámetro que pasa le key personal de la cuenta free

Al ejecutar la sentencia se mostrará el progreso a medida que los test se van ejecutando; por otro lado, en el sitio https://webhook.site/xxx podemos ver las solicitudes que enviamos como se muestra en la imagen a continuación:

Importante
Las urls de webhook.site son temporales, genere una url para sus pruebas porque esta se perderá al cerrar el sitio.

Obtener Reporte del test

Este comando tomará como entrada el test.json del paso anterior y construirá un informe

Resumen

¿Qué hicimos en esta introducción a Artillery ?:

  • Instalamos Artillery

  • Configuramos un test básico a webhook.site (Nuestro target) con:

    • Un archivo CSV que contiene los valores para construir el json

      • Usamos los valores de ese CSV de forma aleatoria enviándolos al target
  • Ejecutamos las pruebas

  • Revisamos el reporte en le pagina de Artillery

Referencias:

  • Repositorio con el archivo de configuración y archivo csv con los datos de prueba:

  • Sitio oficial Artillery

  • API temporal donde recibir los test Webhook.site

    • https://webhook.site/

      • webhook Site es una empresa que crea sitios temporales y direcciones de correo. El sitio web puede recibir solicitudes, ⁣ rest, post, Put...⁣ y las registra en la página. Se asigna un id a cada sección y se pueden tener hasta 500 solicitudes en su versión gratis.

Gracias por leer,

¡Saludos!

Oscar Cortes