Testing carga rendimiento aplicación web antes lanzamiento
Testing de carga y rendimiento de una aplicación web antes del lanzamiento: guía práctica para evitar caídas el día D
Como CFO he visto demasiados P&L manchados por caídas evitables. Pocas líneas duelen tanto como "ingresos no realizados por incidencia técnica". El servidor escupe 503 a las tres horas y la activación se desploma. Akamai mide que 100 milisegundos extra de carga recortan conversiones hasta un 7%. Si tu funnel mueve 80.000 € al mes, ahí se evaporan 5.600 €. Muchos equipos siguen tratando el testing de carga y rendimiento de la aplicación web antes del lanzamiento como un nice-to-have del backlog.
Esta guía explica cómo diseñar pruebas realistas y encontrar cuellos de botella antes que tu usuario.
Por qué el rendimiento no es un "ya lo veremos"
El rendimiento percibido entra directamente en el modelo de retención, y la retención manda en cualquier conversación seria de métricas unit economics rentabilidad startup SaaS. Google publicó en 2024 que el 53% de las visitas móviles se abandonan si la página tarda más de tres segundos en cargar. Ese 53% es la mitad de tu CAC tirado por el desagüe. Y un matiz: una app puede responder rápido con diez usuarios y romperse con quinientos. El rendimiento, como la liquidez, no es lineal.
El testing no confirma que "funciona"; responde preguntas que un comité financiero también haría:
- ¿Cuántos usuarios concurrentes soporta la infraestructura actual?
- ¿En qué punto empieza a degradarse el tiempo de respuesta?
- ¿Qué componente es el primero en saturarse: la base de datos, el servidor de aplicaciones o la red?
- ¿Se recupera el sistema tras un pico de tráfico o queda en estado inconsistente?
Sin respuestas concretas, lanzar es apostar.
Tipos de pruebas de rendimiento que deberías conocer
Las pruebas no son intercambiables. Conviene distinguirlas como distinguimos burn rate de runway aunque ambos lleven euros en el numerador.
Prueba de carga (Load Testing)
Simula el volumen esperado en condiciones normales y comprueba que los tiempos de respuesta caen dentro de umbrales aceptables. Si esperas 2.000 usuarios simultáneos durante la primera semana, la prueba debe replicar exactamente ese escenario.
Prueba de estrés (Stress Testing)
Empuja el sistema más allá de su capacidad prevista para encontrar el punto de quiebre. La pregunta no es si aguanta; es qué ocurre cuando deja de aguantar: cae de forma controlada, corrompe datos o se bloquea indefinidamente. Un test de estrés financiero, con peticiones por segundo.
Prueba de resistencia (Soak Testing)
Carga moderada durante un periodo prolongado, normalmente entre 8 y 72 horas. Detecta lo que aparece solo con el tiempo: fugas de memoria, acumulación de conexiones a base de datos, degradación progresiva. Auditar un saldo a 90 días en lugar del cierre de mes.
Prueba de picos (Spike Testing)
Simula subidas súbitas y extremas, típicas de una campaña viral o mención en prensa. Cloudflare señala que los picos inesperados son la causa principal de caída en el 40% de los sitios que monitoriza. Cuatro de cada diez incidentes nacen de algo que marketing celebraba minutos antes.
Las métricas que importan de verdad
Medirlo todo equivale a no medir nada. MRR es bonito en una keynote, no en una caja registradora; lo mismo aplica a un dashboard repleto de gráficos.
Tiempo de respuesta (Response Time)
Tiempo entre la petición y la respuesta completa. La media importa; los percentiles P95 y P99 cuentan la verdad. Si el P99 es de 12 segundos, uno de cada cien usuarios tiene una experiencia inaceptable. Multiplica por 100.000 sesiones al mes: mil clientes irritados financiando a tu competencia.
Throughput
Peticiones procesadas por segundo. Estable bajo carga creciente indica que la arquitectura escala. Una caída brusca señala cuello de botella, normalmente traducido en factura cloud inesperada a fin de mes.
Tasa de errores
Porcentaje de peticiones que devuelven HTTP 4xx o 5xx. Por encima del 1% en producción ya deberías mover el alert al canal correcto. En pruebas, identifica qué endpoints rompen primero y permite priorizar remediación.
Uso de recursos del servidor
CPU, memoria RAM, I/O de disco y uso de red. Sin estos números sabes que algo falla, pero no dónde. CPU al 100% con memoria libre apunta a código mal escrito; memoria agotada con CPU baja huele a fuga. Sin trazabilidad, hablar con el proveedor cloud es debate de intuiciones caro.
Herramientas para ejecutar pruebas de carga
El ecosistema ha madurado. Estas son las opciones que aparecen una y otra vez.
k6 (Grafana)
Open source, scripts en JavaScript, integración limpia con CI/CD. El código se versiona como cualquier otro. La encuesta State of Testing 2024 de PractiTest cifra en un 35% el crecimiento interanual de adopción. Múltiplo de unicornio para una herramienta de testing.
Apache JMeter
El veterano. Interfaz gráfica y soporte para múltiples protocolos (HTTP, JDBC, SOAP, REST). Curva de aprendizaje mayor, personalización enorme. Sigue dominando el segmento enterprise, donde se firman contratos plurianuales sin pestañear.
Locust
Escrito en Python, define el comportamiento de usuarios simulados como código Python estándar. Encaja en equipos que ya viven en ese lenguaje y necesitan lógica de negocio con cierta profundidad.
Gatling
Basado en Scala, genera informes HTML detallados automáticamente. Funciona muy bien para alta concurrencia desde una sola máquina gracias a su modelo asíncrono basado en Akka.
Cómo diseñar un plan de pruebas realista
La herramienta importa menos que el plan. Una prueba mal diseñada produce datos inservibles o, peor, falsa sensación de seguridad. Equivalente a un cash flow positivo que ignora los impagos de los últimos 45 días.
Paso 1: Define los escenarios de usuario
Identifica los flujos principales: registro, login, búsqueda, compra, carga de dashboards. Asigna peso porcentual a cada uno. Si el 60% de los usuarios consulta el catálogo y solo el 5% completa una compra, la prueba debe respetar esa proporción. Lo contrario es un forecast asumiendo que todos los leads cierran.
Paso 2: Establece los criterios de aceptación
Antes de ejecutar nada, escribe qué resultados consideras aceptables. Por ejemplo:
- Tiempo de respuesta P95 inferior a 2 segundos para todas las páginas.
- Throughput mínimo de 500 peticiones por segundo.
- Tasa de errores inferior al 0,5%.
- Uso de CPU por debajo del 80% en el servidor de aplicaciones.
Sin criterios predefinidos, leer los resultados se convierte en debate de opiniones. Y los debates de opiniones, con dinero encima de la mesa, los gana el que habla más alto.
Paso 3: Prepara un entorno de pruebas representativo
El entorno debe parecerse a producción todo lo posible: misma configuración de servidores, misma versión de base de datos, volumen de datos comparable. Probar contra una base de datos vacía es engañoso: una query que tarda 20 ms con 1.000 registros puede irse a 3 segundos con un millón. Esa diferencia separa una semana tranquila de un sprint de emergencia.
Paso 4: Ejecuta de forma incremental
No lances con la carga máxima. Arranca con un 10% de la carga objetivo, valida métricas base y sube progresivamente. Así identificas el punto exacto donde el rendimiento se dobla.
Paso 5: Analiza, corrige y repite
Cada ronda debería producir un informe con los cuellos de botella detectados. Corriges, vuelves a ejecutar, mides la mejora. Ciclo iterativo, igual que la planificación financiera trimestral.
Errores frecuentes que invalidan las pruebas
Los años de proyectos a medida dejan un patrón claro. Estos cuatro fallos se repiten con insistencia incómoda.
Probar solo el endpoint más rápido. Tentador apuntar a la home porque devuelve en milisegundos. Hay que cubrir los pesados: informes, exportaciones, búsquedas con filtros complejos. Si esos no aguantan, da igual lo bonita que sea la portada.
Ignorar el comportamiento del usuario real. Un humano no dispara 50 peticiones por segundo. Introduce think time entre acciones. Sin esa pausa, la carga sale artificialmente alta y los resultados no se parecen a nada de lo que ocurrirá en real.
No monitorizar la infraestructura durante la prueba. Saber que el tiempo de respuesta sube no aporta mucho si no lo correlacionas con CPU, memoria o conexiones a base de datos. Usa Grafana, Datadog o New Relic en paralelo. Datos sin contexto son ruido caro.
Ejecutar las pruebas desde la misma máquina que el servidor. Compiten por recursos e introducen ruido en los resultados. Siempre que sea posible, lánzalas desde máquinas independientes.
Integrar el testing de rendimiento en el ciclo de desarrollo
El testing no debería caer la semana previa como auditoría sorpresa. Los equipos maduros lo integran en CI/CD desde el primer commit relevante.
Con k6 o Gatling, una batería de pruebas se ejecuta tras cada despliegue en staging. Si los tiempos cruzan los umbrales, el pipeline falla y el despliegue se bloquea. Detectar la regresión ahí cuesta una fracción de arreglarla con clientes encima.
El informe State of DevOps 2024 de Google Cloud (DORA) recoge que los equipos de alto rendimiento tienen 4,8 veces más probabilidades de integrar pruebas de rendimiento automatizadas en sus pipelines que los de bajo rendimiento. Un 4,8x justifica reasignar presupuesto sin pedir tres firmas.
Cuándo pedir ayuda profesional
No todos los proyectos exigen el mismo rigor. Una landing con formulario y una plataforma SaaS con miles de usuarios concurrentes viven en planetas distintos.
Si la aplicación maneja transacciones financieras, datos sensibles o no se puede permitir caídas, conviene un equipo curtido en pruebas de carga, optimización de infraestructura y resolución de cuellos de botella en arquitecturas complejas. Externalizar cuesta una décima parte de aprender en producción.
Solicita una auditoría de rendimiento
Lo que separa un lanzamiento exitoso de un desastre técnico
La diferencia entre un lanzamiento que funciona y uno que se convierte en crisis casi nunca está en el código. Está en la preparación, como la diferencia entre una ronda cerrada y una fallida rara vez está en el deck. El testing de carga y rendimiento no es glamuroso, no luce en una demo, no provoca aplausos. Permite dormir la noche del lanzamiento y mirar el dashboard al día siguiente sin taquicardia.
Cada hora invertida antes de producción ahorra días de emergencia después. Y protege la confianza de quien llega por primera vez. En la web, como en una primera reunión con un inversor, rara vez hay una segunda primera impresión.