intermediate Por Mathias Paulenko

Plantilla de Plan de Ejecucion de Pruebas de Carga

Una plantilla para planificar, ejecutar y documentar pruebas de carga que miden el comportamiento del sistema bajo trafico realista o pico.

Nota para desarrolladores hispanohablantes: Esta guía incluye ejemplos y convenciones de nomenclatura adaptadas a equipos que trabajan en español. Cuando existen diferencias significativas en terminología técnica entre el inglés y el español, se indican explícitamente para facilitar la comunicación en equipos multiculturales.

Descripcion General

Las pruebas de carga evaluan como se comporta un sistema bajo trafico realista o de pico. Esta plantilla ayuda a los equipos a definir objetivos de prueba, seleccionar escenarios, preparar entornos, ejecutar pruebas y documentar resultados. Asegura que el trabajo de rendimiento sea repetible y vinculado a criterios de exito claros.

Cuando Usar

  • For alternatives, see Logging, Monitoring & Observability Guide.

  • Antes de un lanzamiento de producto importante o campana de marketing.

  • Despues de cambios mayores de arquitectura o infraestructura.

  • Cuando cambian los objetivos de escalado o las proyecciones de crecimiento de usuarios.

  • Cuando aparecen problemas de latencia o tasa de error bajo carga.

  • Como parte de una suite regular de pruebas de regresion de rendimiento.

  • Antes de la planificacion de capacidad o la optimizacion de costos.

Prerequisitos

  • Un entorno de prueba similar a produccion que refleje topologia y datos.
  • Herramientas de pruebas de carga como k6, JMeter, Gatling o Locust.
  • Monitoreo y observabilidad del sistema bajo prueba.
  • Metricas de linea base del trafico normal de produccion.
  • Dueno claro y una ventana de prueba programada.
  • Un plan de rollback o escalado si la prueba revela problemas.

Solucion

Plantilla

1. Objetivos y Alcance de la Prueba

CampoDescripcionEjemplo
ID de pruebaIdentificador unicoLT-2026-Q3-001
Sistema bajo pruebaAplicacion o servicioCheckout API
Fecha de pruebaCuando se ejecuta la prueba2026-06-27
Dueno de la pruebaIngeniero responsable de la ejecucionEquipo de rendimiento
StakeholdersEquipos a notificarSRE, backend, plataforma, producto
ObjetivoPor que se ejecuta la pruebaValidar que el checkout soporte 10x de trafico en el lanzamiento
AlcanceQue se incluyeEndpoints de API, base de datos, cache, cola
Fuera de alcanceQue no se pruebaProcesador de pagos, integraciones de terceros

2. Escenarios de Prueba

ID de EscenarioDescripcionEndpoint / FlujoUsuarios VirtualesRamp UpDuracionThink Time
S01Navegar catalogoGET /products5002 min10 min1-3 s
S02Agregar al carritoPOST /cart/items3002 min10 min1-3 s
S03CheckoutPOST /orders2002 min10 min2-5 s
S04BusquedaGET /search?q=...4002 min10 min1-2 s
S05Pico maximoTodos los endpoints combinados20005 min15 min0-1 s

3. Criterios de Exito

MetricaLinea BaseObjetivoNo Debe SuperarNotas
Latencia p5045 ms< 60 ms80 msPara respuestas de API
Latencia p95120 ms< 150 ms200 msPara respuestas de API
Latencia p99300 ms< 400 ms600 msPara respuestas de API
Tasa de error0.01%< 0.1%0.5%HTTP 5xx y timeouts
Throughput1000 RPS> 2000 RPS-Ordenes por segundo
Uso de CPU40%< 70%80%Por nodo de aplicacion
Uso de memoria50%< 70%85%Por nodo de aplicacion
Conexiones de base de datos80< 150200Conexiones activas
Profundidad de cola10< 50100Jobs en segundo plano

4. Configuracion del Entorno

Recursodev/testproductionNotas
Nodos de aplicacion26Mismo tamano de instancia
Load balancer12Misma configuracion
Base de datosInstancia unicaCluster Multi-AZMisma version mayor
Cache1 nodo3 nodosMisma version del engine
Cola de mensajes1 nodo3 nodosMisma configuracion
Generador de carga4 inyectoresN/AInstancias cloud o contenedores
RedVPC aisladaVPC de produccionReflejar latencia y topologia
Volumen de datos10% de produccionProduccion completaUsar datos anonimizados

5. Plan de Ejecucion

PasoAccionDuenoTiempo
1Verificar entorno y monitoreoSRET-30 min
2Reiniciar entorno a estado conocidoSRET-20 min
3Desplegar scripts de prueba y datosEquipo de rendimientoT-15 min
4Ejecutar prueba de linea base con carga bajaEquipo de rendimientoT-10 min
5Ejecutar escenarios S01-S04Equipo de rendimientoT0
6Ejecutar escenario de pico S05Equipo de rendimientoT+15 min
7Monitorear sistema y recolectar metricasSRET+15 a T+30 min
8Reducir carga gradualmente y detener la pruebaEquipo de rendimientoT+30 min
9Exportar resultados y logsEquipo de rendimientoT+35 min
10Restaurar entornoSRET+45 min

6. Resultados y Analisis

EscenarioMax VUsPico RPSLatencia p95Latencia p99Tasa de ErrorCPU PromMemoria PromResultado
S01500120055 ms180 ms0.01%45%60%Aprobado
S0230080090 ms250 ms0.02%55%65%Aprobado
S03200450140 ms380 ms0.05%60%70%Aprobado
S0440095070 ms210 ms0.01%50%62%Aprobado
S0520003400220 ms700 ms0.8%85%88%Fallido

7. Hallazgos y Remediacion

ID de HallazgoDescripcionSeveridadRecomendacionDuenoFecha Limite
LT-001Pool de conexiones de base de datos agotado durante el picoAltaAumentar tamano del pool y agregar reintentos de conexionEquipo backend2026-07-04
LT-002Tasa de aciertos de cache cae bajo carga de busquedaMediaAgregar cache de resultados de busqueda y ajustar TTLEquipo backend2026-07-11
LT-003Profundidad de cola crece cuando la tasa de ordenes excede la capacidad del consumidorMediaEscalar workers de segundo plano horizontalmenteEquipo de plataforma2026-07-11

Explicacion

Las pruebas de carga no solo tratan de encontrar el punto de ruptura. Se trata de entender como se degrada un sistema, donde estan los cuellos de botella y si la capacidad actual cumple con las expectativas de usuarios y negocio. Un plan de ejecucion documentado hace que las pruebas de rendimiento sean repetibles, comparables entre releases y útiles para los equipos de ingenieria.

Ejemplo de Script de Load Test con k6

import http from 'k6/http';
import { check, sleep } from 'k6';
import { Rate } from 'k6/metrics';

const failureRate = new Rate('check_failure_rate');

export const options = {
  stages: [
    { duration: '2m', target: 100 },
    { duration: '5m', target: 100 },
    { duration: '2m', target: 300 },
    { duration: '5m', target: 300 },
    { duration: '2m', target: 500 },
    { duration: '5m', target: 500 },
    { duration: '2m', target: 2000 },
    { duration: '5m', target: 2000 },
    { duration: '5m', target: 0 },
  ],
  thresholds: {
    http_req_duration: ['p(95)<500', 'p(99)<1000'],
    http_req_failed: ['rate<0.01'],
    check_failure_rate: ['rate<0.05'],
  },
};

export default function () {
  const correlationId = `corr_${__VU}_${__ITER}`;
  const headers = {
    'X-Correlation-Id': correlationId,
    'Content-Type': 'application/json',
  };

  const loginRes = http.post('https://api.example.com/auth/login', JSON.stringify({
    username: `user_${__VU % 100}`,
    password: 'test-password',
  }), { headers });

  check(loginRes, {
    'login status 200': (r) => r.status === 200,
    'login has token': (r) => r.json('token') !== undefined,
  });

  failureRate.add(!check(loginRes, {
    'login success': (r) => r.status === 200,
  }));

  sleep(Math.random() * 2 + 1);

  const listRes = http.get('https://api.example.com/orders', {
    headers: { ...headers, Authorization: `Bearer ${loginRes.json('token')}` },
  });

  check(listRes, {
    'orders status 200': (r) => r.status === 200,
    'orders has items': (r) => r.json('items').length > 0,
  });

  sleep(Math.random() * 3 + 1);
}

Variantes

  • Plan de spike test: Enfocado en rafagas repentinas de trafico y comportamiento de recuperacion.
  • Plan de stress test: Empuja el sistema mas alla de los limites esperados para encontrar modos de falla.
  • Plan de endurance test: Ejecuta carga moderada por horas o dias para detectar fugas de memoria o deriva.
  • Plan de soak test: Prueba de larga duracion con carga similar a produccion para validar estabilidad.
  • Plan de scalability test: Aumenta la carga mientras se agregan recursos para medir eficiencia de escalado.
  • Plan de prueba de carga basada en navegador: Usa sesiones reales de navegador para medir rendimiento frontend y API juntos.

Lo que funciona

  • Prueba en un entorno similar a produccion con datos representativos y patrones de trafico reales.
  • Define criterios de exito antes de ejecutar la prueba.
  • Comienza con una linea base y aumenta la carga gradualmente.
  • Monitorea tanto metricas de aplicacion como de infraestructura.
  • Ejecuta las pruebas multiples veces para confirmar reproducibilidad.
  • Incluye metricas de negocio como tasa de conversion o throughput de transacciones.
  • Documenta hallazgos y asigna duenos antes de cerrar la prueba.
  • Automatiza pruebas de regresion en CI/CD para caminos criticos.
  • Coordina con el equipo para evitar impactar produccion o entornos compartidos.

Errores Comunes

  • Ejecutar pruebas de carga directamente contra produccion.
  • Usar trafico sintetico que no coincide con el comportamiento real de usuarios.
  • Probar solo un endpoint en lugar de la jornada completa del usuario.
  • Ignorar cold start, warm-up de cache o efectos de seeding de base de datos.
  • No involucrar al equipo de plataforma o SRE durante la ejecucion.
  • Definir criterios de exito demasiado laxos o indefinidos.
  • Ejecutar las pruebas una sola vez y no repetirlas despues de cambios.
  • No correlacionar metricas de infraestructura con la latencia de aplicacion.

Troubleshooting

  • Largest Contentful Paint is high: optimize images, preload critical resources, and reduce server response time.
  • JavaScript bundle size grows: analyze the bundle, split code by route, and tree-shake unused dependencies. Lazy-load non-critical components.
  • Cache hit rate is low: review cache keys, TTLs, and invalidation patterns.
  • Database CPU spikes: find the top queries by execution time and frequency. Add indexes, rewrite queries, or cache results.
  • Throughput drops under load: profile for contention, garbage collection, and blocked threads. Scale horizontally only after optimizing the hot path.

Lectura Adicional

  • Documentación oficial: consulta la referencia actualizada del framework o herramienta utilizada.
  • Guías relacionadas: explora las guías de load-testing y performance para profundizar.
  • Patrones complementarios: revisa los patrones de diseño aplicables a tu stack tecnológico.
  • Postmortems públicos: estudia incidentes reales de equipos que enfrentaron problemas similares en producción.

Notas de Producción

  • Despliega gradualmente usando canary o blue-green para detectar regresiones temprano.
  • Configura alertas para errores, latencia p99 y tasa de fallos antes de habilitar en producción.
  • Documenta el rollback en el runbook; prueba el procedimiento en staging al menos una vez por trimestre.
  • Revisa logs estructurados con correlation IDs para trazar requests end-to-end en incidentes.

Puntos Clave

  • Aplica plantilla de plan de ejecucion de pruebas de carga cuando necesites una solución práctica para tu caso de uso.
  • Monitorea el rendimiento después de implementar; mide latencia, errores y uso de recursos antes y después.
  • Revisa la sección de Troubleshooting ante errores comunes; la mayoría tienen causa raíz documentada con solución.
  • Mantén dependencias actualizadas y ejecuta tests en CI para prevenir regresiones en producción.

Errores Comunes en Producción

  • Dejar campos requeridos vacíos o usar respuestas vagas de una palabra.
  • Llenar el documento una vez y nunca actualizarlo cuando cambia el alcance o las decisiones.
  • Guardar el documento donde el equipo no lo busque durante incidentes o revisiones.
  • No asignar un responsable, fecha límite o cadencia de revisión.
  • Copiar texto base sin eliminar secciones que no aplican.
  • Saltar el control de versiones, lo que impide rollback y responsabilidad.
  • No vincular el documento con decisiones relacionadas o acciones de seguimiento.
  • Evitar revisiones trimestrales que retirarían secciones obsoletas o sin uso.

Preguntas frecuentes

Que herramientas se usan comúnmente para pruebas de carga?
Las herramientas populares incluyen k6, Apache JMeter, Gatling, Locust y Artillery. La eleccion depende del soporte de protocolos, lenguaje de scripting y necesidades de reportes.
Como simulamos el comportamiento real de usuarios?
Usa logs de produccion para modelar patrones de request, agrega think time entre requests, varia los inputs de datos e incluye una mezcla de operaciones de lectura y escritura.
Deberiamos ejecutar pruebas de carga en produccion?
Las pruebas de carga en produccion son riesgosas y generalmente solo se hacen con trafico sintetico, feature flags y aislamiento. Prefiere entornos dedicados similares a produccion para la mayoria de...
Como correlacionamos resultados de load test con metricas de infraestructura?
Durante el test, captura metricas de infraestructura (CPU, memoria, red, disco I/O) junto con metricas de aplicacion (RPS, latencia, tasa de error). Usa un dashboard que superponga eventos de load...
Cual es la diferencia entre spike, stress y endurance testing?
Spike testing: aumento repentino y extremo de trafico (ej., 10x normal por 30 segundos) para probar si el sistema sobrevive y se recupera. Stress testing: aumentar gradualmente la carga hasta que el...
Como manejamos load testing para servicios con estado?
Los servicios con estado (bases de datos, colas de mensajes, caches) requieren consideraciones especiales de load testing. Usa volumenes de datos realistas — probar con 100 filas cuando produccion...
Que deberiamos hacer si el load test falla?
Si el load test falla: no re-ejecutes inmediatamente — analiza el fallo primero. Identifica que escenario fallo y que umbral fue superado. Revisa metricas de infraestructura para el bottleneck....
Con que frecuencia deberiamos ejecutar load tests?
Ejecuta load tests completos antes de cada release mayor (mensual o trimestral). Ejecuta load tests de regresion en CI para caminos criticos (cada PR o diario). Ejecuta endurance tests...