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
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
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
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
|
|
50 % error
|
|
50 % error
|
|
50% error
|
|
50% error
|
|
50% error
|
|
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