【问题标题】:Gatling not storing value in session加特林不在会话中存储价值
【发布时间】:2020-07-29 11:58:03
【问题描述】:

我在加特林中使用会话来存储值,如下所示

      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)

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

【问题讨论】:

    标签: gatling scala-gatling


    【解决方案1】:

    您没有正确使用会话 API。请正确阅读documentation

    Session 是不可变的,set 返回一个新实例。

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

    【讨论】:

    • 我已经浏览过这个文件。但是我找不到我做错了什么。你能指出正确的用法吗?
    • @James Warr 在他的回答中解释了解决方案。
    【解决方案2】:

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

    session.set 返回一个新的、更新的会话,所以你可以把它作为会话函数的最后一行,它应该可以工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-20
      • 2019-06-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-11
      • 2015-03-12
      • 2019-05-02
      相关资源
      最近更新 更多