Introducción a Locust
Locust es una herramienta de pruebas de carga basada en Python y de código abierto que permite a los desarrolladores escribir escenarios de prueba en código Python puro. A diferencia de herramientas pesadas en GUI como JMeter, Locust (como se discute en Gatling: High-Performance Load Testing with Scala DSL) proporciona un enfoque code-first con potentes capacidades de pruebas distribuidas y monitoreo en tiempo real basado en web.
Prueba de Carga Básica
# locustfile.py
from locust (como se discute en [K6: Modern Load Testing with JavaScript for DevOps Teams](/blog/k6-modern-load-testing)) import HttpUser, task, between
class WebsiteUser(HttpUser):
wait_time = between(1, 3)
host = "https://api.example.com"
@task(3)
def view_products(self):
self.client.get("/api/products")
@task(1)
def view_product_detail(self):
product_id = 123
self.client.get(f"/api/products/{product_id}")
@task(2)
def add_to_cart(self):
self.client.post("/api/cart", json={
"product_id": 456,
"quantity": 1
})
Comparación Locust vs JMeter
Característica | Locust | JMeter |
---|---|---|
Lenguaje | Python | GUI/XML |
Curva de Aprendizaje | Baja (si conoce Python) | Media-Alta |
Test as Code | Sí (nativo) | Limitado |
Pruebas Distribuidas | Incorporado | Incorporado |
UI en Tiempo Real | Web moderna | Java Swing anticuado |
Control de Versiones | Excelente (archivos Python) | Pobre (archivos XML) |
Uso de Recursos | Menor | Mayor (Java) |
Soporte de Protocolos | HTTP/WebSocket (extensible) | Extenso incorporado |
Mejores Prácticas
1. Simulación Realista de Usuarios
from locust import HttpUser, task, between
import random
class RealisticUser(HttpUser):
wait_time = between(1, 5)
@task(10)
def browse(self):
pages = ['/products', '/about', '/contact']
self.client.get(random.choice(pages))
@task(1)
def purchase(self):
if random.random() < 0.1:
self.client.post("/api/orders", json={
"items": [{"id": random.randint(1, 100), "qty": 1}]
})
Conclusión
Locust proporciona un enfoque moderno basado en Python para pruebas de carga que sobresale en flujos de trabajo code-first, integración con control de versiones y pruebas distribuidas. Su simplicidad y flexibilidad lo hacen ideal para desarrolladores familiarizados con Python que desean definir pruebas de rendimiento como código.
Elige Locust cuando:
- El equipo se siente cómodo con Python
- Se prefieren pruebas como código
- Se desea UI moderna basada en web
- Se necesita control de versiones fácil
- Se requieren pruebas distribuidas
Elige JMeter cuando:
- Se necesita soporte extenso de protocolos
- El equipo prefiere creación de pruebas basada en GUI
- Infraestructura JMeter existente grande
- Se usan intensivamente protocolos no-HTTP