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 GithubActions, 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 cómo 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.20Node.js: v18.18.2OS: 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: 350scenarios: - name: "Send dropoff" flow: - post: url: "/" json: id: "{{ id }}" contacts: "{{ contacts }}"
Bien, qué 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 configuracin
record: Permite subir a la versin web (free) de la app.
key: Parmetro 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 bsico 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 la página de Artillery
Referencias:
Repositorio con el archivo de configuracin y archivo csv con los datos de prueba:
Sitio oficial Artillery
API temporal donde recibir los test 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
Artículo original: Artillery (test de carga) update 2024