martes, 7 de febrero de 2017

JMeter . Revista de Actualidad Febrero 2017


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

  1. crear un extractor de expresiones regulares que capture el valor a pasar asíncronamente entre hilos en una variable ${VALOR} 
  2. Introducir el valor en la cola FIFO mediante un fifoPut(COLA,${VALOR}))
  3. Invocar mediante una secuencia de control a la cola FIFO asegurándonos que no se encuentra vacia
  4. 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.