RSS

Recuperando el ViewState en JMeter

13 Jul

Recientemente me integré a un proyecto desarrollado en Java. Las tareas a las que fuí asignado era apoyo a un arquitecto en tareas de revisión de la arquitectura actual para validar que no tenía problemas en la implementación, por lo las tareas que iniciamos era la ejecución constante de cortos ciclos de negocio para probar el desempeño de la aplicación para lo cual utilizamos JMeter una herramienta para la ejecución de pruebas de desempeño.

En alguna ocasión anterior ya había intentado trabajar con esta herramienta pero mi experiencia no fue exitosa por el tema que hoy nos acontece: la recuperación del ViewState entre las invocaciones a la aplicación.

El ViewState no es otra cosa más que un mecanismo para mantener el estado de una página. La mayoría de las páginas que hay en internet actualmente apuntan a la solución de utilizar una expresión regular para recuperar este valor, por ejemplo esta página, la cual nos indica utilizar un post procesador del tipo Regular Expresion Extractor con la siguiente expresión:

<input\s+type="hidden"\s+name="javax.faces.ViewState"\s+id=
"javax.faces.ViewState"\s+value="([.+?]+)"

De entrada analicemos un poco esto y me confieso desconocedor de las expresiones regulares en Java, (este análisis que pongo a continuación lo hago basándome a que las expresiones que acostumbro a utilizar en el shell son las descritas aquí), la parte interesante aquí es
([.+?])
primero que nada vemos que los paréntesis nos permiten agrupar una subexpresión para posteriomente hacer referencia a ella, y en la subexpresión
<code[.+?]
los corchetes me permiten indicar un conjunto de posibles caracteres, pero dentro de el veo un punto “.” el cual representa cualquier caracter y que puede presentarse 1 ó más veces “+” y posteriormente la interrogación indicando 0 ó 1 ocurrencia, no la entendí, si alguien lo hace por favor explíqueme. En mi caso la cambié por la siguiente:
([^"]+)
lo cual indica cualquier caracter excepto la doble comilla. Hasta aquí todo parecía bien, sin embargo yo me he encontrado con un pequeño problema: ¿que pasa si el valor está codificado y debido a esto incluye caracteres como \r o \n? Ese fue mi problema ya que a pesar de que la expresión capturaba la cadena apropiada JMeter no la podía trabajar correctamente (eventualmente creo que el error al final fue que aún faltaba un HTTP Cookie Manager, lamentablemente por el momento no lo puedo comprobar).

Es por eso que opté por buscar algo más. Y lo encontré aquí. Resulta que existe otro PostProcesador, el XPath Extractor, este nos permite referenciar un elemento dentro un documento XML y con la expresión adecuada podemos recuperar el valor. La expresión en cuestión es la siguiente:

string(//input[@name=’javax.faces.ViewState’]/@value)

Y con esto tuve todo mi problema resuelto. Sin embargo me confieso de igual forma desconocedor de XPath por lo que accedí al siguiente recurso de la red para generarme un panorama.

Espero que les sea de utilidad.

 
Deja un comentario

Publicado por en julio 13, 2011 en Java, JMeter

 

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

 
A %d blogueros les gusta esto: