jueves, 21 de mayo de 2015

JMeter . Análisis plugin HTTP Simple Table Server


Hola de nuevo. Tras este periodo de tiempo sin publicar, se nos ha vuelto a iluminar la cabeza con una idea (de ahí ese molesto fogonazo que vemos de vez en cuando) , actualizando la entrada correspondiente al uso de máquinas remotas como inyectoras

Hasta ahora, como habíais visto en nuestro artículo referente a los equipos externos,  estos  se encontraban con una limitación muy importante comparados con otras herramientas  para pruebas .
Los ficheros de datos debían estar duplicados en la misma ruta  indicada  en el script en todas y cada una de las máquinas remotas.

Como uno se puede imaginar, esto obligaba a duplicar dichos ficheros y copiarlos. Sin embargo en la página de http://jmeter-plugins.org , hemos analizado el comportamiento de un plugin  categorizado como “Extra” que permite aplicar una alternativa para solventar esta limitación

Plugin HTTP Simple Table Server.


Este elemento,  tipificado dentro de la jerarquía del contenido del Extra Set como “Otros” , permite publicar  por el protocolo HTTP  un fichero , de manera que se puede acceder a los contenidos del mismo  en modo de base de datos
  •       Lectura de un elemento
  •       Escritura de un elemento
  •       Estado actual del fichero
  •      Tamaño del fichero
Es decir permite ciertas operaciones de consulta, inserción y estado, de modo que los registros o filas que contiene pueden ser usados en la operativa de un script  de JMeter.

El plugin se basa  en un pequeño servidor web que puede ser arrancado bien desde el modo de interfaz de usuario de JMeter, bien por línea de comandos o configurarlo en las propiedades de JMeter de manera que arranque de manera automática cada  vez que se inicie JMeter

Para hacer más ligero este documento, llamaremos al plugin como HTTP STS

Configuración


Independientemente del método de ejecución de este servidor, este necesita indicar varios parámetros para su uso
  • Puerto TCP de operación
  • Directorio de datos.


Arranque


Desde  la interfaz de  usuario, se puede incluir un HTTP STS como un elemento No de Prueba sobre el Workbench o “Banco de trabajo” de un script de JMeter

Incluir STS desde Banco de Trabajo

Esta manera  de incluirlo hará que sólo esté disponible mientras si se encuentre arrancado en modo gráfico, deteniéndose una vez que cerremos el script o detengamos el interfaz de JMeter

Arrancar STS desde JMeter GUI


La configuración puede ser sobre escrita en este caso, aunque como ya hemos dicho, sólo será operativa mientras se encuentre iniciado en modo  de interfaz gráfico. Para ello sólo tenemos que introducir el puerto donde queramos que arranque el servidor HTTP STS y el directorio donde se encuentren los ficheros de datos a usar.

Es posible arrancar también accediendo al directorio de instalación de $JMETER/bin y arrancar el script simple-table-server (.CMD para  sistemas Windows , .sh para sistemas Unix)

Por último es posible configurarlo para que arranque automáticamente desde que se inicie JMeter, ya sea en modo gráfico con el GUI o en modo línea de comandos

Para ello debemos modificar  el fichero

       Jmeter.properties

Podemos añadir al fichero una serie de parámetros como los mostrados a continuación

Parámetro
Descripción
jmeterPlugin.sts.port
Puerto TCP donde se iniciará el servidor STS
jmeterPlugin.sts.addTimestamp
Incluimos un indicador de tiempo en el nombre del fichero generado
jmeterPlugin.sts.datasetDirectory
Directorio donde se encuentra los ficheros
jmeterPlugin.sts.loadAndRunOnStartup
True | false para indicar si arranca o no en inicio de JMeter

#------------JMeter HTTP Simple Table Server Configuration--------------------
jmeterPlugin.sts.port=9191
jmeterPlugin.sts.addTimestamp=true
jmeterPlugin.sts.datasetDirectory=C:/Compartido/Datos <-El separador de directorios debe ser la barra tipo Unix
jmeterPlugin.sts.loadAndRunOnStartup=false
Se recomienda en la documentación que en la sección “Miscellaneous”  el parámetro
#sampleresult.default.encoding=UTF-8 <- Ponga codificación UTF-8 en lugar de la ISO-8859-1 que viene para idiomas de Europa Occidental



Para que se arranque de manera automática hay que incluir dentro del fichero jmeter.properties  en la sección  “Beanshell configuration” la siguiente línea

beanshell.init.file=simple-table-server.bsh

Y que jmeterPlugin.sts.loadAndRunOnStartup tenga el valor true

Si queremos que los ficheros de datos se encuentren en otra ruta cada vez que arranquemos el JMeter o dependa del proyecto hay que modificar el parámetro

jmeterPlugin.sts.datasetDirectory

en cada cambio a realizar.


Uso


Para poder usar los datos de manera compartida por todos los inyectores, hay que indicar  el fichero sobre el que se quiere actuar y la operativa a ejecutar sobre dicho fichero
Para ello, lo que se tiene que usar son peticiones HTTP para realizar las llamadas a los comandos incluidos dentro del HTTP STS
El formato de las respuestas del servidor HTTP son ficheros HTML

<html><title>OK</title>
<body>login1;password1</body>
</html>


Según la documentación,para manejar adecuadamente el flujo de datos,  es preciso inicializarlo. Para ello usaremos el método INITFILE del servidor HTTP STS

Inicializar fichero de datos por petición HTTP a STS


Para poder leer un elemento del fichero y usarlo como una variable tenemos que usar el método de lectura (READ) del servidor HTTP STS y posteriormente tratarlo con el extractor de de expresiones regulares para volcarlo a una variable a usar en la petición

Configurando método READ de STS desde GUI

FUNDAMENTAL  que el  tipo de implementación  de la petición HTTP sea del tipo Httpclient  3.1 . Ya que las  peticiones con implementación Java o Httpclient 4.1 generan errores alternos, tal y como mostramos en la tabla de resumen final.

En este método hay que tener en cuenta como queremos usar los ficheros de datos. Según los parámetros en la llamada que explicamos a continuación


1    Paramétro READ_MODE
  •           Leer el primer registro  FIRST
  •           Leer  el último registro LAST
  •           Leer un registro aleatorio RANDOM


2.       Parámetro KEEP. A interpretar como el puntero que selecciona el siguiente registro
  • TRUE:El registro actual lo coloca al final de la lista y pone el puntero en el siguiente. Podemos interpretarlo como el uso “circular” de los datos
  • KEEP: FALSE. Selecciona el registro actual y no lo vuelve a utilizar. Sería un caso de uso único de cada dato.

Con estos dos peticiones HTTP que realizan las invocaciones a los métodos del servidor STS podemos usarlo para utilizar un mismo fichero de datos a lo largo de varios inyectores

Para eso utilizaremos un extractor de expresiones regulares como los que se utilizan para la correlación o captura dinámica de datos

Extractor de expresiones regulares sobre salidas de respuesta STS


Es decir, actuando sobre la respuesta de la lectura sobre el fichero extraemos la variable ${LOGIN}, aprovechando que el formato de salida de la petición HTTP de lectura sigue siempre el formato indicado.

Observaciones.

Nuestras pruebas muestran la utilidad de este plugin. Sin embargo, debemos señalar que su uso en nuestro cutre entorno de pruebas  muestra una alta inestabilidad del servidor STS.

Estadísticas de uso según localización de servidor STS, inyector o modo de uso de JMeter

Entorno
% Error
  • Servidor STS LOCALHOST
  •  Inyector LOCALHOST
  • Modo GUI

50 % error
  • Servidor STS LOCALHOST
  • Inyector LOCALHOST
  • Modo CMD

50 % error
  •            Servidor STS LOCALHOST
  •            Inyector Remoto
  •            Modo Gráfico

50% error
  •            Servidor STS LOCALHOST
  •            Inyectores  Remoto y Local
  •            Modo Gráfico

50% error
  •            Servidor STS REMOTO
  •            Inyector   Local
  •            Modo Gráfico

50% error
  •            Servidor STS REMOTO
  •            Inyector   Local
  •            Modo comando

50% error


NOTA ACTUALIZADA. Estos resultados se obtiene cuando dejamos la petición HTTP sobre el HTTP STS con implementación Java o HttpCliente 4. Si se usa la implementación Httpclient 3.1 la tasa de error es 0%


En conclusión, se puede decir que aún mostrando estos fallos , este plugin es ,potencialmente una buena idea para incrementar las capacidades de inyección en modo remoto , puesto que permite centralizar de una manera cómoda los ficheros de datos a usar.

Esperamos como siempre, vuestros comentarios ,  correcciones (¡si , reconocemos nuestros errores ! ) y aportaciones adicionales .

No hay comentarios:

Publicar un comentario