JMeter. Uso de funciones.

0
21768

JMETER Y EL USO DE FUNCIONES    

    En este tutorial nos disponemos a ver el uso
general de funciones de la
herramienta JMeter
. Veremos una breve descripción del uso
general de las mismas, así como una descripción
más detallada de cada una de ellas, y los argumentos que estas
pueden manejar.

1. FUNCIONES Y USO GENERAL

    Las funciones de JMeter, son básicamente
valores especiales que pueden sustituir o complementar el contenido de
cualquier elemento que se encuentre en el árbol de componentes
de un test de dicha herramienta.

    Las funciones tienen un patrón
genérico de la forma:

    ${__functionName(var1,var2,var3)}

    Las funciones comienzan con el simbolo $, mismo simbolo con el que
comienzan las variables de nuestro test, y para hacer distinción
de las mismas el nombre de las funciones comienza siempre con el
símbolo “__”.
A continuación “fuctionName
corresponde con el nombre de la función en cuestión,
seguido de los argumentos de nuestra función delimitados por
paréntesis. En caso de que nuestra función no contenga
argumento alguno, se pueden suprimir dichos paréntesis.

    Debemos tener en cuenta que en la herramienta
JMeter, en caso de hacer uso de una función que no esté
definida, el valor de dicha función es su valor literal. Es
decir, por ejemplo si hacemos uso de la función ${__put(var1,var2)} y dicha
función no está definida, el valor de la misma es su
literal es decir, la cadena, “${__put(var1,var2)}”.

    Otro aspecto a tener en cuenta en el uso de
funciones consiste en el carácter
de escape “\”
, es decir, si algún argumento
de nuestra función, contiene el carácter “,”
y queremos que este tenga un significado literal, debemos usar el
carácter “\”, para escapar del mismo. Por ejemplo,
la función ${__functionName(var1,var2)},
contiene dos argumentos (var1 y var2), en cambio la función ${__functionName(var1\,var2)},
contiene un sólo argumento cuyo nombre es literalmente
“var1,var2”.

    Una función puede contener entre sus
parámetros el valor que devuelva otra función o incluso
el valor de una variable. Así pues la función ${__function1(${__function2},${var1})},
de nombre “function1”, contiene como primer argumento el
contenido que devuelva la función “fuction2”, y como
segundo argumento el contenido de la variable “var1”.

2. DIÁLOGO DE AYUDA DE FUNCIÓN

    Una herramienta muy útil para conformar
funciones en la herramienta JMeter, es el diálogo de ayuda de
funciones (Function Helper Dialog).
Dicha utilidad es accesible o bien desde el menu “Opciones-Diálogo de ayuda de
función
”, o mediante el atajo de teclado “ctrl+f”.

    Dicho componente nos ayuda hacer uso de funciones
sin conocer su nomenclatura y los posibles argumentos de la misma, de
forma específica.  Nos basta con conocer el nombre de dicha
función.

    Este componente funciona de manera sencilla.
Seleccionamos la función que queremos componer de un combo:

    A continuación podemos observar dos columnas.
La columna de la izquierda nos ofrece una breve descripción de
cada posible argumento de la función, y la columna derecha es
donde asignamos valor a dicho argumento de la función:

    El último paso es pulsar en el botón “Generar”, el cual
genera la expresión adecuada para hacer uso de dicha
función con sus argumentos correspondientes, para copiarla y
pegarla en el cotenido del parámetro del arbol de JMeter, donde
queramos hacer uso de la misma:

3. FUNCIONES DE JMETER

    A continuación veremos una pequeña
descripción de cada una de las funciones más habituales,
seguida de una tabla que contiene el número de argumento, una
breve descripción del mismo y si dicho argumento es obligatorio
o no.

1.__regexFunction

    Dicha función se utiliza para analizar una
respuesta, usando una expresión regular definida por el usuario.

Argumento

Descripción

Requerido

Primer argumento

El primer argumento representa la expresión regular
usada para buscar resultados en la peticiones previas. Por ejemplo
<input type=»hidden» name=»(.*)» value=»(.*)»>, esto asocia los
valores de la primera expresión regular (.*), a un grupo de
resultados 1, los valores de la segunda expresión a un grupo de
resultados 2.

Si

Segundo argumento

Plantilla para la cadena de sustitución en tiempo de
ejecución, utilizando grupos de la expresión regular. El
formato es $[grupo]$. Ejemplo $1$.

Si

Tercer argumento

Qué coincidencia utilizar. Un entero 1 o mayor, indica
a JMeter que use dicho resultado. RAND para indicar a JMeter que
utilice un número aleatorio, ALL para indicar que todas. Un
float entre 0 y 1 para indicar a JMeter que busque el resultado en
forma cardinal según la formula (número de resultados
encontrados * número float), redondeando al entero más
próximo.

No, por defecto=1

Cuarto argumento

Texto intermedio. Si se selecciona ALL, the texto intermedio
será utilizado para generar los resultados.

No

Quinto argumento

Texto por Defecto. Utilizado en lugar de la plantilla si la
expresión regular no encuentra coincidencias.

No

Sexto argumento

Nombre de la variable donde se almacenan los resultados
devueltos por la función (Opcional para posterior uso de la
función haciendo referencia a este nombre).

No

Séptimo argumento

Nombre de la variable de entrada, si se especifica este
argumento se utiliza el contenido de dicha variable como argumento de
entrada a analizar por la función.

No

2.__counter

    Dicha función genera un nuevo número
entero a partir de su primera llamada. Dicho número se
incrementa de 1 en 1 en cada llamada posterior.

    

Argumento

Descripción

Requerido

Primer argumento

Dicho argumento indica si el contador es independiente para
cada usuario (para cada hilo), o es un contador global para todos los
usuarios. TRUE en caso de que el contador sea para cada usuario, y
FALSE para que sea un contador global.

Si

Segundo argumento

Nombre de la variable donde se almacena el resultado del
contador. Opcional.

No

3.__threadNum

    Esta función simplemente devuelve el
número del hilo que se está ejecutando en ese momento,
dentro de un determinado grupo de hilos. Hemos de tener en cuenta que
si por ejemplo el hilo devuelto por esta función es “tread#1”, este es 
indistinguible con el hilo número 1 de otro grupo de hilos.
Dicha función no contiene argumento alguno.

4.__intSum

    Esta función se utiliza para sumar dos
valores enteros, lo cuales recibe como argumentos.

Argumento

Descripción

Requerido

Primer argumento

El primer valor entero a sumar.

Si

Segundo argumento

Segundo valor entero a sumar.

Si

Tercer argumento

Nombre donde se almacena el resultado de la función.
Opcional.

No

5.__longSum

    Esta función se utiliza para sumar 2
argumentos del tipo long.

Argumento

Descripción

Requerido

Primer argumento

El primer valor long a sumar.

Si

Segundo argumento

Segundo valor long a sumar.

Si

Tercer argumento

Nombre donde se almacena el resultado de la función.
Opcional.

No

6.__StringFromFile

    Esta función se utiliza para leer cadenas de
un archivo de texto.

    Cada vez que llamamos a esta función, lee la
siguiente linea del archivo de texto. Cuando se llega al final del
archivo, se comienza a leer de nuevo desde el principio, a menos que el
recuento del bucle haya llegado al máximo indicado. Si hay
múltiples referencias a la función en un script de
prueba, cada uno de ellos abre el archivo de forma independiente,
incluso si los nombres de los archivos son los mismos.

Argumento

Descripción

Requerido

Primer argumento

Path completo del archivo.

Si

Segundo argumento

Nombre de la variable donde se la función almacena los
resultados para usarlos posteriormente. Opcional. Por defecto se guarda
en la variable de nombre “StringFromFile_”.

No

Tercer argumento

Número inicial de secuencia de archivo. En caso de
sólo indicarse el cuarto argumento, se define como un bucle de
duración lo que indique el cuarto argumento.

No

Cuarto argumento

Número final de secuencia de archivo.

No

    Para comprender mejor el uso del tercer y cuarto
argumento veamos un ejemplo. En caso de utilizar nuestra función
mediante la expresión ${_StringFromFile(PIN#’.’DAT,,1,2)},
se leeran los archivo “pin1.dat
y “pin2.dat”. En
cambio
${_StringFromFile(PIN.DAT,,,2)}
, leerá el archivo pin2.dat, dos veces.

7.__machineName

    Devuelve el nombre de la máquina
local.        

Argumento

Descripción

Requerido

Primer argumento

Nombre de la variable donde la función almacena el
resultado. Opcional.

No

8.__javaScript

    Esta función ejecuta un fragmento de “JavaScript” y devuelve
el valor de retorno de dicho código.

Argumento

Descripción

Requerido

Primer argumento

Expresión JavaScript a evaluar

Si

Segundo argumento

Nombre de la variable donde se la función almacena los
resultados. Opcional.

No

9.__Random

    La función Random devuelve un número aleatorio que se
encuentra entre dos valores que recibe la función como
argumento.

Argumento

Descripción

Requerido

Primer argumento

Número de inicio del rango de valores.

Si

Segundo argumento

Último número del rango de valores. Ha de ser
mayor que el número indicado en el primer argumento.

Si

Tercer argumento

Nombre de la variable donde se la función almacenan los resultados.
Opcional.

No

10.__CVSRead

           
Devuelve una cadena de caracteres, de un archivo CSV leído. Cuando se
encuentra un archivo para leer, el archivo es abierto y se almacena el
contenido del mismo en un array interno. Si se detecta una linea en
blanco, se considera como final del archivo. Todas las lecturas sobre
el mismo archivo, se almacenan en el mismo array interno.
            El
*ALIAS” de un
archivo permite que un archivo sea abierto más de una vez, y
aparte referirnos a ciertos archivos con nombres más cortos.

Argumento

Descripción

Requerido

Primer argumento

El archivo CSV, o el *ALIAS del mismo, a leer.

Si

Segundo argumento

El número de columna a leer del archivo. 0 es la
primera columna y así sucesivamente. “next” lee la
siguiente linea del archivo.

Si

11.__property

    Devuelve el valor
de la propiedad
de JMeter que se indique como argumento. Si el
valor de la función no se encuentra, y no se establece valor de
retorno por defecto, se devuelve el nombre de la función.

Argumento

Descripción

Requerido

Primer argumento

El nombre de la propiedad a evaluar.

Si

Segundo argumento

Nombre de la variable donde se almacena dicho resultado. Este
nombre se devuelve en caso de que no se especifique valor de retorno
por defecto y no se encuentre la propiedad en concreto.

No

Tercer argumento

El valor por defecto a devolver en caso de no encontrar la
propiedad a buscar.

No

12.__P

           
Similar a la función __property, pero no permite especificar
nombre donde se almacena el resultado de evaluar la propiedad, solo
permite especificar un valor por defecto a devolver en caso de que no
se pueda evaluar la propiedad.

Argumento

Descripción

Requerido

Primer argumento

El nombre de la propiedad cuyo valor a devolver.

Si

Segundo argumento

El valor por defecto a devolver en caso de no encontrar la
propiedad a buscar. Si este argumento no se especifica y no se
encuentra la propiedad, se devuelve “1” por defecto.

No

13.__log

    Dicha función registra un mensaje, y devuelve
su cadena de entrada.

Argumento

Descripción

Requerido

Primer argumento

Mensaje a registrar y devolver.

Si

Segundo argumento

Nombre de la variable donde se la función almacena los
resultados para usarlos posteriormente. Opcional. Por defecto se guarda
en la variable de nombre “StringFromFile_”.

No

Tercer argumento

Nivel del log. Por defecto INFO, sino OUT o ERR.

No

Cuarto argumento

Comentario adicional, mostrado en la cadena devuelta.

No

14.__logn

    Registra un mensaje, y devuelve la cadena
vacía.

Argumento

Descripción

Requerido

Primer argumento

Mensaje a registrar.

Si

Segundo argumento

Nivel del log. Por defecto INFO, sino OUT o ERR.

No

Tercer argumento

Texto “lanzable”. Sino esta vacío, crea un
texto para pasar al log.

No

15.__BeanShell

    Evaluá un script, propio de esta
función, que recibe como argumento y devuelve el valor obtenido.

Argumento

Descripción

Requerido

Primer argumento

BeanShell script

Si

Segundo argumento

Nombre de la variable donde se la función almacenan los resultados.
Opcional.

No

16.__split

    Esta función separa una cadena que recibe
como argumento, en función de un delimitador también
indicado como argumento, y va guardando los resultados en variables
cuyos nombres son VAR_1, VAR_2… y así sucesivamente. En caso
de encontrarse el delimitador seguido del mismo delimitador, devuelve
el carácter “?”. Sino reconoce el carácter de
después del delimitador, devuelve también “?”.
    

Argumento

Descripción

Requerido

Primer argumento

El String a dividir.

Si

Segundo argumento

Nombre de la variable donde se la función almacenan los resultados.

Si

Tercer argumento

El carácter delimitador. Si se omite, el delimitador
por defecto es “\”.

No

    Veamos un ejemplo para ver de manera más
sencilla su funcionamiento. La función
${__split(a||c|,VAR,|},
devuelve las siguientes variables:

VAR_1=a
VAR_2=?
VAR_3=c
VAR_4=?

17.__Xpath

    Dicha función lee un archivo XML, y devuelve todos los nodos que
encuentre basándose en el patrón del segundo argumento.
Cada vez que se llama a esta función devuelve el siguiente
resultado encontrado. Si llega al final del archivo XML, este vuelve al
comienzo. En caso de no encontrar ningún nodo basado en dicho
patrón, se devuelve una cadena vacía, y se escribe una
traza con carácter “WARNING”, en el log de JMeter.

Argumento

Descripción

Requerido

Primer argumento

Archivo XML del que obtener resultados.

Si

Segundo argumento

Expresión para encontrar nodos en el archivo XML.

Si

    Por ejemplo, la función ${__XPath(/path/to/build.xml,
//target/@name)}
, encuentra todos los nodos en el archivo build.xml, y devuelve el contenido
del nombre del siguiente atributo.

18.__setProperty

    
    Asigna un valor a una propiedad de JMeter en
concreto. El valor original de la propiedad puede ser o no devuelto en
función del tercer parámetro. La función devuelve
una cadena vacía por defecto.

Argumento

Descripción

Requerido

Primer argumento

La propiedad a modificar.

Si

Segundo argumento

El valor a asignar a dicha propiedad.

Si

Tercer argumento

TRUE en caso de querer devolver el valor original de la
función que estamos modificando, FALSE en caso contrario.

No

19.__time

    Dicha función devuelve la fecha y hora
actual, en diferentes formatos.

 

Argumento

Descripción

Requerido

Primer argumento

El formato de retorno que admite dicha función.

No

Segundo argumento

Nombre de la variable donde se la función almacenan los resultados.
Opcional.

No

    Los formatos de retorno que admite dicha
función son los siguientes:

    - YMD =
yyyyMMdd
    – HMS =
HHmmss
    – YMDHMS =
yyyyMMdd-HHmmss
    – USER1 =
formato definido en la propiedad de JMeter “time.USER1”
    – USER2 =
formato definido en la propiedad de JMeter “time.USER2”

    Podemos modificar un formato en concreto a devolver,
mediante la propiedad propiedad adecuada de JMeter, por ejemplo, time.YMD=yyMMdd.

20.__jex

    Esta  función evalúa una
expresión de lenguaje Jexl
(Java Expressión Language)
, y retorno su valor.

Argumento

Descripción

Requerido

Primer argumento

La expresión a evaluar

Si

Segundo argumento

Nombre de la variable donde se la función almacenan los resultados.
Opcional.

No

21.__V

    Esta función devuelve el resultado de evaluar
una variable. La principal utilidad es el evaluar variables anidadas,
las cuales no se pueden evaluar de otra manera.

    Por ejemplo si tenemos una variable A y N=1, la expresión ${A${N}}, no es posible
evaluarla. En cambio mediante dicha función, la expresión
${__V(A${N})} si es
evaluable.

Argumento

Descripción

Requerido

Primer argumento

La variable a evaluar.

Si

22.__evalVar

    Esta función retorna el resultado de evaluar
una expresión almacenada en una variable . Por ejemplo, la
variable “query”
contiene “select ${colum} from
${table}”
, y “colum”
y “table” contiene
“name” y “customers”, entonces la
expresión ${__evalVar(query)},
será evaluada como “select
name from costumers”
.

Argumento

Descripción

Requerido

Primer argumento

La variable a evaluar.

Si

23.__eval

    Esta función permite evaluar una cadena. Esta
función permite interpolar variables y referencias de
función, que se almacenan en una variable. Por ejemplo si
tenemos las variables:

    – name=Smith
    – column=age
    – table=birthdays
    – SQL=select ${column} from ${table} where
name=’${name}’

    la expresión ${__eval(${SQL})}, será
evaluada como “select age from
birthday where name = ‘Smith’”
.

Argumento

Descripción

Requerido

Primer argumento

La variable a evaluar.

Si

24.__char

    Devuelve el resultado de evaluar una lista de
números como caracteres Unicode.

Argumento

Descripción

Requerido

Primer argumento

El número decimal (o hexadecimal, precedido por el
prefijo 0x), para ser convertido a caracteres Unicode.

Si

25.__unescape

    Esta función permite evaluar caracteres de
escape de Java.

Argumento

Descripción

Requerido

Primer argumento

El String que representa la cadena de escape.

Si

    Por ejemplo ${__unescape(\r\n)}
= CRLF

26.__unescapeHTML

    Función para evaluar una cadena de caracteres
de escape HTML. Por ejemplo, la expresión «&lt;Fran&ccedil;ais&gt;« 
será evaluada como «<Français>»
.

Argumento

Descripción

Requerido

Primer argumento

La cadena a evaluar.

Si

27.__escapeHTML

    Dicha función ofrece la funcionalidad inversa
a la función anterior. Así pues recibe una cadena de
caracteres que contiene posibles caracteres de escape HTML, y devuelve
dicha cadena con los caracteres de escape. Así por ejemplo «bread» , será evaluada como &quot;bread&quot;

Argumento

Descripción

Requerido

Primer argumento

La cadena a evaluar.

Si

    Hasta aquí podemos ver el uso de las
funciones más habituales de JMeter.

    Aclarar que para el desarrollo del tutorial se uso
la versión de JMeter “Apache JMeter 2.3.4 r785646”,
por lo que en versiones posteriores o anteriores, el uso de las
funciones puede tener variaciones.

    Espero que el tutorial os sea de ayuda, y cualquier
duda o comentario acerca del mismo, estaremos muy agradecidos en
recibirlo.

Dejar respuesta

Please enter your comment!
Please enter your name here