Гатлинг не хранит значение в сессии - PullRequest
1 голос
/ 16 апреля 2020

Я использую сеансы в gatling для хранения значений, как показано ниже

      exec(session => {
        val id = Instant.now.toEpochMilli.toString + scala.util.Random.nextInt(1000).toString
        session.set("STARTED_PROCESS_ID",id)
        //Store the id somewhere for processing later
        session
      })
      .exec(
          http("scenario")
            .post(url)
            .header("Content-Type", "application/json")
            .header("id", session => session("STARTED_PROCESS_ID").as[String])
            .body(StringBody(body)
            .check(status.is(200))

В соответствии с документацией, значение должно храниться в сеансе, а заголовок "id" должен заполняться, как и ожидалось. Но при запуске симуляции я получаю следующую ошибку

java.util.NoSuchElementException: No attribute named 'STARTED_PROCESS_ID' is defined
    at io.gatling.core.session.SessionAttribute.as(Session.scala:46)
    at common.HttpUtil$.$anonfun$sendPostRequestForWasStartDefLoad$1(HttpUtil.scala:557)
    at io.gatling.core.action.SessionHook.execute(SessionHook.scala:32)
    at io.gatling.core.action.Action.$bang(Action.scala:38)
    at io.gatling.core.action.Action.$bang$(Action.scala:38)

Может кто-нибудь помочь объяснить, почему это происходит?

Ответы [ 2 ]

2 голосов
/ 16 апреля 2020

Вы не используете Session API правильно. Пожалуйста, внимательно прочитайте документацию .

Session неизменна и set возвращает новый экземпляр.

exec { session =>
    val id = Instant.now.toEpochMilli.toString + scala.util.Random.nextInt(1000).toString
    session.set("STARTED_PROCESS_ID",id)
}
1 голос
/ 16 апреля 2020

сеансы gatling являются неизменяемыми, поэтому, когда вы возвращаете session в качестве последней строки вашей функции сеанса, вы фактически возвращаете начальный, неотредактированный сеанс.

session.set возвращает новый обновленный сеанс так что вы можете просто оставить это как последнюю строку функции сессии, и она должна работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...