GrowthStack API — Informe de Pruebas de Carga

Locust 2.32.0  ·  Black Friday Simulation  ·  14 Jun 2026 09:42 UTC  ·  Run: bf-load-2026-2847

TODOS LOS UMBRALES OK
Peticiones totales
248,712
en 10 min de ejecucion
Error rate
0.8%
umbral: < 3% ✓
RPS pico
521
usuarios pico: 500
Latencia media
312ms
mediana: 198ms
Latencia p95
1,420ms
umbral: < 2000ms ✓
Latencia p99
1,890ms
maximo: 4,210ms
Latencia por percentil a lo largo del tiempo
2000ms 1500ms 1000ms 500ms limite mediana media p95 p99 0m 2m 4m 6m 8m 10m
Curva de carga — Black Friday Shape
500 250 100 500 usuarios 521 RPS Usuarios RPS 0m 2m30 5m (pico) 7m30 10m
Rendimiento por endpoint
Endpoint Tipo Peticiones Fallos Media Mediana p95 p99 RPS Estado
POST /auth/login AUTH 4,821 12 145ms 112ms 290ms 410ms 8.0 OK
GET /api/v1/contacts LIST 72,450 180 218ms 178ms 520ms 780ms 120.8 OK
GET /api/v1/contacts/{id} GET 36,210 72 98ms 82ms 210ms 340ms 60.4 OK
GET /api/v1/campaigns LIST 24,130 48 312ms 265ms 740ms 1,120ms 40.2 OK
POST /api/v1/campaigns/{id}/send WRITE 8,044 120 842ms 720ms 1,890ms 3,100ms 13.4 LENTO
GET /api/v1/analytics/summary GET 12,055 96 1,240ms 1,080ms 1,420ms 1,890ms 20.1 LENTO
POST /api/v1/webhooks/track TRACK 91,002 470 42ms 35ms 95ms 140ms 151.7 OK
Extracto locustfile.py — GrowthStackUser
from locust import HttpUser, task, between, LoadTestShape

class GrowthStackUser(HttpUser):
    wait_time = between(1, 4)
    host = "https://api.growthstack.io"

    def on_start(self):
        resp = self.client.post("/auth/login",
            json={"email": "qa@growthstack.io"})
        self._token = resp.json()["access_token"]

    @task(4) # 60% del trafico
    def list_contacts(self):
        self.client.get("/api/v1/contacts?page=1",
            headers=self._headers,
            name="/api/v1/contacts [list]")

    @task(1) # 10% — op. costosa
    def send_campaign(self):
        with self.client.post("/api/v1/campaigns/201/send",
            json={"dry_run": True},
            catch_response=True) as r:
            if r.status_code == 202: r.success()
Recomendaciones post-prueba
Exitos
Tracking endpoint (42ms media) soporta perfectamente los 521 RPS de pico.
Auth y contact detail dentro de SLA.
Optimizar antes del Black Friday
/analytics/summary — p99 1890ms, anadir cache Redis (TTL 60s).
/campaigns/{id}/send — Mover a cola async (SQS/BullMQ).
Configurar rate-limit 429 en campaign send para evitar DB storms.
CI / Next Steps
Pipeline GitHub Actions configurado.
Re-ejecutar post-optimizacion con -u 800 para validar headroom.
Distribucion de errores (1,998 fallos / 0.8%)
504 Gateway Timeout
1,100
429 Rate Limited
650
500 Server Error
198
Connection Error
50