Solución:
No pude hacer esto con variables (ya que son locales para subprocesos individuales). Sin embargo, ¡pude resolver este problema con las propiedades!
Nuevamente, mi primer ThreadGroup hace toda la configuración, y necesito que cierta información de ese trabajo esté disponible para cada uno de los subprocesos en el segundo ThreadGroup. Tengo una afirmación de BeanShell en el primer ThreadGroup con lo siguiente:
${__setProperty(storeid, ${storeid})};
El $ {storeid} se extrajo con un Extractor XPath. La aserción BeanShell hace otras cosas, como verificar que storeid fue devuelto desde la llamada anterior, etc.
De todos modos, en el segundo ThreadGroup, puedo usar el valor de la propiedad “storeid” en Samplers con lo siguiente:
${__property(storeid)}
¡Funciona de maravilla!
Según la documentación de JMeter:
16.12 Compartir variables entre subprocesos y grupos de subprocesos
Las variables son locales a un hilo, un conjunto de variables en un hilo no se puede leer en otro. Esto es por diseño. Para conocer las variables que se pueden determinar antes de que comience una prueba, consulte Parametrización de pruebas (arriba). Si no se conoce el valor hasta que comienza la prueba, hay varias opciones:
- Almacene la variable como una propiedad: las propiedades son globales para la instancia de JMeter
- Escriba variables en un archivo y vuelva a leerlas.
- Utilice el espacio de nombres bsh.shared; consulte 16.8.2 Compartir variables
- Escribe tus propias clases de Java
Otra forma de pasar variables entre los subprocesos es usar jmeter-plugins como lo menciona Andrey Botalov a continuación.
Pero descubrí que es un poco confuso usarlo por primera vez, pero brinda un control total de la variable durante el paso de un hilo a otro. Siga mi ejemplo con el uso de BeanShell y verá lo fácil que es:
A continuación, consulte las secciones de la siguiente imagen:
(1.1) Aquí creé una variable personalizada en Variables definidas por el usuario (o puede hacerlo con BSF Proccessor – deshabilitado en este ejemplo (1.2))
(2.1) (2.4) Usé con éxito la variable en el primer hilo, nada especial 🙂
(2.2) Agregué BeanShell PostProcessor y personalicé mi variable
(2.3) Agregado a la cola
(3.1) En el segundo hilo, la variable se toma de la cola, con el nombre que desee. Pero tenga cuidado, use sabiamente el tiempo de espera, porque este hilo esperará hasta el final anterior para que pueda obtener una variable modificada (experimente con una respuesta larga)
(3.2) (3.3) (3,4) Que los pasos repetidos de usar y modificar variables
(3.5) La variable se envía una vez más en la cola nueva, así que proporcione un nombre nuevo
(4.1) (4.2) (4.3) La variable modificada capturada de la nueva cola funciona a la perfección
Advertencia
-
Si agrega más subprocesos, agregue un contador al grupo de subprocesos con variable y agregue este nombre de variable al nombre de la cola; haga lo mismo en el grupo de subprocesos, donde intenta capturar la cola para que la cola tenga un nombre único para cada subproceso (escriba un comentario si Necesito una explicación más clara)
-
Si tiene más de una solicitud http en un grupo de subprocesos, agregue el preprocesador de comunicación de subprocesos como hijo del último (u otro si desea lograr algo personalizado) Solicitud http
Reproduzca, modifique, personalice para obtener el mejor resultado 🙂 Agregar más hilos puede resultar en un comportamiento no deseado, por lo que debe estar atento.
Encontré cuál creo que es la forma más sencilla de hacer esto.
Usar
Bean Shell PostProcessor
Establecer en un grupo de subprocesos
para configurar la variable (http://jmeter.apache.org/usermanual/best-practices.html#bsh_variables)
import org.apache.jmeter.util.JMeterUtils;
JMeterUtils.setProperty("PC_CREATED_PROMO_CODE", "value");
O si desea establecerlo en un valor contenido en otra variable
import org.apache.jmeter.util.JMeterUtils;
JMeterUtils.setProperty("PC_CREATED_PROMO_CODE", vars.get("Extracted_PC_CREATED_PROMO_CODE"));
Entrar en el otro grupo de subprocesos
Y luego, desde el otro grupo de hilos, léalo a través de (http://jmeter.apache.org/usermanual/functions.html#__property)
${__property(PC_CREATED_PROMO_CODE)}