Herramientas open source de pruebas de performance

Esta es la segunda parte de este post, donde contamos sobre otros proyectos open source en que Abstracta ha estado colaborando. En este artículo te compartimos los proyectos (herramientas y utilitarios) open source de pruebas de performance que están disponibles para que uses o colabores, que venimos trabajando hace tiempo. Verás que en algunos casos son contribuciones a herramientas existentes, y en otros casos son herramientas y utilitarios que hemos construido de cero.

Taurus

Taurus es una herramienta de código abierto “automation-friendly” que simplifica la ejecución y definición de pruebas funcionales y de performance. Además, permite ejecutar pruebas desarrolladas con JMeter, Gatling, Locust.io, Grinder, Selenium WebDriver y otras.

Nuestra contribución aquí principalmente consistió en implementar los comandos de Selenium en el lenguaje declarativo de Taurus así como la gestión de variables, ejecución local y remota. Con esta mejora, ahora es posible automatizar una prueba funcional tan solo utilizando comandos de Taurus.

Wiresham

Wiresham es una herramienta sencilla de simulación de servicios TCP para reproducir la captura de tráfico de la red como se haría con tcpdump o Wireshark.

Esta herramienta es particularmente útil para implementar pruebas de integración sin mediar conexiones inestables, configuraciones o restricciones complejas del entorno, siéndonos de gran utilidad en la implementación de plugins the JMeter.

Desarrollamos Wiresham inspirándonos en otras herramientas como WireMock, mountebank y MockTCPServer, pero proporcionando características que son faltantes o parcialmente soportadas en las mismas como:

  • Soporte de simulación de TCP para mensajes asíncronos, es decir, que se pueden configurar para enviar mensajes desde el servicio simulado sin tener que esperar un pedido desde el cliente (como mensajes de bienvenida al conectarse al servicio).
  • Simular un servicio a partir de archivos de volcado tcpdump (.pcap) o Wireshark (.json), permitiendo además convertirlos a un formato .yaml reducido para facilitar la lectura, modificación y control de versiones.
  • Permite fácilmente ejecutar un servicio emulado embebido en pruebas desarrolladas en Java.

ScriptGenerator

ScriptGenerator apunta a simplificar la forma en que creamos scripts en JMeter. 

Hay muchas formas de crear scripts de JMeter y encontramos una que creemos que es interesante, en la cual solo con un archivo .saz generado por Fiddler o cualquier herramienta de rastreo, ScriptGenerator puede crear un archivo .jmx con las peticiones identificadas en el .saz.

La solución se compone de dos herramientas auxiliares: Fiddler Session Comparer y Generator Framework.

Fiddler Session Comparer (FSC)

Define una estructura tipo “árbol” basada en las “sesiones de Fiddler” y la usa como solicitudes para el script de prueba generado. 

Como sabemos, cuando solicitamos una página html, luego se solicitan algunos recursos (imágenes, css, js) que están referenciados en el html. Entonces, diríamos que la primera solicitud HTTP es la petición principal, y las otras secundarias, que corresponden a recursos adicionales como imágenes, js, css, etc. Aplicando este criterio obtenemos una vista de árbol para las solicitudes HTTP.

Generator Framework

Es una herramienta simple de línea de comandos de Windows (y GUI) que usa sesiones de Fiddler para crear scripts de JMeter. 

Para su uso, se debe grabar las sesiones con Fiddler y mientras esto sucede, cada paso queda marcado con un comentario.

Performance Test Scripts

Performance Test Scripts es un proyecto que reúne shell scripts para realizar tareas de pre y post ejecución que apoyan al proceso del testing de performance, por ejemplo: iniciar o finalizar herramientas de monitoreo, obtener logs, organizarlos en carpetas y más.

Plugins de JMeter

JMeter es probablemente la herramienta open source de pruebas de performance más popular. Está basada en Java, diseñada para crear y ejecutar pruebas de carga y evaluar la performance del sistema bajo test. Hay una cantidad considerable de complementos disponibles para instalar a través del plugin manager, los cuales extienden significativamente las funcionalidades y protocolos soportados nativamente por JMeter.

Hemos estado participando en el desarrollo de plugins y extensión de librerías existentes, usadas por los mismos, en colaboración con Blazemeter. A continuación se listan los principales proyectos que desarrollamos y contribuimos:

Plugin RTE 

Este proyecto implementa un plugin en JMeter para admitir protocolos RTE (Remote Terminal Emulation), proporcionando un recorder para la creación automática de planes de prueba, además de elementos para la configuración y muestreo de interacciones de protocolo.

Además de desarrollar este plugin, contribuimos en la extensión y mejora de librerías que fueron requeridas para el soporte de los diferentes protocolos que hemos ido agregando al mismo. A continuación se listan las mismas y nuestras contribuciones: 

Emulador xtn5250

xtn5250 es un emulador de terminales TN5250. Este proyecto lo creamos a partir del proyecto original agregando una API centralizada y simplificada para la interacción con terminales TN5250 de manera programática, además de nuevas funcionalidades que facilitan su uso.

Emulador dm3270

La librería dm370-lib es una versión reducida del dm3270 que se utiliza como biblioteca cliente del TN3270.

En particular, elimina todas las referencias a JavaFX (que no son necesarias para usar el código como librería y que adicionalmente no se incluye por defecto en algunas distribuciones de OpenJDK) manteniendo sólo la lógica para una interacción simple con la consola. Además, incluye una refactorización básica para simplificar el código y su uso, en conjunto con mejoras del soporte del protocolo TN3270 y mejor manejo de concurrencia (multi-threading).

Emulador jVT220

Como en los casos anteriores, la librería jVT220 surge de extender el código original simplificando su uso y haciéndolo apto como librería de desarrollo para interacción con el protocolo. En este caso, extendimos la librería para permitir conectarse a un servidor mediante telnet (el proyecto original solo permite parsear respuestas y no contiene lógica alguna para establecer conexiones) y una API similar a los casos anteriores que simplifica y unifica el uso de la misma.

Sampler HTTP2 

Este plugin proporciona un sampler HTTP2 y un árbol de resultados personalizado para trabajar con el protocolo HTTP/2. Este es actualmente el plugin más descargado de los que hemos desarrollado, y en el cual recibimos más contribuciones de la comunidad para mejorarlo y mantenerlo. 

Plugin Correlation Recorder 

Este plugin es la generalización y evolución del plugin anteriormente desarrollado para Siebel CRM.  El mismo permite definir un conjunto de reglas de correlación a usar al momento de grabar scripts de aplicaciones, que hacen uso en requests de información anteriormente obtenida en una respuesta de la aplicación. Un típico caso de esto son aplicaciones como Siebel CRM, que de otra manera requerirían modificar manualmente el script luego de grabarlo, lo cual es un proceso sumamente tedioso. 

El plugin se basa en el ya existente HTTP(S) Test Script Recorder, pero lo extiende permitiendo definir reglas de correlación que consisten principalmente en expresiones regulares que definen qué elementos de las respuestas deben extraerse y dónde deben ser reemplazados en los pedidos para que los mismos queden adecuadamente parametrizados y no fallen al reproducir el test grabado (debido a valores que deben cambiar en cada ejecución del test plan). El plugin evalúa todas las expresiones regulares con cada resultado de muestra y, en caso de que la expresión regular coincida, agrega un extractor de expresiones regulares como elemento secundario del sampler. Adicionalmente, aplica las expresiones regulares definidas sobre los pedidos y, si hay alguna coincidencia, reemplaza y parametriza con el nombre de referencia (variable de JMeter) correspondiente.

Este plugin es altamente configurable y fue desarrollado de una manera extensible, promoviendo la contribución por parte de la comunidad de reglas de correlación para diferentes aplicaciones. Con esto se busca fomentar la colaboración y facilitar la automatización de todo tipo de aplicaciones HTTP que requieren dichas parametrizaciones.

Plugin HLS

El protocolo HLS proporciona un medio confiable y rentable para entregar video continuo y de larga duración a través de Internet. Permite que un receptor adapte la tasa de bits de los medios a las condiciones actuales de la red, con el fin de mantener la reproducción ininterrumpida con la mejor calidad posible.

Este plugin, permite de una manera sencilla generar carga y medir la performance de servicios de streaming HLS. Adicionalmente, agregamos en su última versión soporte para consumir streaming MPEG-DASH, brindando un un espectro más amplio de protocolos soportados.

Actualmente, el proyecto utiliza las bibliotecas HLSParserJ para analizar las listas de reproducción de HLS y una bifurcación de MPD-Tools para el manifiesto y los segmentos de MPEG-DASH, a las cuales hemos contribuido para su mejora o modificado para poder usarla con JMeter.

Plugin Citrix

Este plugin permite grabar y automatizar pruebas funcionales y de performance de aplicaciones usando la plataforma de Citrix. Estamos actualmente a cargo del mantenimiento del plugin, contribuyendo mejoras de estabilidad, escalabilidad, implementando nuevas funcionalidades, mejorando las existentes y brindando soporte a sus usuarios.

JMeter Java DSL 

Es una API simple en Java para ejecutar pruebas de performance utilizando JMeter como motor, con un formato amigable para VCS (sistema de control de versiones) y programadores.

La librería intenta brindar lo mejor de herramientas open source de pruebas de performance como JMeter, Gatling, Taurus y se acerca mucho a ruby-dsl pero proporcionando una API java simple para ejecutar pruebas de JMeter. Así se logra aprovechar todos los beneficios y conocimientos de JMeter, así como también muchos de los beneficios de Gatling Scripting. Además, brinda un simple uso con pruebas JUnit, simple modularización de código y fácil integración en cualquier modelo de CI/CD. Como agregado a todo lo demás, facilita el debugging (mediante el uso de las ya existentes funcionalidades de debugging de los IDEs) y la ejecución de planes de prueba JMeter en cualquier IDE Java.

Conclusiones

A lo largo de este tiempo, Abstracta ha apostado por proyectos open source de pruebas de performance que han demostrado ser muy útiles para la comunidad.

Colaborar con herramientas de código abierto es una gran oportunidad para aprender y reforzar conocimientos, desarrollar ideas, entrelazar proyectos con otros socios e incluso facilitar nuestro trabajo futuro con nuevas tecnologías a medida.

Si de alguna manera tenés formas de colaborar en alguna comunidad, así sea con la documentación de algún producto, ¡te animamos a que lo hagas!

One thought on “Herramientas open source de pruebas de performance

  1. Ivan says:

    Buen aporte .. gracias por la información.

Leave a Reply

Your email address will not be published. Required fields are marked *