¿Qué es Locust.io y por qué debería importarte?
Imagina que acabas de lanzar tu sitio web o aplicación. Todo se ve genial, funciona de maravilla… hasta que entran 1,000 usuarios a la vez y todo se cae como castillo de naipes. Aquí entra Locust.io, una herramienta de pruebas de carga open source que simula miles (¡o millones!) de usuarios al mismo tiempo para ayudarte a saber si tu sistema realmente está listo para el mundo real.
Y lo mejor: está escrita en Python, lo que la hace flexible, sencilla y hasta divertida de usar.
Paso a Paso: Cómo Instalar Locust en tu Máquina
Vamos a lo práctico. Aquí te explico cómo instalar Locust sin complicaciones. Prometido: cero tecnicismos innecesarios.
Requisitos previos
Antes de empezar, asegúrate de tener:
Python 3.7 o superior instalado en tu sistema.
pip, el gestor de paquetes de Python (generalmente viene con Python).
Acceso a una terminal o consola de comandos (puedes usar PowerShell en Windows, Terminal en macOS o Linux).
Como sabemos si cumplimos estos requisitos, fácil, ejecutamos en nuestra terminal:
python3 –version
Verás algo como Python 3.11.2
Ahora vamos a crearnos un entorno para el proyecto y así mantener nuestra instalación limpia y sin conflictos con otros proyectos. Para ello necesitamos instalar python3.11-venv en nuestro caso por la versión.
sudo apt install python3.11-venv
Una vez instalado ejecutamos:
python3 -m venv locust
Activamos el entorno:
source locust/bin/activate
Y sabremos que estamos dentro de el porque en la consola delante de nuestro nombre estará el nombre de nuestro entorno
Una vez dentro instalamos locust con pip:
pip install locust
¿Y ahora qué? ¡Hora de probarlo!
Una vez terminado necesitamos crear un fichero llamado locustfile.py que es el que buscará cuando ejecutemos locust o bien con otro nombre como por ejemplo locusttest.py donde a la hora de ejecutar debemos indicar el fichero a utilizar con locust -f file.py
Para este manual vamos a crear una prueba sencilla de carga de la página principal creando el fichero locusttest.py con el siguiente código.
from locust import HttpUser, task
class MyUser(HttpUser):
@task
def load_homepage(self):
self.client.get("/")
Ahora arrancamos locust en nuestra consola, en nuestro caso especificando el fichero que hemos llamado locusttest.py:
locust -f locusttest.py
Si todo ha ido bien nos dira que vayamos al navegador y abramos la ip de la máquina por el puerto 8089
Accediendo a el tenemos los siguientes campos, número de usuarios concurrentes, cuantos iremos aumentando gradualmente por segundo para simular como realmente se van conectando los usuarios en lugar de generar una sobrecarga artificial si metemos 10000 de golpe y durante cuanto tiempo lo vamos a lanzar.
Lo rellenamos a nuestro gusto, por ejemplo, 1000 usuarios aumentando de 10 en 10 cada segundo durante 3m. Y obtendremos los resultados resumidos de la siguiente manera
Type | Tipo de request, normalmente, por ejemplo GET |
Name | El nombre o endpoint que se está llamando, por ejemplo en este test la raiz o home / |
# Requests | Número total de veces que se hizo esa solicitud. Ej: 5,000 veces se pidió / |
# Fails | Cuántas veces esa solicitud falló (por timeout, error 500, etc). Idealmente: debemos obtener 0 |
Median (ms) | Tiempo de respuesta medio justo en el centro de todos los datos. Menos sensible a valores extremos. |
95%ile (ms) | El 95% de las respuestas fueron más rápidas que este valor. Solo el 5% fueron más lentas. |
99%ile (ms) | Igual que el anterior, pero aún más exigente. El 99% de las respuestas fueron más rápidas que este tiempo. |
Average (ms) | Promedio de tiempo de respuesta. |
Min (ms) | El request más rápido registrado (en milisegundos). |
Max (ms) | El request más lento registrado. Te ayuda a detectar "picos" o momentos de congestión. |
Average size (bytes) | Tamaño promedio de las respuestas |
Current RPS | Requests Per Second actuales. Cuántas solicitudes por segundo está haciendo Locust en ese momento. |
Current Failures/s | Fallos por segundo que están ocurriendo ahora. Si este valor sube, ¡ojo! Algo no está aguantando la carga. |
En charts podemos ver gráficas como solicitudes totales por segundo.
E incluso descargarnos los datos en CSV en el apartado Download Data.
En el server que estamos testeando si tenemos acceso a los logs podremos identificar las peticiones del test viéndose de la siguiente manera
Puedes hacer muchas tareas simuladas como hacer login, navegar,etc… pero eso lo dejamos para otro post.
TL.
Gracias por leer nuestros posts y espero disfrutes de locust
Preguntas Frecuentes
Locust es una herramienta de código abierto para realizar pruebas de carga y rendimiento. Te permite simular miles (o millones) de usuarios concurrentes que interactúan con tu sistema, para ver cómo responde bajo presión. Es ideal para aplicaciones web, APIs REST, y más.
Un poco, sí. Los tests en Locust se escriben en Python, pero con una sintaxis muy simple y directa. No necesitas ser un experto. Si sabes lo básico (funciones, clases, etc.), puedes crear tests rápidamente.
No. Aunque es muy popular para probar sitios web y APIs, Locust puede probar cualquier sistema que puedas controlar desde Python: servicios HTTP, WebSockets, bases de datos, colas de mensajes, etc. Solo necesitas definir cómo interactuar con el sistema.
¡Tiene una interfaz gráfica muy amigable! Cuando ejecutas locust
, puedes acceder por medio de (http://ip:8089) donde puedes definir cuántos usuarios lanzar, la tasa de ramp-up, y ver resultados en tiempo real con gráficas. También puedes usar modo sin interfaz si prefieres scripts automatizados o integración CI/CD.