2011-01-21 10 views
7

Agregué dos solicitudes una para iniciar sesión para almacenar la identificación de la sesión y otra solicitud para verificar la prueba de carga que requiere la identificación de la sesión. Hice la solicitud de inicio de sesión como una sola vez, al agregarlo como un controlador secundario para una sola vez. Pero cuando lo pruebo agregando aproximadamente 100 o 200 hilos, el inicio de sesión también se está ejecutando durante tanto tiempo. Deseo ejecutar la solicitud de inicio de sesión solo para iniciar el hilo. ¿Es posible? A continuación agregué mi jerarquía de casos de prueba.¿Alguna vez el controlador se ejecuta más de una vez en Jmeter?

ThreadGroup: 
Htp requestdefault 
HTTP cookie manager 
    once only controller 
login Http request 
Http request for number of users 

Respuesta

0

Puede colocar la "Solicitud HTTP de inicio de sesión" en el controlador Once Only y la "solicitud HTTP" normal en un controlador Loop. Ahora puede configurar el ciclo para ejecutar la solicitud HTTP 100 o 200 veces. Consulte: jmeter.apache.org/usermanual/component_reference.html#Loop_Controller

Use los temporizadores para hacer una prueba más realista. Digamos que quiere que las 200 solicitudes sucedan en 120 segundos, luego puede hacer que cada solicitud se detenga por 120/200 segundos. La mayoría de los temporizadores funcionan con milisegundos, por lo que puede hacer ese número (120/200 * 1000) milisegundos. Consulte: jmeter.apache.org/usermanual/component_reference.html#timers

También puede crear un grupo de subprocesos de instalación por separado en el que inicie sesión y realice los 200 subprocesos en otro grupo de subprocesos. Verifique este artículo: http://www.informit.com/guides/content.aspx?g=java&seqNum=520

Toda esta información debería ayudarlo en la dirección correcta. ¡Buena suerte!

+0

Quiero enviar toda la solicitud a la vez, si pongo la "petición HTTP normal" dentro del controlador de bucle y luego cada solicitud se ejecutará uno por uno que significa después de completar la primera solicitud única que lo hará comenzar segundo. así que no puedo encontrar cuántas solicitudes bloquearán la conexión. Y tengo una duda más sobre el controlador Once only, y todavía no puedo entender la funcionalidad del controlador Once Only. En mis casos de prueba, se ejecuta para todos los hilos que mencioné en el grupo de hilos. Debe ejecutarse solo una vez para los casos de prueba. ¿derecho?. AYUDA EN ESTA NOTIFICACIÓN – prashant

21

El controlador "SOLO UNA VEZ" no funciona de la forma que usted cree.

Se ejecuta "solo una vez" POR HILO. Por lo tanto, si tiene 100 hilos, se ejecutará 100 veces.

Si desea que se ejecute vez por prueba, haga lo siguiente:

Test Plan (Set thread groups to "run consecutively" 
- Cookie Manager 
- Thread Group A (1 thread, 1 loop) 
- - - Login Logic 
- Thread Group B 
- - - Rest of test 

Atención, si necesita compartir cualquier variable entre threadgroups A y B, es necesario establecer como propiedades. Las variables no se pueden compartir entre grupos de subprocesos, pero las propiedades sí. Necesitarás usar la función de propiedades para esto.

La función __setProperty almacena automáticamente el valor como una variable global. La forma más limpia de iniciar __setProperty sería crear una secuencia de comandos Beanshell de procesador POST como elemento secundario para la muestra que crea la cookie en THREAD A. Para recuperar el valor en THREAD B, agregue la función __property como VALOR para el parámetro que necesita el valor de la cookie

El guión Beanshell sería algo como esto:

props.put("COOKIENAME","COOKIEVALUE"); //creates a property "COOKIENAME" with value "COOKIEVALUE" 
print(props.get("COOKIENAME")); //prints the value out to the console 

El código anterior siempre tendría el mismo valor para cookieName, a menos de idea. Por lo tanto, debemos asegurarnos de que "COOKIEVALUE" sea dinámico. Yo recomendaría poner una expresión regular POST-PROCESADOR para extraer el valor de la cookie y luego pasarlo al script beanshell.

Por lo tanto, nuestro plan de pruebas ahora se ve así:

Test Plan (Set thread groups to "run consecutively" 
- Thread Group A (1 thread, 1 loop) 
- - - Login Logic 
- - - - - Regex to grab cookie, store as "regexCookie" 
- - - - - Beanshell to set property 
- Thread Group B 
- - - Rest of test 

Y nuestro script beanshell ahora queda como:

props.put("COOKIENAME",vars.get("regexCookie")); //creates a property "COOKIENAME" with value from "regexCookie" 
print(props.get("COOKIENAME")); //prints the value out to the console 

enlaces al manual del usuario:

+0

Hola muchas gracias por su respuesta, pero todavía estoy luchando con la forma de almacenar y obtener los valores de las propiedades. ¿Puedes explicarme dónde almacenar el valor de la propiedad y cómo obtenerlos en otro hilo? Quiero guardar el valor del administrador de cookies de "THREAD A" y buscarlo en "THREAD B". Al usar el asistente de funciones obtengo una cadena eligiendo la propiedad _property pero me confunde dónde almacenar esta cadena para que sea global. – prashant

+1

la función __property lo almacena automáticamente como una variable global. La forma más limpia de iniciar __setProperty sería crear una secuencia de comandos Beanshell de procesador POST como elemento secundario para la muestra que otorga la cookie en THREAD A. Para recuperar el valor en THREAD B, agregue la función __property como VALOR para el parámetro que necesita el valor de la cookie Espero que esto ayude (respuesta original editada para reflejar esto) – BlackGaff

+0

Esta es una gran respuesta.Añadiría que puede recuperar el valor de propiedad de otros grupos de subprocesos como este: $ {__ property (COOKIENAME)} – jlunavtgrad

0

Sólo una vez que el controlador funciona de la manera BlackGaff explicó.

Lo que está tratando de hacer parece estar mal ya que significaría que autenticaría a sus 100 usuarios con el mismo nombre de usuario/contraseña.

Pero si aún desea hacerlo, puede usar setupThread con un usuario, por lo general es útil para algunas tareas de inicio en la prueba, pero de ninguna manera responde a su requisito, lo cual me parece incorrecto.

0

En el Jmeter 2.9, puede usar el "Controlador de una sola vez" y el "Controlador de bucle" para hacer eso.

¡Es maravilloso!

Frankie

+0

esto no es correcto, tampoco es realmente una respuesta –

2

En las nuevas versiones de JMeter puede agregar un "Preparación del hilo de grupo" que hace exactamente lo que necesita.

Un tipo especial de ThreadGroup que se puede utilizar para realizar acciones de prueba previa. El comportamiento de estos subprocesos es exactamente como un elemento de grupo de subprocesos normal. La diferencia es que este tipo de subprocesos se ejecutan antes de que la prueba proceda a la ejecución de grupos de subprocesos regulares.

http://jmeter.apache.org/usermanual/component_reference.html#setUp_Thread_Group

Cuestiones relacionadas