02/19/2021

Descubre las mejores herramientas para tus pruebas de rendimiento

COMPARTIR EN:

  • Linkedin Logo
  • Twitter Logo
  • Facebook Logo
  • Mail Logo

Las pruebas de rendimiento requieren del uso de herramientas específicas para poder abordarlas de manera profesional y obtener los mejores resultados.

Resulta importante comprender en qué parte del proceso una herramienta puede aportar valor. Para esto se presenta el siguiente diagrama donde se mapean los distintos tipos de herramientas involucradas en las distintas fases del proceso.

Diagrama stack de herramientas para pruebas de rendimiento

Planificación de las pruebas

Durante la planificación de las pruebas es importante determinar los flujos críticos de la aplicación, los tipos de usuarios que interactúan y la carga que será simulada. Para esto es necesario interactuar con los responsables del proyecto y otros actores involucrados. Sin embargo y de manera complementaria, en la mayoría de las organizaciones ya existen aplicaciones funcionando que pueden brindar valiosa información para dimensionar los escenarios de carga.

Esta información se puede obtener de algún tipo de registro de datos, ya sea a nivel de logs de la aplicación o servicios de recolección de información de uso de la aplicación.

Se destacan dos herramientas o formas de acceder a esta información; la primera a través de servicios como Google Analytics y la segunda mediante el análisis de los logs de acceso HTTP de las aplicaciones Web.

Google Analytics

Es un servicio que captura información del tráfico sobre un sitio web y la actividad de los usuarios, como la duración de las sesiones, las páginas más visitadas y las acciones más frecuentes. Este servicio ya debe estar implementado en la aplicación para poder acceder a los datos. En base a esta información, se pueden elaborar pruebas más específicas y representativas de la demanda real de la aplicación y la actividad de los usuarios.

Http Logs Viewer

Permite filtrar y analizar de manera simple los archivos de logs de servidores Apache, IIS y Nginx. La herramienta brinda estadísticas con información sobre las consultas más ejecutadas, entre otras.

WebLog Expert

Permite procesar archivos de log y obtener estadísticas sobre la actividad de los usuarios en la aplicación, como por ejemplo, los archivos y pantallas que accedieron, las rutas que siguieron y browser que utilizaron, entre otros datos que se presentan gráficamente en el reporte generado.

Para utilizar estas herramientas es necesario solicitar los archivos de logs de acceso al administrador de la aplicación y saber a qué periodo de tiempo corresponden. Es importante entender que la información disponible puede variar y dependerá de la configuración de cada servidor.

Diseño y codificación de las pruebas

Las pruebas de rendimiento comúnmente se realizan a partir de la simulación de diferentes escenarios de carga sobre la aplicación. Esto se consigue generando tráfico HTTP a través de scripts que ejecutan los flujos de manera automática, simulando la utilización de la aplicación por un volumen determinado de usuarios.

Existen muchas herramientas que facilitan la codificación de las pruebas de rendimiento, entre las herramientas libres más populares se destacan Apache JMeter, Gatling y Taurus.

JMeter

Es probablemente la herramienta más utilizada en el mundo para pruebas de rendimiento. Se encuentra desarrollada en Java y es de uso libre. Al comenzar a utilizarla cuenta con la función de grabación de scripts, de manera de poder iniciar la codificación de manera rápida.

Las pruebas en JMeter se definen a través de una estructura visual de árbol de elementos, lo que facilita el entendimiento del flujo de prueba.

Gatling

Es una herramienta basada en Scala, Akka y Netty. Se diferencia de las demás herramientas por su enfoque orientado a codificar las pruebas a través de un lenguaje específico de baja complejidad (DSL). Al igual que JMeter, cuenta con una función de grabación de scripts para iniciar la codificación.

Taurus

Es un framework de automatización con la particularidad de que las pruebas se definen mediante YAML, lo cual facilita la automatización, obteniendo como resultado scripts fácilmente legibles. Esta herramienta tiene un enfoque de integración en procesos de desarrollo continuo y brinda la posibilidad de ser integrada con otras herramientas.

Muchas veces el proceso de diseño y codificación de las pruebas requiere de herramientas de apoyo para comprender el tráfico entre el servidor de aplicaciones y el navegador. Este tipo de herramientas de tipo proxy permiten visualizar dicho tráfico y ayudan en el proceso de correlación de los scripts de prueba.

OWASP Zap

Es un proxy gratuito y libre que permite interceptar el tráfico HTTP desde un navegador. De esta manera se pueden grabar distintas sesiones del flujo de pruebas y utilizarlo como apoyo en las actividades de correlación.

Fiddler

Es otra opción de proxy con la cual es posible capturar los pedidos y respuestas.

Ejecución de las pruebas

La ejecución de las pruebas de rendimiento consiste en poner a funcionar los scripts codificados anteriormente, indicando la carga de usuarios a simular, entre otras configuraciones.

Las herramientas JMeter, Gatling y Taurus además de su capacidad para el diseño y codificación de las pruebas, cuentan con la capacidad para poder ejecutarlas.

Adicionalmente, existen algunas herramientas que facilitan la ejecución brindando máquinas generadoras de carga para poder escalar más fácilmente a la hora de simular grandes volúmenes de usuarios. En particular se destaca el servicio brindado por BlazeMeter.

Blazemeter

Brinda un servicio de pruebas de carga y reportes muy completo. Permite ejecuciones con grandes volúmenes de usuarios virtuales utilizando máquinas generadoras de carga en la nube. Esto es una muy buena alternativa cuando se requiere simular un gran volumen de usuarios simultáneos y los recursos de nuestras máquinas generadoras de carga no son suficientes.

Monitoreo

En paralelo a la ejecución de las pruebas de rendimiento, es importante realizar un monitoreo en tiempo real de los diferentes recursos involucrados en la aplicación.

Además de los tiempos de respuesta de la aplicación, que es un dato obtenido desde las herramientas de ejecución, es necesario medir el consumo de recursos de los distintos componentes, principalmente servidores de aplicaciones, bases de datos y enlaces. Los recursos típicamente monitoreados son la memoria de los servidores, uso de CPU, entrada/salida de datos en la red y lectura/escritura en disco.

Esta tarea no es sencilla y se recomienda el apoyo de especialistas en cada plataforma. Sin embargo es importante contar con algunas herramientas por si debemos llevar a cabo nosotros mismos esta tarea.

Existen herramientas que resuelven puntualmente el monitoreo y funcionan a nivel del sistema operativo, entre ellas Perfmon para Windows y Nmon para Linux.

Perfmon (Performance Monitor)

Es una herramienta nativa del sistema operativo Windows. Presenta una interfaz gráfica donde se muestra el comportamiento en tiempo real de cada indicador que es seleccionado. Brinda la posibilidad de configurar la recolección de distintos indicadores en un periodo de tiempo, para su posterior análisis.

Nmon

Es una herramienta análoga para sistemas operativos basados en Linux. Mediante su ejecución por línea de comando, permite ver indicadores en tiempo real a través de gráficos que se despliegan en la misma consola.

Además del modo interactivo, permite grabar en un archivo la información del monitoreo para su posterior análisis.

Otras herramientas del tipo APM también sirven para este propósito y están enfocadas en un control integral de la aplicación, controlando los distintos componentes de la arquitectura. Asimismo estas herramientas son ideales para mantener un monitoreo continuo de la aplicación cuando se encuentra operativa.

Existen muchas herramientas del tipo APM, algunas de ellas con licenciamiento y otras libres. Aquí se mencionan algunas de las más utilizadas:

  • Dynatrace
  • New Relic
  • Datadog
  • AppDynamics
  • Apache SkyWalking

Análisis de resultados

Una vez finalizada la ejecución de las pruebas, se habrá generado un volumen importante de información a analizar para comprender cuáles fueron los resultados. Esta información proviene de distintas herramientas con distintos niveles de detalle.

Desde las herramientas de ejecución de las pruebas la típica información que se obtiene es sobre los tiempos de respuesta y la concurrencia real generada. También permiten generar informes de manera centralizada y en algunos casos a través de reportes con gráficas para poder interpretar mejor los resultados obtenidos.

A través del monitoreo de los recursos también se obtiene información valiosa y en general es un volumen importante para procesar. Herramientas como Perfmon en Windows cuenta con capacidades de reporte de los datos recolectados. En cambio Nmon cuenta con un complemento llamado Nmon Analyzer que permite obtener un resumen y gráficas en Excel.

Adicionalmente, cuando existen problemas de rendimiento o se observa un alto consumo de alguno de los recursos involucrados, se debe iniciar un análisis en profundidad.

Para este tipo de análisis existen técnicas y herramientas específicas para cada plataforma, entre ellas se encuentran los denominados “Profilers”. Este tipo de herramientas permiten observar la cadena de llamados de una aplicación, el uso de memoria y CPU de cada componente de la cadena, con el objetivo de detectar el eslabón que está generando el problema.

Existen distintas herramientas del tipo profiler, como por ejemplo JProfiler, Java VisualVM, dotTrace, entre otras.

En ocasiones existe la necesidad de incorporar alguna herramienta adicional, como por ejemplo para analizar el uso de memoria de una aplicación cuando existen sospechas de un leak de memoria. Este tipo de herramientas necesitan para funcionar  lo que se conoce como una bajada de la información en un determinado momento, lo que llamamos un “dump” de memoria. Estos “dumps” se analizan de forma automática por herramientas que brindan un reporte de lo detectado a bajo nivel, en el caso de la memoria de aplicaciones Java una herramienta adecuada es Eclipse Memory Analyzer.

Resumen

En resumen, las pruebas de rendimiento requieren del manejo de un importante stack de herramientas, para poder planificar las pruebas, diseñar y codificar los scripts, ejecutar los escenarios de prueba, monitorear los recursos de la aplicación y analizar los resultados obtenidos.

Existe un sinnúmero de herramientas con distintas características y modelos de licenciamiento, es importante entender primero el objetivo de las pruebas de rendimiento y el resultado que se desea obtener, para poder identificar cuales son las herramientas que realmente aportarán valor en este camino.