Skip to content
IRC-CodingIRC-Coding
Load TestingPerformance TestingPruebas de cargak6JMeterGatling

Load Testing: Comportamiento del sistema bajo carga

Aprende Load Testing: perfiles de carga, throughput, tiempos de respuesta, herramientas y mejores prácticas.

S

schutzgeist

9 min read
Load Testing: Comportamiento del sistema bajo carga

Load Testing

Load Testing es una técnica de Performance Testing que verifica cómo se comporta una aplicación cuando recibe la carga esperada en condiciones realistas. Su objetivo es detectar problemas de rendimiento antes de que los usuarios los experimenten en producción. Load Testing proporciona información sobre el throughput, los tiempos de respuesta, la estabilidad y el consumo de recursos bajo carga normal.

En resumen

  • Load Testing simula la carga de usuarios esperada en una aplicación.
  • Mide throughput, tiempo de respuesta, tasa de error y uso de recursos.
  • Las herramientas principales incluyen k6, JMeter y Gatling.
  • Load Testing se diferencia de Stress Testing, Spike Testing y Soak Testing.
  • Los perfiles de carga definen cómo se distribuye la carga en el tiempo.

¿Qué es Load Testing y para qué sirve?

Load Testing verifica si una aplicación puede soportar la carga de usuarios esperada. Para esto, se somete la aplicación a un número definido de usuarios virtuales o solicitudes durante un período determinado. Los resultados muestran si la aplicación opera dentro de los límites aceptables o si surgen cuellos de botella.

Preguntas típicas que Load Testing responde:

  • ¿Cuántos usuarios pueden trabajar simultáneamente sin que el tiempo de respuesta sea excesivo?
  • ¿Cuántas solicitudes por segundo procesa el sistema de forma estable?
  • ¿Aumenta la tasa de error bajo carga elevada?
  • ¿Cómo se comportan la CPU, la memoria y la base de datos bajo carga?
  • ¿El sistema cumple con los Acuerdos de Nivel de Servicio definidos?

Diferencias respecto a otros tipos de Testing de rendimiento

Performance Testing es un término amplio que abarca varias técnicas. Load Testing es una de ellas, pero no la única.

  • Load Testing: Verifica el comportamiento bajo carga esperada y realista.
  • Stress Testing: Supera la carga esperada e identifica los límites del sistema.
  • Spike Testing: Genera picos de carga muy rápidos y extremos, por ejemplo durante lanzamientos de ventas.
  • Soak Testing: Ejecuta la aplicación durante mucho tiempo bajo carga constante para detectar fugas de recursos.

Métricas importantes

Throughput

El throughput indica cuántas solicitudes o transacciones puede procesar el sistema en un período específico. Generalmente se expresa en solicitudes por segundo.

Tiempo de respuesta

El tiempo de respuesta es la duración desde que se envía una solicitud hasta que se recibe la respuesta completa. A menudo se evalúa como promedio, mediana o percentil. El percentil 95 muestra cuán lento es el tiempo de respuesta para la mayoría de los usuarios.

Tasa de error

La tasa de error es la proporción de solicitudes que no se responden correctamente. Un aumento repentino indica un cuello de botella.

Uso de recursos

El uso de recursos incluye CPU, memoria RAM, red y disco. Ayuda a identificar la causa de los problemas de rendimiento.

Usuarios concurrentes

Los usuarios concurrentes son aquellos activos simultáneamente que envían solicitudes al mismo tiempo. Son cruciales para planificar perfiles de carga realistas.

Perfiles de carga

Los perfiles de carga definen cómo se distribuye la carga durante el transcurso del tiempo. Ayudan a simular escenarios realistas.

Carga constante

Con carga constante, el número de usuarios o solicitudes permanece igual durante un período prolongado. Este perfil es apropiado para verificar la estabilidad bajo una línea base definida.

Ramp-up

El Ramp-up incrementa la carga gradualmente hasta alcanzar el objetivo. Permite observar cómo se comporta la aplicación a medida que llegan más usuarios. El Ramp-up es especialmente importante para probar la transición de inactividad a operación normal.

Carga pico

La carga pico simula picos repentinos y breves. Un ejemplo es la afluencia a una tienda de entradas poco después del inicio de las ventas. Este perfil muestra qué tan bien el sistema maneja cambios abruptos de carga.

Soak Test

Un Soak Test mantiene la aplicación ejecutándose durante muchas horas o incluso días bajo carga constante. Así se detectan fugas de recursos como incremento de uso de memoria, fugas de conexiones o archivos de log que crecen sin control.

Carga escalonada

La carga escalonada aumenta en varios escalones, con mesetas cortas entre ellos. Este perfil es excelente para comparar el rendimiento en diferentes niveles de carga e identificar el punto donde el rendimiento se degrada.

Ejemplo práctico

El siguiente ejemplo muestra un Load Test típico para una aplicación web. Se eligió este ejemplo porque combina los perfiles de carga más importantes: Ramp-up, carga constante y cierre. El objetivo es mostrar cómo se estructura un test realista y qué métricas se monitorean.

Objetivo: 1.000 usuarios concurrentes, tiempo de respuesta menor a 500ms

Fases:
1. 100 usuarios durante 2 minutos      (Warm-up / Ramp-up)
2. 500 usuarios durante 5 minutos      (primer plateau)
3. 1.000 usuarios durante 10 minutos   (carga objetivo / plateau)
4. Cierre durante 2 minutos            (descenso)

¿Por qué estas fases?

  • Warm-up con 100 usuarios: La aplicación e infraestructura se llevan gradualmente a temperatura operativa. Los cachés de base de datos se completan y los pools de conexión se inicializan.
  • 500 usuarios durante 5 minutos: Primer plateau para observar el comportamiento bajo carga media e identificar cuellos de botella tempranos.
  • 1.000 usuarios durante 10 minutos: El objetivo real. Aquí se verifica si la aplicación soporta la carga máxima esperada de forma estable durante un período prolongado.
  • Cierre: El descenso ordenado de la carga muestra si el sistema se recupera rápidamente y si los recursos como la memoria se liberan correctamente.

Durante el test se registran continuamente el throughput, el tiempo de respuesta, la tasa de error y el uso de recursos. Los resultados se comparan con los SLAs definidos.

Herramientas importantes

k6

k6 es una herramienta moderna y de código abierto para Load Testing, desarrollada por Grafana Labs. Los tests se escriben en JavaScript y pueden integrarse en pipelines de CI/CD. k6 es particularmente popular entre equipos de desarrollo porque es ligero, basado en scripts y muy bien documentado.

Apache JMeter

JMeter es una de las herramientas de Load Testing más conocidas. Ofrece una interfaz gráfica y soporta muchos protocolos como HTTP, SOAP, JDBC y JMS. JMeter es especialmente apropiado para escenarios complejos y entornos empresariales.

Gatling

Gatling es una herramienta potente para Load Testing que permite escribir tests en Scala, Kotlin o Java. Se destaca por el alto rendimiento de su generador de carga y es ideal para tests de carga grandes con muchos usuarios virtuales.

Otras herramientas

  • Locust: Herramienta basada en Python con creación simple de scripts.
  • Artillery: Herramienta moderna basada en Node.js para Load Testing.
  • Loader.io: Servicio de Load Testing basado en la nube.
  • NeoLoad: Solución empresarial para entornos de prueba complejos.

Ventajas e inconvenientes

VentajasInconvenientes
Detección temprana de problemas de rendimientoPreparación compleja del entorno de prueba
Mejor planificación de infraestructuraSe requiere un entorno de prueba similar a producción
Validación de SLAs y Objetivos de Nivel de ServicioLa interpretación de resultados requiere experiencia
Reducción de tiempos de inactividad en producciónLos datos de prueba deben ser realistas y anonimizados
Medición objetiva de la experiencia del usuarioLas herramientas e infraestructura generan costos
Planificación temprana de medidas de escalabilidadLos Load Tests pueden sobrecargar sistemas similares a producción

Prácticas recomendadas

  • Define objetivos y SLAs claros antes de ejecutar las pruebas.
  • Crea perfiles de carga realistas basados en datos de producción.
  • Utiliza un entorno de pruebas que se asemeje lo máximo posible a producción.
  • Aísla sistemas externos como proveedores de pago o servidores de correo.
  • Supervisa métricas del servidor y la aplicación durante las pruebas.
  • Documenta la configuración de las pruebas, los resultados y las acciones tomadas.
  • Repite las pruebas después de cada cambio significativo.

Puntos clave para evaluación

  • Load Testing: Evalúa el comportamiento de una aplicación bajo una carga esperada y realista.
  • Diferencia con Stress Testing: Load Testing permanece dentro del rango esperado, Stress Testing va más allá de ese límite.
  • Spike Testing: Simula picos de carga súbitos y extremos.
  • Soak Testing: Ejecución prolongada bajo carga constante para detectar pérdidas de recursos.
  • Métricas clave: Rendimiento, tiempo de respuesta, tasa de errores, utilización de recursos, Concurrent User.
  • Percentiles: El percentil 95 es más significativo que el promedio para evaluar la experiencia de la mayoría de usuarios.
  • Perfiles de carga: Carga constante, ramp-up, picos de carga, carga escalonada, soak test.
  • Herramientas importantes: k6, JMeter, Gatling, Locust, Artillery.
  • SLA: Service Level Agreement define los límites de rendimiento aceptables.
  • Entorno de pruebas similar a producción: Necesario para obtener resultados realistas.
  • Datos de prueba: Deben ser realistas, anonimizados y representativos.

Principales referencias

  1. https://k6.io
  2. https://jmeter.apache.org
  3. https://en.wikipedia.org/wiki/Load_testing

Preguntas frecuentes

¿Qué es Load Testing?

Load Testing evalúa el comportamiento de una aplicación bajo una carga esperada y realista. Mide rendimiento, tiempo de respuesta, tasa de errores y utilización de recursos.

¿Qué es un perfil de carga?

Un perfil de carga define el número esperado de usuarios, la tasa de solicitudes y la distribución de transacciones en el tiempo. Es la base para pruebas realistas.

¿Cuáles son las métricas que se miden en Load Testing?

Las métricas más importantes son rendimiento, tiempo de respuesta, tasa de errores, utilización de recursos y cantidad de Concurrent User.

¿Qué es un Soak Test?

Un Soak Test es una ejecución prolongada bajo carga constante. Sirve para detectar pérdidas de recursos como consumo creciente de memoria o conexiones huérfanas.

Menciona una herramienta de Load Testing.

Las herramientas conocidas incluyen k6, Apache JMeter, Gatling, Locust y Artillery.

¿Qué es Ramp-up?

Ramp-up es el incremento gradual de la carga hasta alcanzar el objetivo. Ayuda a observar cómo se comporta el sistema cuando aumenta el número de usuarios.

¿Qué son picos de carga?

Los picos de carga son aumentos súbitos y breves de la carga. Simulan, por ejemplo, el flujo repentino de usuarios al inicio de una venta.

¿Qué es rendimiento?

Rendimiento es el número de solicitudes o transacciones que el sistema puede procesar por segundo. Es un indicador central de capacidad.

¿Qué es una tasa de errores?

La tasa de errores es la proporción de solicitudes que no se responden correctamente. Un aumento repentino indica un cuello de botella.

¿Por qué es importante un entorno de pruebas similar a producción?

Las diferencias en hardware, tamaño de base de datos, red y configuración pueden distorsionar los resultados. Un entorno similar a producción proporciona resultados realistas.

¿Cuál es la diferencia entre Load Testing y Stress Testing?

Load Testing se mantiene dentro del rango de carga esperado. Stress Testing va más allá y encuentra los límites del sistema.

¿Qué es tiempo de respuesta?

Tiempo de respuesta es la duración desde la solicitud hasta la respuesta completa. Se expresa típicamente como promedio, mediana o percentil.

¿Qué es Concurrent User?

Concurrent User son usuarios simultáneamente activos que envían solicitudes al sistema al mismo tiempo. Forman la base de los perfiles de carga.

¿Qué es un Load Generator?

Un Load Generator es un sistema o herramienta que genera la carga virtual para la prueba y la envía a la aplicación.

¿Cuándo se debe realizar Load Testing?

Load Testing debe realizarse antes de publicar versiones, cuando hay cambios en infraestructura, ante problemas de rendimiento o antes de picos de tráfico esperados.

¿Qué es un Spike Test?

Un Spike Test genera picos de carga muy extremos muy rápidamente y verifica cómo el sistema maneja cambios abruptos de carga.

¿Qué es un percentil en tiempo de respuesta?

Un percentil indica qué porcentaje de solicitudes se encuentran por debajo de un valor específico. El percentil 95 suele ser más revelador que el promedio.

¿Qué es un SLA?

Un SLA, o Service Level Agreement, define los límites de rendimiento aceptables, como tiempos de respuesta o disponibilidad.

¿Qué es una prueba de estrés?

Una prueba de estrés somete el sistema a una carga más allá de lo esperado para encontrar sus límites y cómo se comporta bajo sobrecarga.

¿Qué son datos de prueba en Load Testing?

Los datos de prueba deben ser realistas, anonimizados y representativos para que la prueba arroje resultados significativos.

Continuando en la ruta de aprendizaje de Software Testing

El siguiente artículo en la ruta de aprendizaje de Software Testing aborda Performance Testing — cómo Performance Testing examina exhaustivamente el rendimiento del sistema.

Volver al blog
Share:

Entradas relacionadas