Testing de Rendimiento
Testing de rendimiento es el término que engloba las pruebas que miden velocidad, estabilidad y escalabilidad de una aplicación. Se trata de una de las pruebas no funcionales más importantes y asegura que el software permanece performante y estable bajo carga realista.
En Resumen
- Testing de rendimiento mide velocidad, estabilidad y escalabilidad.
- Tipos: Load, Stress, Spike, Endurance, Volume, Scalability.
- Métricas: tiempo de respuesta, throughput, tasa de error, uso de recursos.
- Herramientas: k6, JMeter, Gatling, Locust.
- Testing de rendimiento es parte del Performance Engineering.
¿Qué es el testing de rendimiento y para qué sirve?
El testing de rendimiento examina cómo se comporta una aplicación bajo diferentes cargas. Responde preguntas como: ¿Qué tan rápido reacciona el sistema? ¿Cuántas solicitudes por segundo procesa? ¿Qué tan estable es a lo largo del tiempo? ¿Qué recursos consume?
Los objetivos típicos del testing de rendimiento son:
- Garantizar la experiencia del usuario: Los tiempos de carga largos ahuyentan usuarios y reducen las tasas de conversión.
- Encontrar cuellos de botella: Las bases de datos, APIs y algoritmos pueden ser puntos críticos.
- Validar SLAs: Los tiempos de respuesta y disponibilidad acordados deben cumplirse.
- Planificación de capacidad: ¿Cuántos usuarios puede soportar el sistema? ¿Cuándo hace falta escalar?
- Verificar estabilidad: ¿Funciona el sistema durante largos períodos sin fugas de memoria?
Tipos de pruebas de rendimiento
Load Testing
Load testing examina el comportamiento bajo carga esperada y realista. Muestra si el sistema funciona de manera performante y estable en operación normal. Por ejemplo: 1.000 usuarios simultáneos, tiempo de respuesta menor a 500ms.
Stress Testing
Stress testing va más allá de la carga esperada. Encuentra los límites del sistema y muestra cómo se comporta cuando está sobrecargado. Por ejemplo: aumentar la carga hasta que el sistema falla.
Spike Testing
Spike testing genera picos de carga muy rápidos y extremos. Simula, por ejemplo, la afluencia repentina a una tienda durante el inicio de una venta. Muestra qué tan bien maneja el sistema los cambios abruptos de carga.
Endurance Testing (Soak Testing)
Endurance testing deja la aplicación ejecutándose durante un período largo bajo carga constante. Sirve para detectar fugas de recursos como incremento de uso de memoria, fugas de conexión o archivos de log que se llenan.
Volume Testing
Volume testing prueba el sistema con grandes volúmenes de datos. Verifica si la base de datos y la aplicación siguen siendo performantes incluso con millones de registros.
Scalability Testing
Scalability testing examina qué tan bien escala el sistema cuando se añaden más recursos. Muestra si la escalabilidad horizontal o vertical mejora el rendimiento.
Métricas Importantes
Tiempo de Respuesta
El tiempo de respuesta es la duración desde una solicitud hasta la respuesta completa. Generalmente se evalúa como promedio, mediana o percentil. El percentil 95 es especialmente importante porque muestra qué tan lento es para la mayoría de usuarios.
Throughput
El throughput indica cuántas solicitudes o transacciones puede procesar el sistema en un tiempo determinado. Se expresa en solicitudes por segundo o transacciones por minuto.
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 comprende utilización de CPU, memoria, ancho de banda de red e I/O de disco. Ayuda a identificar la causa de problemas de rendimiento.
Usuarios Concurrentes
Los usuarios concurrentes son usuarios activos simultáneamente que envían solicitudes al mismo tiempo. Son la base para los perfiles de carga.
Ejemplo Práctico
El siguiente ejemplo muestra un plan típico de testing de rendimiento para una aplicación web. Se eligió porque combina diferentes tipos de pruebas de rendimiento y muestra cómo las métricas y objetivos trabajan juntos.
Objetivos:
- Tiempo de respuesta menor a 200ms
- Percentil 95 menor a 500ms
- Tasa de error menor a 0,1 por ciento
- Throughput 1.000 solicitudes por segundo
Pruebas:
- Load test con carga normal
- Stress test hasta el límite
- Endurance test durante 24 horas
¿Por qué estas pruebas?
- Load Test: Verifica si el sistema cumple los objetivos bajo la carga esperada de 1.000 solicitudes por segundo. Esto es operación normal.
- Stress Test: Encuentra el límite del sistema. ¿Qué sucede con 2.000 o 5.000 solicitudes por segundo? ¿Cuándo sube la tasa de error?
- Endurance Test: ¿Funciona el sistema de manera estable después de 24 horas bajo carga? ¿Hay fugas de memoria o de conexión?
Las métricas se capturan continuamente durante la prueba y se comparan con los objetivos. Las desviaciones se analizan y se utilizan como base para optimizaciones.
Herramientas Importantes
k6
k6 es una herramienta moderna y de código abierto para testing de rendimiento, desarrollada por Grafana Labs. Las pruebas se escriben en JavaScript y pueden integrarse en pipelines de CI/CD.
Apache JMeter
JMeter es una de las herramientas de testing de rendimiento más conocidas. Ofrece interfaz gráfica y soporta muchos protocolos como HTTP, SOAP, JDBC y JMS.
Gatling
Gatling es una herramienta potente que escribe pruebas en Scala, Kotlin o Java. Se destaca por el alto rendimiento de su generador de carga.
Locust
Locust es una herramienta basada en Python con creación de scripts simple. Es ideal para equipos que ya utilizan Python.
Ventajas y Desventajas
| Ventajas | Desventajas |
|---|---|
| Mejor experiencia de usuario mediante tiempos de respuesta optimizados | Preparación compleja del ambiente de pruebas |
| Detección temprana de cuellos de botella | Se requiere ambiente realista |
| Validación de SLA y planificación de capacidad | Esfuerzo en datos de prueba y escenarios |
| Medición objetiva del rendimiento | Herramientas e infraestructura generan costos |
| Reducción de tiempo de inactividad en producción | La interpretación de resultados requiere experiencia |
| Base para decisiones de escalabilidad | Las pruebas deben repetirse regularmente |
Mejores Prácticas
- Define objetivos: Establece SLAs y métricas claros antes de la prueba.
- Ambiente similar a producción: El ambiente de pruebas debe parecer al de producción.
- Datos de prueba realistas: Usa datos de producción anonimizados.
- Monitoring: Captura métricas del servidor y aplicación durante la prueba.
- Repite regularmente: Ejecuta pruebas de rendimiento ante cualquier cambio relevante.
- Integra en CI/CD: Automatiza pruebas de rendimiento en cada release.
- Analiza cuellos de botella: No solo midas, también encuentra las causas raíz.
Puntos clave para el examen
- Performance Testing: término general para pruebas que miden velocidad, estabilidad y escalabilidad.
- Load Testing: prueba bajo carga esperada y realista.
- Stress Testing: prueba más allá del rango de carga esperado.
- Spike Testing: simulación de picos de carga extrema y repentina.
- Endurance Testing: ejecución prolongada bajo carga constante para detectar fugas de recursos.
- Volume Testing: prueba con grandes volúmenes de datos.
- Scalability Testing: prueba de escalabilidad con más recursos.
- Métricas importantes: tiempo de respuesta, throughput, tasa de errores, uso de recursos, usuarios concurrentes.
- Percentiles: el percentil 95 es más significativo que el promedio.
- Herramientas importantes: k6, JMeter, Gatling, Locust.
- SLA: Service Level Agreement con objetivos de performance acordados.
- Performance Engineering: visión integral del rendimiento más allá de las pruebas.
- Latencia: retraso entre una solicitud y la primera respuesta.
Fuentes principales
Preguntas frecuentes
¿Qué es Performance Testing?
Performance Testing es el término general para pruebas que miden la velocidad, estabilidad y escalabilidad de una aplicación. Garantiza que el software siga siendo eficiente bajo carga realista.
¿Qué es Load Testing?
Load Testing evalúa el comportamiento de una aplicación bajo carga esperada y realista. Muestra si el sistema funciona de forma eficiente y estable durante la operación normal.
¿Qué es Stress Testing?
Stress Testing va más allá de la carga esperada y encuentra los límites del sistema. Muestra cómo reacciona el sistema ante sobrecarga y en qué punto falla.
¿Qué es Spike Testing?
Spike Testing genera picos de carga extrema y repentina. Por ejemplo, simula el flujo masivo de usuarios en una tienda al inicio de una venta y evalúa cómo el sistema lo maneja.
¿Qué es Endurance Testing?
Endurance Testing ejecuta la aplicación durante un período largo bajo carga constante. Sirve para detectar fugas de recursos como el crecimiento de memoria o fugas de conexiones.
¿Cuáles son las métricas de performance?
Las métricas importantes son tiempo de respuesta, throughput, tasa de errores, uso de recursos y usuarios concurrentes. Permiten evaluar el rendimiento de forma objetiva.
¿Qué es el percentil 95?
El percentil 95 significa que el 95 por ciento de las solicitudes son más rápidas que ese valor. Es más significativo que el promedio porque excluye los valores atípicos.
¿Qué es escalabilidad?
Escalabilidad es la capacidad de un sistema de manejar carga creciente mediante más recursos. Se distingue entre escalabilidad horizontal (más servidores) y vertical (servidores más potentes).
¿Qué es Volume Testing?
Volume Testing prueba el sistema con grandes volúmenes de datos. Verifica si la base de datos y la aplicación siguen siendo eficientes incluso con millones de registros.
¿Qué herramientas existen para Performance Testing?
Las herramientas conocidas son k6, Apache JMeter, Gatling y Locust. k6 y Locust son basadas en scripts, mientras que JMeter ofrece una interfaz gráfica.
¿Qué es un cuello de botella de rendimiento?
Un cuello de botella de rendimiento es un componente que limita la velocidad general de la aplicación, como una base de datos lenta o un algoritmo no optimizado.
¿Qué es latencia?
Latencia es el retraso entre una solicitud y la primera respuesta. Es un indicador importante de la experiencia del usuario.
¿Qué es un SLA?
Un SLA, o Service Level Agreement, es un acuerdo con objetivos de performance definidos como tiempo de respuesta, disponibilidad y throughput.
¿Por qué es importante Performance Monitoring?
Performance Monitoring proporciona datos de rendimiento reales de la producción y ayuda a detectar cuellos de botella y degradación temprana.
¿Qué es Performance Engineering?
Performance Engineering es la visión integral del rendimiento más allá de las pruebas, incluyendo arquitectura, diseño y monitoreo continuo.
¿Qué es Scalability Testing?
Scalability Testing evalúa qué tan bien escala un sistema cuando se agregan más recursos. Muestra si la escalabilidad horizontal o vertical mejora el rendimiento.
¿Cuál es la diferencia entre escalabilidad horizontal y vertical?
La escalabilidad vertical aumenta los recursos de un servidor, como CPU y RAM. La escalabilidad horizontal añade más servidores y distribuye la carga.
¿Qué es throughput?
Throughput es la cantidad de solicitudes o transacciones que un sistema puede procesar en un tiempo determinado. Se expresa en solicitudes por segundo.
¿Cuál es la diferencia entre Performance Testing y Load Testing?
Performance Testing es el término general. Load Testing es un tipo específico de Performance Testing que evalúa el sistema bajo carga esperada.
¿Cuándo se deben ejecutar pruebas de rendimiento?
Las pruebas de rendimiento deben ejecutarse antes de lanzamientos, durante cambios arquitectónicos, ante problemas de performance o antes de picos de tráfico esperados.
Continuamos en el camino de aprendizaje de Software Testing
El siguiente artículo en el camino de aprendizaje de Software Testing aborda Security Testing — cómo Security Testing descubre vulnerabilidades de seguridad.



