Sobre escritura de parámetros en JMeter

parametros-title

En una de las publicaciones anteriores tocamos el tema de la anulación de parametros, fue en la parte final de la publicación acerca de como guardar los resultados en formato CSV o XML del archivo JTL. Les coloco nuevamente los parámetros y el ejemplo:

Parametros:

       -Jjmeter.save.saveservice.output_format=xml
        -Jjmeter.save.saveservice.response_data=true

Ejecución en línea de comandos:

       jmeter.sh  -n -t script.jmx -l resultados.jtl -j bitacora.log -Jjmeter.save.saveservice.output_format=xml -Jjmeter.save.saveservice.response_data=true

¿Qué son estos parámetros?

Bueno, en realidad no son parámetros, son propiedades. JMeter cuenta con dos tipos de variables, así como cualquier lenguaje de programación. Las variables locales simplemente las llamamos variables, pero a las variables globales las llamamos propiedades. Aquí puedes ver la definición en el manual del usuario de JMeter.

¿Cual es el alcance de una variable?

El ejemplo más sencilo para explicar una variable es la correlación, las correlaciones utilizan variables locales debido a que estas normalmente se consumen localmente dentro de un Thread Group o Grupo de Hilos y después son reemplazadas por otro valor o destruidas. Las variables también se pueden definir inicialmente utilizando la sección para ello en el test plan o utilizando un elemento de configuración user defined variables, de esta forma las variables podrían tener un alcance para más de un grupo de hilos, pero no es lo recomendable. Las variables se acceden por medio de ${Nombredela_Variable}, si la variable no está definidad y se intenta acceder a ella, esta retornara un valor nulo.

¿Cual es el alcance de una propiedad?

Las propiedades son definidas en tres archivos distintos system.properties, jmeter.properties y user.properties. El único archivo que deberíamos poder modificar es el tercero user.properties, porque si modificamos alguno de los dos anteriores de manera incorrecta, corremos el riesgo de alterar seriamente el comportamiento de la herramienta. Si deseamos asignar un valor a una propiedad inicialmente, lo podemos hacer el archivo user.properties. Contamos con una amplia gama de valores que podemos cambiar y para ello podemos volver a revisar la guia del usuario en la sección de propiedades.

Como ya lo habíamos mencionado anteriormente, las propiedades son de alcance global y todos los grupos de hilos contenidos dentro del test plan pueden acceder a su valor, por lo que las propiedades son un excelente medio de inter comunicación entre diferentes grupos de hilos. Para acceder al valor de las propiedades podemos utilizar la función __P de la siguiente manera ${_P(NombredelaPropiedad)}.

Ejemplo

En el siguiente ejemplo vamos a parametrizar el número de hilos, el tiempo de rampa y la duración total de la prueba. Este mismo ejemplo lo puedes encontrar en inglés en el sitio de Flood.io. Vamos a substituir el valor de hilos en el grupo de hilos por ${__P(threads,1)}, el valor de la rampa por ${__P(rampup,1)} y por último el valor de la duración por ${__P(duration,60)}.

El resultado será que si el valor de threads no está definido, se le asignará el valor de 1. Lo cual es muy conveniente al momento de depurar o ejecutar localmente, de igual forma para la rampa. La duración si no está definida la propiedad se le asignará el valor de 60, por lo que la prueba se ejecutará por 60 segundos.

parametros-ejemplo

Para poder sacarle jugo a este ejemplo de parametrización, podemos ejecutar la prueba:

./jmeter.sh -n -t Script.jmx -l Script.jtl -Jthreads=10 -Jrampup=10 -Jduration=90
 ./jmeter.sh -n -t Script.jmx -l Script.jtl -Jthreads=20 -Jrampup=40 -Jduration=120
 ./jmeter.sh -n -t Script.jmx -l Script.jtl -Jthreads=50 -Jrampup=50 -Jduration=60

parametros-cli

Conclusión

Las variables y propiedades son de extrema utilidad y pueden ayudarnos a resolver lógica compleja en nuestras pruebas, te recomiendo que juegues un poco con los valores de las variables y propiedades por medio de las funciones vars.get, vars.put, props.get y props.put utilizando los muestreadores, pre-procesadores y post-procesadores en lenguaje Groovy.

-Antonio