Bienvenidos lectores habituales de esta sección al mundo de
JMeter en español. Hoy tras otro periodo de inactividad en las actualizaciones,
abrimos un artículo para comentar algunas de las mejoras que hemos visto en la
nueva versión con la que estamos trabajando JMeter v 3.0
¡Comenzamos!
Algunos de los plugins que vamos a tratar aquí, han sido
desarrollados por la empresa especializada en Cloud,
BlazeMeter. Estos añadidos
han sido cedidos a la comunidad de usuarios por esta empresa, por lo que son
accesibles y disponibles con las mismas características que otros plugins ya
desarrollados.
Concurrency Thread Group
Este plugin permite realizar escalados de carga de una forma
más flexible que otros ya existentes.
 |
Concurrency Thread Group |
Como podemos observar, permite definir de una manera
bastante definida
- concurrencia de hilos de ejecución (Target Concurrency)
- tiempo en el que se desea alcanzar esa concurrencia (Ramp up time)
- número de hilos que se inyectarán en cada escalón de la rampa de entrada (Ramp-up step count)
- Tiempo de ejecución a plena carga de la prueba (Hold target Rate time)
Aparte ,podemos especificar en qué medida de tiempo queremos
planificar : minutos o segundos , así como un número máximo de iteraciones por
hilo de ejecución.
Esto evidentemente es muy útil cuando tenemos limitaciones
asociadas a los datos: por ejemplo un juego de identificadores o cuentas que no
se pueden reutilizar en distintas ejecuciones o iteraciones.
Pasando datos entre threads. Sincronización
Una de las funcionalidades que los usuarios de JMeter han
estado pidiendo en “wish-lists” o en los TODO ha sido la posibilidad de pasar
datos entre threads. Para ello se ha desarrollado el concepto de comunicación entre hilos , usando un mecanismo
de colas FIFO (First IN, First OUT).
El concepto es bien simple, un paso de ejecucion de un
thread captura o genera un dato que se quiere pasar como entrada en la
ejecución de otro hilo.
Un modo habitual para hacerlo hasta ahora sería una variable
. Sin embargo, esto tiene el problema de que dicha variable se sobreescribiria
en cada iteración (a menos que se dispusiera de una estructura de control
compleja) o bien volcándola a un fichero para usarlo como entrada de variables.
Como cualquiera que haya usado esta herramienta u otras
similares, sabrá que le generación de datos de manera dinámica es compleja y,
para el caso de volcado a ficheros, no es muy recomendable realizarla en la
misma ejecución en la que se están generando.
Desarrollo
Se ha desarrollado una serie de funciones a llamar desde
muestreadores asociados a un hilo que pueden volcar los datos obtenidos durante
la ejecución y volcarlos a una cola desde la que pueden acceder otros hilos.
Las funciones desarrolladas son las siguientes: fifoPut, fifoGet, fifoPop, fifoSize.
El uso de cada una se explicita en el siguiente cuadro
Función
|
Parámetros
|
Descripción
|
fifoPut
|
COLA_ENTRADA, STRING_ENTRADA
|
Introduce el valor de la cadena pasada como parámetro en la cola de
entrada definida
|
fifoPop
|
COLA_ENTRADA,STRING_SALIDA
|
Toma el primer valor de la cola (el más antiguo) y lo vuelca en el
string de salida .Si la cola está vacía espera durante un tiempo especificado
en un parámetro kg.apc.jmeter.functions.FifoTimeout
Hasta que haya un valor
|
fifoGet
|
COLA_ENTRADA,STRING_SALIDA
|
Toma el primer valor de la cola (el más antiguo) y lo vuelca en el
string de salida sin eliminarlo de la cola.
Si la cola no tiene elementos, devuelve una cadena vacía.
|
fifoSize
|
COLA_ENTRADA,STRING_SALIDA
|
Devuelve en la cadena STRING_SALIDA pasada como parámetro el número
de elementos presentes en la cola
|
Ejemplos de uso:
${__fifoPut(COLA,${VALOR})}<- Vuelca en la cola cookies el
valor contenido en la variable ${VALOR}
Una secuencia de trabajo sería
- crear
un extractor de expresiones regulares que capture el valor a pasar
asíncronamente entre hilos en una variable ${VALOR}
- Introducir
el valor en la cola FIFO mediante un fifoPut(COLA,${VALOR}))
- Invocar
mediante una secuencia de control a la cola FIFO asegurándonos que no se
encuentra vacia
- Retirar o leer el valor de la cola con un
fifoPop(..) o fifoGet(..)
Notas acerca de la persistencia de los valores.
Los valores contenidos en las colas FIFO se guardan entre
ejecuciones de un escenario dependiendo del modo de invocación de las funciones
- Si se han usado en Preprocesadores y
PostProcesadores , se borran automáticamente en cada ejecución
- Si se han usado en otros muestreadores, guardan los valores de las colas hasta que se vuelve a invocar una operación fifoPut sobre la cola ya existente. Si se quieren conservar valores, es mejor que los nombres de las colas varíen entre ejecuciones (por ejemplo, haciendo referencia a la fecha)
Debido a la extensión del artículo, publicaremos más análisis de los plugins y funciones relevantes en una continuación del mismo. ¡Esperamos que no haga falta que nos salgan canas a todos!
Como siempre, quedamos a la espera de vuestros comentarios y apreciaciones.