Cuando capturamos la navegación de un usuario JMeter registra el “id” del componente HTML con el valor que tiene dicho componente para la realización de las peticiones POST.
Este id, al utilizar JSF en algunas ocasiones puede tener una parte dinámica que no controlamos desde el código de nuestra aplicación. Esto supone un problema ya que en cada reinicio de servidor esos id's cambian haciendo que el test deje de funcionar.
Para solucionar esto deberemos abordar dos enfoques. En primer lugar, intentar poner un id en nuestro código de aplicación en todos los elementos que vayan a intervenir en nuestro test y en sus ancestros.
En segundo lugar, crearemos, en las peticiones donde sea imposible evitar esta situación un extractor de expresiones regulares para recoger ese id dinámico y usarlo en la petición.
Para crear id's dinámicos deberemos tener en cuenta dos peticiones. La petición padre que genera la pantalla y la petición hija que hará POST de los valores mostrados en la pantalla anteriormente generada.
En este contexto, los extractores de expresiones regulares deben ponerse como postprocesador de la petición que genera la pantalla y usarse sus valores en la petición que hace POST.
Partiendo de esta petición
Podemos ver que hay tres campos que tienen un id dinámico: j_idt222, j_idt223 y j_idt224. Esa parte dinámica la controla JSF y no hemos sido capaces de poder evitar que salga poniendo id's a los componentes HTML de nuestra página.
Esta petición POST, está precedida de otra petición (en nuestro caso GET) que genera la pantalla en la que interactúa el test.
Es en la petición GET, como se muestra en la imagen anterior, dónde debemos crear los estractores para los id dinámicos de cada una de las variables que queremos procesar. Debe haber un extractor por id dinámico.
Una vez localizados los campos deberemos crear el extractor de expresiones regulares de igual manera que se hace para la extracción del JSFViewState
([^"]+)
Una vez creadas todos los extractores, sustituiremos su valor en los campos correspondientes de la peticion POST.
Transformando la petición
En la petición