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ísticaLocustJMeter
LenguajePythonGUI/XML
Curva de AprendizajeBaja (si conoce Python)Media-Alta
Test as CodeSí (nativo)Limitado
Pruebas DistribuidasIncorporadoIncorporado
UI en Tiempo RealWeb modernaJava Swing anticuado
Control de VersionesExcelente (archivos Python)Pobre (archivos XML)
Uso de RecursosMenorMayor (Java)
Soporte de ProtocolosHTTP/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