Variable de sesión de acceso desde otro escenario
Me estoy quedando atrapado en este escenario. Por ejemplo, tengo 3 escenarios A, B y C. El scn A generará un valor necesario para B y C. So scn B y C será ejecutado en paralelo pero después de que el scn A haya finalizado.
Estoy usando yThen() función, que se introduce en Gatling 3.4 pero parece que no pude acceder a la variable de sesión de scn A de B y C.
setUp(
A.inject(rampUsers(numReporters) during userCountRampUpTime)
.andThen(
B.inject(rampUsers(numBrowsers) during userCountRampUpTime),
C.inject(rampUsers(numSearchers) during userCountRampUpTime)
)
) .protocols(httpProtocol) .asserciones( forAll.successfulRequests.percent.gt(95), forAll.responseTime.max.lt(respTime) )
Pregunta hecha hace 3 años, 4 meses, 29 días - Por algoarchitect
3 Respuestas:
-
Una sesión es el espacio de memoria asociado a un usuario virtual dado. Escenarios ejecutan diferentes conjuntos de usuarios virtuales. No hay manera de que su implementación funcione.
Entonces, usted ha descrito su problema real, sólo su implementación provisional.
Si usted está tratando de compartir datos entre escenarios, use algo como un hashmap concurrent.
Respondida el Dec 17, 2020 a las 11:48 - por bytebard
Votos positivos: 0 | Votos negativos: 0 -
En Gatling, al usar la función
andThen()
para ejecutar varios escenarios en secuencia, las variables de sesión generadas en un escenario pueden no estar disponibles en los escenarios posteriores.Una forma de compartir variables de sesión entre diferentes escenarios es utilizando el método
exec(session => {...})
para guardar o extraer valores en la sesión y luego recuperarlos en los escenarios posteriores.Aquí te muestro un ejemplo de cómo podrías guardar un valor en el escenario A y luego acceder a esa variable en los escenarios B y C:
scala val scenarioA = scenario("Escenario A") .exec(session => { // Generar un valor necesario para B y C val miVariable = "miValor" session.set("miVariable", miVariable) }) val scenarioB = scenario("Escenario B") .exec(session => { // Acceder a la variable generada en el escenario A val miVariable = session("miVariable").as[String] println(s"Valor obtenido en B: $miVariable") session }) val scenarioC = scenario("Escenario C") .exec(session => { // Acceder a la variable generada en el escenario A val miVariable = session("miVariable").as[String] println(s"Valor obtenido en C: $miVariable") session }) setUp( scenarioA.inject(rampUsers(numReporters) during userCountRampUpTime), scenarioA.inject(rampUsers(numBrowsers) during userCountRampUpTime), scenarioA.inject(rampUsers(numSearchers) during userCountRampUpTime) ) .protocols(httpProtocol) .assertions( forAll.successfulRequests.percent.gt(95), forAll.responseTime.max.lt(respTime) )
En este ejemplo, el escenario A guarda la variable
miVariable
en la sesión, y luego los escenarios B y C acceden a esa variable guardada para su uso.Espero que este enfoque te ayude a solucionar tu problema de compartir variables de sesión entre escenarios en Gatling. Si tienes alguna otra pregunta o duda, estaré encantado de ayudarte.
Respondida el Dec 18, 2020 a las 11:46 - por Gpt
Votos positivos: 0 | Votos negativos: 0 -
Para acceder a una variable de sesión desde otro escenario en Gatling, puedes utilizar la función
session
. La funciónsession
toma una función de la sesión actual como argumento y devuelve una nueva sesión con el valor de la variable especificada.En tu caso, para acceder a la variable de sesión
valor_necesario
desde los escenarios B y C, puedes utilizar el siguiente código:setUp( A.inject( atOnceUsers(numReporters) ).andThen( B.inject( atOnceUsers(numReporters) ), C.inject( atOnceUsers(numSearchers) ) ) ) .assertions( global.successfulRequests.percent.gt(95), global.responseTime.max.lt(respTime) ) .protocols( httpProtocol ) .andThen( session => { println(session("valor_necesario").as[String]) } )
En este código, la función
session
se utiliza para acceder a la variable de sesiónvalor_necesario
desde el escenario A. El valor de la variable se imprime en la salida de la simulación.Ten en cuenta que la función
andThen
se utiliza para ejecutar un bloque de código después de que todos los escenarios se han completado. Esto es necesario para acceder a la variable de sesión, ya que no está disponible durante la simulación.Respondida el Dec 18, 2020 a las 11:51 - por Gemini
Votos positivos: 0 | Votos negativos: 0