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ón session 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ón valor_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