JMeter y JSF. Extracción del parámetro ViewState

6
23129

JMETER
y JSF.
Extracción del
parámetro ViewState.

    En este tutorial
vamos a tratar de
abordar uno de los problemas más comunes cuando trabajamos con
la
herramienta JMeter y el framework JSF (Java Server
Faces ).

    Cuando ejecutamos un
script de
navegación para realizar pruebas de carga mediante la
herramienta
JMeter, si la aplicación incluye desarrollo realizado con el
framework JSF, debemos tratar adecuadamente el parámetro ViewState
de JSF.

    Como ya sabemos, el
parámetro ViewState se encarga de mantener el
estado de los controladores de una misma página entre una ida y
venida del servidor. El problema es que cuando ejecutamos un script
de Jmeter, el valor de dicho parámetro no puede ser un valor
estático, ya que si le enviamos un valor estático al
servidor para
recomponer la vista, fallará, ya que dicho valor no podrá
ser
recompuesto por el servidor.

    Para solucionar este
problema mediante
la herramienta JMeter, contamos con la ayuda de una función
Regular
Expression Extractor
”, es decir, un extractor regular de
expresiones
. Este elemento asignará un valor dinámico
al
parámetro ViewState, de manera que al itentar JSF recomponer la
vista, lo hará de manera correcta.

    Para el uso de este
elemento, debemos añadir a nivel
del Thread Group (Grupo de hilos) el siguiente componente:

       
           
           
           

    El siguiente paso es
configurar dicho
elemento. Para ello asignamos los siguientes parámetros al
elemento,
situándonos encima del mismo.

       
           
       

   
Configuramos las
siguientes propiedades del elemento:      
       

  • Name:
    Nombre del elemento, en nuestro caso le asignamos “Extractor de
    Expresiones Regulares”.

  • Reference
    Name
    : Nombre de la variable donde JMeter guardará el
    resultado trás evaluar la expresión, por lo tanto, nombre
    que pondremos al valor de nuestro parámetro ViewState para que
    JMeter le asigne el valor de dicha variable. Veremos un poco mas
    adelante el uso de dicha variable. En nuestro caso le asignamos el
    nombre “jsfViewState”.

  • Regular
    Expression
    : Expresión regular que se utiliza para analizar
    los datos de respuesta. Hemos de buscar exactamente el fragmento de
    nuestro código fuente donde JSF trata el parámetro
    ViewState. A continuación lo que queremos parametrizar mediante
    expresión regular, es el valor de dicho atributo, por lo que
    tras value podemos observar la expresión (.+?). Dicho
    valor es la expresión regular que indica que es aquí
    donde debe evaluar la expresión regular y asignar o recuperar el
    valor que le asigne nuestro extractor.

  • Template:
    La cadena utilizada para crear un valor aleatorio de las coincidencias
    encontradas. En este caso asignamos el valor “$1$” para indicar que
    cualquier valor que se extraiga pertenece a un grupo número 1.
    Debemos tener especial cuidado en no dejar ningún
    espacio en blanco al asignar dicha propiedad tras el valor $1$, sino la
    expresión regular fallará.

  • Match No.:
    Indica que hacer en caso de que la expresión regular coincida
    varias veces. Usaremos el valor 0
    para indicar que debe elegir un valor al azar.

    

   
Hasta aquí
tenemos configurado nuestro extractor de expresiones regulares.

   
A continuación
revisamos todas las peticiones de nuestro script de JMeter,
seleccionando aquellas donde se envía el parámetro
ViewState.
Seleccionamos por ejemplo la siguiente petición:

   
           
           
   

   
Podemos
observar que el valor de nuestro parámetro ViewState es un valor
estático, cosa que no debe suceder.

   
A continuación
sustituimos dicho valor por el nombre de la variable que asignamos en
nuestro extractor para almacenar los valores de nuestra
expresión
regular, lo que definimos como “Reference Name” en
nuestro
extractor, y cuyo nombre asignamos “jsfViewState”,
resultando:

           
           
       

   
Recordemos que
la manera de asignar el valor de una variable a un campo en concreto
en JMeter, se realiza mediante la notación ${nombreVariable}.
De esta manera, cuando JMeter evalué dicha petición, al
encontrar
el valor de la variable recuperará el valor que nuestro
extractor
halla almacenado en la misma. De manera que si ejecutamos ahora
nuestro script y observamos el valor de dicha variable durante la
ejecución y en esa petición en concreto, veremos que
nuestro
extractor le ha asignado un valor aleatorio que no coincide con el
valor estático que teníamos antes.

   
Para observar
dicho contenido, en el componente “Arbol de resultados”,
seleccionando nuestra petición en concreto y renderizamos su
contenido HTML:

   
           
           
      

   
A continuación
realizamos estos pasos para todas las peticiones que manejen
el parámetro ViewState.

   
De esta manera
tenemos parametrizado de forma dinámica nuestro parámetro
ViewState, por lo que la restauración de las vistas de JSF se
hará
de manera adecuada.

    Esperamos que este
tutorial os sea de
ayuda y cualquier duda o sugerencia estaremos encantados de
atenderla.

6 Comentarios

  1. Estoy haciendo el test de un formulario JSF que tiene dos parametros de entrada, un label de salida y un boton de acción, es algo simple, lleno los dos parametros pulso el boton y los dos valores son concatenados en el label; he verificado contra tu tutorial y tengo bien la estructura de la prueba, hago la extraccion del ViewState con la primer petición HTTP GET y luego envio el ViewState y los dos parametros en una petición HTTP POST, pero en el arbol de resultados no me aparece el label con la concatenacion, y en el log de la aplicacion no muestra que los valores indicados lleguen al manage bean. Ya he verificado y los nombres de los parametros tienen %A3 para concatenar nombre de form y nombre de parametro, que puede hacer falta?. Adjunto el form JSF.

  2. Bueno primero que todo agradezco tu apoyo Daniel. Daniel me recomendo usar el JMeter como un proxy para ver si las peticiones HTTP de mi caso estaban bien construidas; luego de hacerlo utilice las peticiones que fueron grabas por el proxy, pero aun no me funcionaba bien mi prueba, sin embargo al revisar el árbol de resultados note que el parametro JSESSIONID cambiaba entre petición y petición, entonces agregue un manejador de cookies y todo funciono a la perfección. El problema radicaba que la sesión era generada en cada peticion entonces aunque el ViewState era mantenido la sesión era limpiada en cada petición. Algo que agrego, es que no tuve necesidad de escribir los nombres de los parámetros con form%3Acampo, fue suficiente con form:campo.

  3. Hola alecboy me alegro que te fuese útil el consejo, y gracias por reflejar aquí los contenidos de la duda.

    Siempre es de agrado que nuestros tutoriales os sirvan de ayuda.

    Hasta la próxima!!

  4. Saludos, estoy siguiendo su tutorial pero tengo problemas al enviar los parametros para la varible javax.faces.ViewState pero siempre me sale este valor:%24%7BjsfViewState%7D, osea javax.faces.ViewState=%24%7BjsfViewState%7D quisiera su ayuda por favor.

  5. Hola, os escribo el patrón de otra expresión regular para extraer el viewstate:

    CDATA[([^»]*)]]

    que actuaría sobre una cadena del tipo:

    (es una actualización y pone CDATA)

    saludos

Dejar respuesta

Please enter your comment!
Please enter your name here