Consultor tecnológico de desarrollo de proyectos informáticos.
Ingeniero Técnico En Informática De Sistemas por la Universidad Alfonso X El Sabio.
Puedes encontrarme en Autentia: Ofrecemos servicios de soporte a desarrollo, factoría y formación
Somos expertos en Java/J2EE
Regístrate para votar
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 |
${__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 |
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 |
- 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 |
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.
Puedes opinar o comentar cualquier sugerencia que quieras comunicarnos sobre este tutorial; con tu ayuda, podemos ofrecerte un mejor servicio.








