Lenguajes de programación en JMeter

lenguajes-title

Recientemente publiqué un artículo en la empresa donde trabajo Flood.io acerca de las funciones nativas de JMeter, sin embargo existen otras funciones extendidas que se pueden obtener si instalamos los complementos de JMeter, estas funciones al igual que las nativas, están escritas en lenguaje de programación Java y aquí puedes consultar el código fuente de ambas:

En teoría, cualquiera de nosotros con el conocimiento apropiado podríamos programar nuestras propias funciones en Java, compilar el código y obtener el archivo de salida jar. Una vez que tengamos el fichero jar, pudiéramos repetir el mismo proceso descrito para instalar los complementos de JMeter y copiar el jar en la carpeta /lib/ext/ y de esta forma artesanal, tendríamos nuestra función disponible en la herramienta. Maravilloso, ¿cierto?

La idea principal no era del todo mala, incluso yo mismo realicé algunos cambios al primer plug in de Websocket de Maciej Zaleski hace muchos años, este método poco ortodoxo no es la única manera de introducir código a la lógica principal. JMeter soporta de manera nativa 4 lenguajes de programación:

beans

Beanshell

Desde sus inicios JMeter integró a su contemporáneo Beanshell como parte de sus atributos, en ese momento era un lenguaje de sintaxis similar a Java, rápido y flexible. En el año 2003 el proyecto fue perdiendo fuerza hasta quedar estancado en su versión estable 1.3, han pasado 16 años desde su última liberación y aunque existieron algunos esfuerzos por retomarlo y rescatarlo, se lograron mejoras mínimas en las versiones beta. Yo no te recomendaría utilizar Beanshell amenos que tengas un script legado de JMeter que no se pudiera migrar a una versión más actual. Aunque yo creo que las razones para no utilizarlo se centran su obsolescencia, aún podemos ver personas que le tiene cierto aprecio y siguen generando utilerías para Beanshell.

javascript

JavaScript

JavaScript o ECMAScript es otro lenguaje de programación interpretado, no es muy popular debido a que Beanshell acaparó gran parte de la atención durante muchos años, pero es bastante completo. Algunos componentes de JMeter lo utilizan por definición como el IF Controller y WHILE Controller para su sentencia de evaluación, contrario a lo que pudiéramos pensar, este lenguaje no es de los predilectos, inclusive es raro encontrar ejemplos de JavaScript con JMeter en la nube.

jexl

JEXL

JEXL es un lenguaje de expresión simple que está basado en el proyecto de Apache Velocity, aunado a las definiciones de JSTL 1.1 y JSP 2. Básicamente es un pequeño y poderoso motor que evalúa sentencias, en lo personal yo lo utilizó mucho para evaluar umbrales y dividir las cargas de trabajo de los flujos críticos en los scripts, prefiero utilizar JEXL en conjunto con IF Controllers en lugar de utilizar Throughput Controller, porque en volúmenes grandes de carga se pueden consumir muchos recursos para mantener las proporciones de carga designadas, en pocas palabras a gran escala es más eficiente la primera solución.

groovy

Groovy

Es fácil entender la popularidad de Groovy con tan solo con ver el gran número de empresas que lo utilizan. Irónicamente la primera liberación fue en el año 2003, cuando Beanshell liberó su última versión estable, desde entonces Groovy ha crecido y se ha consolidado como una solución confiable, basta con puntualizar algunas de su principales atributos:

  • Es un lenguaje de programación orientado a objetos
  • Compila directamente a Bytecode, tan rápido como el código Java
  • Se puede utilizar la funcionalidad de "caching"
  • Tiene mejoras y actualizaciones periódicamente

No podríamos comparar Groovy con Javascript o Beanshell, simplemente porque no hay punto de comparación. Las funcionalidades, rapidez y comunidad de Groovy son realmente abrumadoras, no te recomendaría utilizar otro lenguaje de programación en JMeter que no fuera Groovy, planeo en una futura publicación hacer un comparativo de eficiencia y rapidez, para que les quede más claro las ventajas de Groovy al momento de optimizar los recursos.

-Antonio