
¿Alguna vez te has encontrado en un proyecto que carece por completo de pruebas de rendimiento? Es un desafío común y, aunque puede parecer abrumador, establecer una estrategia sólida es el primer paso hacia la mejora del rendimiento. En este artículo, exploraremos cómo abordar esta situación y comenzar a implementar pruebas de rendimiento de manera efectiva en tus proyectos.
Definir una Estrategia de pruebas de performance:
El primer paso crucial es definir una estrategia clara para las pruebas de performance. Esto implica identificar los objetivos de performance, las métricas clave que deben monitorearse y los escenarios de carga relevantes. Al establecer metas alcanzables y medibles, puedes orientar tus esfuerzos hacia la optimización del rendimiento de manera efectiva.
Una estrategia de performance que recomiendo como punto de partida es la Pirámide de Pruebas de Performance descrita por Federico Toledo en el blog de Abstracta.
El Modelo de la Pirámide de Pruebas de Performance ofrece una guía bastante completa de como podemos afrontar las pruebas de performance en un proyecto. Este modelo consta de cuatro niveles: pruebas de performance unitarias, pruebas de performance de integración, pruebas E2E y pruebas de performance del lado del cliente:

Las pruebas unitarias, ubicadas en la base de la pirámide, son las más económicas, fáciles de mantener y las que nos proveen feedback más rápido, pero no son concluyentes sobre la experiencia del usuario. A medida que ascendemos en los niveles de la pirámide, las pruebas de performance proporcionan resultados más precisos desde el punto de vista del usuario, pero son más costosas y complejas de preparar. Por lo que este modelo sugiere implementar una mayor cantidad de las pruebas menos costosas (unitarias e integración) y menos pruebas E2E y del lado del cliente para equilibrar el costo vs beneficio de los diferentes niveles de pruebas de performance.
Como se explica en el artículo: Si la automatización de las pruebas de performance no está correctamente diseñada y organizada, puede terminar siendo contraproducente ya que el costo de mantenimiento podría superar el beneficio de tener estas pruebas.
Dentro de las pruebas E2E de performance también me gustaría resaltar que este nivel es donde más sentido tendría implementar los diferentes tipos de pruebas de performance como:
- Stress: Determina cómo se comportará el sistema bajo condiciones extremas.
- Spike: Determina cómo se desempeñará el sistema bajo un repentino aumento de tráfico.
- Load: Determina cómo se comportará el sistema bajo condiciones de carga esperadas.
- Soak: Evalua la estabilidad y el rendimiento del sistema durante un período prolongado bajo carga sostenida.
En cuanto a la frecuencia de ejecución de las pruebas de cada nivel de la pirámide es recomendable ejecutar las pruebas unitarias y de integración en los pipelines de CI/CD o también una vez al día.
Ejemplo:
- Ejecutar los smoke tests de pruebas de performance unitarias y de integración por cada “pull request” de los desarrolladores.
- Ejecutar la regresión completa de pruebas de performance unitarias y de integración una vez al día.
- Las pruebas E2E y del lado del cliente se ejecutarían a demanda debido a por ejemplo: un cambio crítico que pudiera impactar la performance o también se pudieran ejecutar una vez por Sprint.
Explorando Herramientas Disponibles:
Con una estrategia definida, es importante seleccionar las herramientas adecuadas para llevar a cabo las pruebas de rendimiento. Existen numerosas herramientas disponibles en el mercado, desde opciones de código abierto como JMeter y Gatling hasta soluciones comerciales más avanzadas. Evalúa tus necesidades específicas y elige la herramienta que mejor se adapte a tu proyecto y equipo.
Algunas de las características principales a considerar al seleccionar una herramienta de performance para satisfacer el modelo de pirámide de pruebas de performance son:
- Soporte de tecnologías: La facilidad de integración con las tecnologías que usemos en nuestros proyectos es sumamente importante, ya que esto nos permite reutilizar código, pipelines e infraestructura.
- Developer friendly: La herramienta debería facilitar también la implementación de los scripts de performance en las capas de Unidad e Integración.
- Comunidad y soporte: Comunidad de usuarios activa, documentación disponible y opciones de soporte técnico para ayudar con la resolución de problemas y el aprendizaje.
Algunas de las herramientas con las he tenido la oportunidad de trabajar y que recomiendo para llevar a cabo la implementación de los tests en cada uno de los niveles de la pirámide son: k6, NBomber y Gatling.
k6: Es una de las mejores opciones para implementar pruebas de rendimiento en todas las capas de la pirámide. Es fácil de usar, el lenguaje de programación es JavaScript y su API se muy intuitiva y sencilla. La documentación es muy clara y la comunidad cada vez es más grande.
NBomber: Muy recomendada sobre todo para tecnologías .Net ya que su lenguage de programación es C#.
Gatling: Excelente opción también para los amantes de scala.
JMeter: Aunque JMeter es las herramienta de performance más popular y usada, para el caso de la pirámide de performance sería recomendable usarla junto a otra herramienta, ya que JMeter esta diseñada principalmente para los tests E2E. JMeter guarda los scripts de pruebas automatizadas en XMLs pero como son creados via UI, sea hace difícil manajar los cambios de estos XMLs en el control de versiones cuando hacemos las revisiones de las pull request de los QA Automation. Además también lleva un esfuerzo extra de aprendizaje por parte de los desarrolladores si las queremos usar para los tests unitarios y de integración.
Otro aspecto que no podemos olvidar son las Herramientas de monitoreo de performance. Durante la ejecución de pruebas de performace, es importante medir el consumo de recursos del servidor, como el uso de CPU y memoria.
Para estas métricas, se recomienda utilizar herramientas como Datadog, AppDynamics, New Relic, entre otras. Estas herramientas permiten configurar alertas para notificar posibles problemas de rendimiento en el servidor mientras se ejecutan las pruebas de rendimiento.
¿Cómo implementar la estrategia de la pirámide de automatización de pruebas de performance en nuestras actividades diarias del sprint?
Una vez que tengas una estrategia y herramientas en su lugar, es hora de dar los primeros pasos hacia la implementación de pruebas de rendimiento en tus tareas diarias. Integra las pruebas de rendimiento en el ciclo de vida de desarrollo del software, asegurándote de que sean parte integral de las revisiones de código, las integraciones continuas y las entregas continuas.
Teniendo en cuenta que partirmos de un proyecto que no tiene pruebas de performance, un enfoque recomendado sería comenzar analizando las funcionalidades más críticas en términos de performance para definir escenarios de pruebas de performance E2E, integración y unitarias que cubran estas funcionalidades.
Como siguiente paso, una vez que hayamos establecido un conjunto básico de pruebas de performance, podemos incorporar las pruebas de performance en “Definition of Done”. En la fase inicial, podemos incluir en el “Definition of Done”, el análisis (realizado tanto por QA como por Dev) de las historias de usuario para determinar si se necesitan pruebas de rendimiento (unidad, integración, E2E). Algunos criterios que podemos seguir para el análisis son la criticidad de la funcionalidad, su uso e implementación. Si una prueba de rendimiento es necesaria, debería ser implementada como parte del “Definition of Done”.
Resumiendo:
Iniciar con las pruebas de performance en un proyecto que carece de ellas puede resultar abrumador al principio, sin embargo, con una estrategia definida, la selección adecuada de herramientas y un enfoque gradual, es posible mejorar el rendimiento de la aplicación de manera efectiva.
Recomendaciones:
- Estrategia para pruebas de performance: Modelo de la Pirámide de Pruebas de Performance
- Herramientas: k6, NBomber, Gatling
- Enfoque gradual: Comenzar aplicando la pirámide de performance en las funcionalidades críticas, luego iterar y desarrollar una suite de pruebas automatizadas de performance que se ajuste progresivamente a medida que avanza el proyecto.
No subestimes el valor de las pruebas de rendimiento para optimizar tanto el rendimiento como la experiencia del usuario. ¡Es el camino hacia una aplicación más robusta y satisfactoria para tus usuarios!