How to… Pruebas de estrés con JMeter para Oracle ADF

El objetivo de este post es ilustrar el mecanismo de configuración de Apache JMeter con tu aplicación Oracle ADF para las pruebas de estrés. Debido a la falta de una configuración completa y detallada para ADF, presentare un ejemplo de configuración.

La forma clásica de la creación de un escenario con JMeter es configurar un servidor proxy en relación con un plan de prueba y empezar a grabar los flujos específicos de la aplicación desde el navegador. Cuando hayas terminado puedes detener la grabación y ejecutar el plan de prueba creada con el número deseado de hilos(usuarios).

Proxy

Al considerar el uso JMeter para aplicaciones ADF hay algunos parámetros adicionales que se pueden configurar para estar seguros de que los datos de respuesta esten de acuerdo a las partidas registradas para un plan de pruebas: jsessionid, afrLoop, javax.faces.ViewState, afrWindowId. Con el fin de simular las diferentes sesiones de usuario que tenemos que capturar a los valores de los parámetros y que se llevarán a cuando se ejecuta un flujo basado en múltiples peticiones HTTP.

Configuraciones Requeridas para JMeter
A continuación mostrare como configurar los parametros de JMeter para ADF, solo hay que crear un grupo de estos parametros para cada grupo de hilos, El resultado final sera algo como esto:

variables

  • HTTP Cookie Manager
  • Crear via Test Plan -> Thread Group -> Right Click -> Add -> Config Element -> HTTP Cookie Manager

    Nombre HTTP Cookie Manager
    Clear cookies each iteration Seleccionada
  • Variables de usuario
  • Crear via Test Plan -> Thread Group -> Right Click -> Add -> Config Element -> User Defined Variables

    Nombre Variable ADF
    Variable Name: afrLoop
    Variable Name: afrWindowId
    Variable Name: jsessionId
    Variable Name: adf.ctrl-state
    Variable Name: javax.faces.ViewState

    Todas esta variables se deben crear sin valor inicial.

  • Extractor de expresión regular #1
  • Crear via Test Plan -> Thread Group -> Right Click -> Add -> Post Processors -> Regular Expression Extractor

    Name adf.ctrl-state Extractor
    Response Field to Check Body
    Reference Name adf.ctrl-state
    Regular Expression _adf.ctrl-state=([-_0-9A-Za-z!]{10,13})
    Template $1$
    Match No. 1
    Default Value n/a
  • Extractor de expresión regular #2
  • Crear via Test Plan -> Thread Group -> Right Click -> Add -> Post Processors -> Regular Expression Extractor

    Name afrLoop Extractor
    Response Field to Check Body
    Reference Name afrLoop
    Regular Expression _afrLoop=([-_0-9A-Za-z]{13,16})
    Template $1$
    Match No. 1
    Default Value n/a
  • Extractor de expresión regular #3
  • Crear via Test Plan -> Thread Group -> Right Click -> Add -> Post Processors -> Regular Expression Extractor

    Name afrWindowId Extractor
    Response Field to Check Body
    Reference Name afrWindowId
    Regular Expression window.name='([-_0-9A-Za-z!]{10,13})’
    Template $1$
    Match No. 1
    Default Value n/a
  • Extractor de expresión regular #4
  • Crear via Test Plan -> Thread Group -> Right Click -> Add -> Post Processors -> Regular Expression Extractor

    Name javax.faces.ViewState Extractor
    Response Field to Check Body
    Reference Name javax.faces.ViewState
    Regular Expression <input type=”hidden” name=”javax\.faces\.ViewState” value=”!(.+?)”>
    Template $1$
    Match No. 1
    Default Value n/a
  • Extractor de expresión regular #5
  • Crear via Test Plan -> Thread Group -> Right Click -> Add -> Post Processors -> Regular Expression Extractor

    Name jsesssionId Extractor
    Response Field to Check Body
    Reference Name jsessionId
    Regular Expression ;jsessionid=([-_0-9A-Za-z!]{63})
    Template $1$
    Match No. 1
    Default Value n/a

Después de grabar una sesión de ADF en JMeter y establecer las variables anteriores, se quedan registradas numerosas peticiones HTTP con variables del mismo nombre como parámetros HTTP. Sin embargo las solicitudes grabadas de HTTP incluyen los valores de los parámetros “para la sesión grabada, que simplemente no funciona cuando uno desea reproducir la sesión ya que los valores se han cambiado.

Por tanto, es necesario identificar todos los lugares en los que existen parámetros en las peticiones HTTP registrado sesión y sustituir las referencias a las variables.

  • HTTP Request Cualquier referencia a jsessionid debe ser cambiado por
  • ejem. /SageApp/faces/ViewEvents;jsessionId=${jsessionId}

  • HTTP Request Cualquier referencia a _adf.ctrl-state debe ser cambiado por
  • ejem. /SageApp/faces/ViewEvents?_adf.ctrl-state=${adf.ctrl-state}

  • Hacer lo mismo para los siguientes parametros
  • _adf.ctrl-state
    _afrLoop
    _afrWindowId (* ver la excepcion al final de este paso)

    Para los valores _adf.ctrl-state y _afrLoop vea el siguiente ejemplo y reemplace en JMeter

    Sin embargo hay una excepción con _afrWindowId. En las peticiones iniciales su valor será la cadena “null”. No sustituya este valor y dejelo como “null”.

  • HTTP Request para el valor “javax.faces.ViewState” sustituir por:
  • ejem. !${javax.faces.ViewState}

    Adicionalmente hay que desactivar la opcion de “Encode?” y dejarlo como sigue.

    Listo tenemos JMeter configurado para ADF.

    Espero les sea de ayuda este post y esperamos sus comentarios

    Para más información

    ADF 11g with JMeter – GEBS

    ADF 11g with JMeter – one-size-doesnt-fit-all

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