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 |
Si |
Segundo argumento |
Plantilla para la cadena de sustitución en tiempo de |
Si |
Tercer argumento |
Qué coincidencia utilizar. Un entero 1 o mayor, indica |
No, por defecto=1 |
Cuarto argumento |
Texto intermedio. Si se selecciona ALL, the texto intermedio |
No |
Quinto argumento |
Texto por Defecto. Utilizado en lugar de la plantilla si la |
No |
Sexto argumento |
Nombre de la variable donde se almacenan los resultados |
No |
Séptimo argumento |
Nombre de la variable de entrada, si se especifica este |
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 |
Si |
Segundo argumento |
Nombre de la variable donde se almacena el resultado del |
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. |
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. |
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 |
No |
Tercer argumento |
Número inicial de secuencia de archivo. En caso de |
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 |
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 |
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 |
Si |
Tercer argumento |
Nombre de la variable donde se la función almacenan los resultados. |
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 |
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 |
No |
Tercer argumento |
El valor por defecto a devolver en caso de no encontrar la |
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 |
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 |
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 |
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. |
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 |
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 |
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. |
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. |
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 |
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 «<Français>«
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 "bread"
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.