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 pruebastest.yml
: nombre del archivo que tiene la configuraciónrecord
: 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
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
-
- 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 unid
a cada sección y se pueden tener hasta 500 solicitudes en su versión gratis.
- webhook Site es una empresa que crea sitios temporales y direcciones de correo. El sitio web puede recibir solicitudes,
-
Gracias por leer,
¡Saludos!
Oscar Cortes