Cómo ejecutar las pruebas¶
Guía para correr el suite de carga + estrés localmente.
Requisitos¶
- Docker Desktop corriendo.
- k6 instalado. En Windows con Chocolatey:
choco install k6. Con winget:winget install k6.k6. Verificar conk6 version. - Python 3.12+ con
pymongo,bsonypsycopg2(el venv del proyecto los tiene).
Pasos¶
1. Levantar el stack completo¶
Desde notification-service/ (donde vive el compose.yml que orquesta todos los servicios + RabbitMQ + Mongo + Postgres):
docker compose up -d --build
El servicio checkout-service corre alembic upgrade head automáticamente al iniciar (configurado vía command: en el compose), así que no hace falta correr migraciones aparte.
Verificar que los servicios críticos estén healthy:
docker ps --format "table {{.Names}}\t{{.Status}}" | Select-String -Pattern "checkout|product|user|mongo|rabbit"
2. Sembrar datos de prueba¶
Desde checkout-service/:
python load-tests\seed.py
Inserta 10 productos en MongoDB y un usuario vendedor. Genera load-tests/product_ids.json con los ObjectIds reales, que los scripts k6 leen al arrancar.
3. Correr load test (~3m30s)¶
k6 run --no-color `
--summary-export load-tests\results\load_summary.json `
load-tests\load_test.js
k6 puede salir con código 99 si se cruzan umbrales — es esperado, no es error.
4. Correr stress test (~4m)¶
k6 run --no-color `
--summary-export load-tests\results\stress_summary.json `
load-tests\stress_test.js
5. Generar reporte¶
python load-tests\generate_report.py
Lee los dos *_summary.json y produce load-tests/results/RESULTS.md con tablas, percentiles, umbrales y un diagnóstico automático.
6. (Opcional) Limpiar¶
python load-tests\seed.py teardown
Elimina los 10 productos seed y el usuario vendedor.
Pipeline automatizado (bash)¶
Si usás Git Bash o WSL, hay un script que orquesta todo:
bash load-tests/run_tests.sh
Flags útiles:
--skip-seed— saltea el seed (datos ya cargados).--skip-teardown— mantiene los datos al terminar.
Modo mock de MercadoPago¶
El compose.yml activa por default MERCADOPAGO_MOCK_MODE=true. Eso hace que checkout-service devuelva respuestas sintéticas en lugar de pegarle a MP sandbox. Beneficios:
- Las corridas no consumen rate-limit ni tokens de MP.
- Los números reflejan el sistema propio, sin la latencia del integrador externo.
Para correr contra MP real:
$env:MERCADOPAGO_MOCK_MODE = "false"
docker compose up -d --force-recreate checkout-service
Recordá tener configurado MERCADOPAGO_ACCESS_TOKEN en el .env antes de desactivar el mock.
Troubleshooting¶
open ./product_ids.json: no such file¶
Falta el seed. Correr python load-tests/seed.py.
cart add → 2xx: 0%¶
El flujo no se está validando. Probable: product-service no expone el endpoint que checkout-service está pegando, o el seed apunta a IDs que no existen. Validá manualmente con curl:
$pid = (Get-Content load-tests\product_ids.json | ConvertFrom-Json)[0]
curl -i "http://localhost:8000/api/v1/products/$pid"
curl -i -X POST "http://localhost:8002/api/v1/cart/items" `
-H "Content-Type: application/json" `
-H "X-User-Email: test@test.com" `
-d "{`"product_id`":`"$pid`",`"quantity`":1}"
El reporte (RESULTS.md) también incluye un diagnóstico data-driven que cuando detecta cart_add < 50% lista las causas más probables ordenadas.
UnicodeEncodeError: 'charmap' codec al generar el reporte¶
PowerShell ejecuta Python en cp1252 por default. Solución:
$env:PYTHONUTF8 = "1"
python load-tests\generate_report.py
(El generador ya pasa encoding="utf-8" al open, pero algunos entornos lo ignoran.)
Los contenedores no toman cambios de código¶
docker compose up -d sin --build reutiliza la imagen vieja. Forzar:
docker compose up -d --build --force-recreate checkout-service
Tablas no existen en checkout-db¶
Verificar que el command: del compose esté presente para checkout-service (corre alembic upgrade head al arrancar). Si por alguna razón falla, correr manualmente:
docker compose exec checkout-service alembic upgrade head