加特林不在 session 中存储值

Gatling not storing value in session

我在 gatling 中使用 sessions 来存储值,如下所示

      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))

根据文档,该值应存储在 session 中,并且 header "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(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)

有人可以帮忙解释一下为什么会这样吗?

您没有正确使用 Session API。请正确阅读documentation.

Session 是不可变的并且 set returns 一个新实例。

exec { session =>
    val id = Instant.now.toEpochMilli.toString + scala.util.Random.nextInt(1000).toString
    session.set("STARTED_PROCESS_ID",id)
}

gatling 会话是不可变的,因此当您 return session 作为会话函数的最后一行时,您实际上是 return 初始的、未经编辑的会话。

session.setreturn这是一个新的、更新的会话,因此您可以将其保留为会话函数的最后一行,它应该可以工作。