加特林不在 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这是一个新的、更新的会话,因此您可以将其保留为会话函数的最后一行,它应该可以工作。
我在 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这是一个新的、更新的会话,因此您可以将其保留为会话函数的最后一行,它应该可以工作。