Gatling 会话 - 获取 Long 属性

Gatling session - get attribute as Long

我是 Scala 的新手,在从 String 转换为 Long 时遇到了一些问题。我尝试在请求中获得 Long 的 Gatling 会话值。在 exec() 部分之前,我尝试设置 userId value

def setUserId(): ChainBuilder = {
    exec(session => session
      .set("userId", Random.nextLong())
    )
  }

接下来,在请求创建者中,我想像那样使用它,因为我需要一个新的 userId 每次调用:

object UserRequestCreator {

  def sampleUserRequest(currency: String): Request = {

    Data data = new Data()

    data.setUserId("${userId}".toLong)
    data.setCurrency(currency)
  }
}

测试场景:

exec(setUserId())
      .exec(http("postUser")
        .post(endpointUser).asXml
        .headers(headers)
        .body(StringBody(toXmlString(sampleUserRequest("EUR"), classOf[Request])))
        .check(status.is(200))

但收到错误:

java.lang.NumberFormatException: For input string: "${userId}"

如何在 Scala 中解决这个问题? 我也尝试 Long.valueOf、JLong.parseLong("${userId"}, 16)、Try(BigDecimal(...)) 等,但无济于事。我认为问题出在 $ 符号上,但我没有看到从会话中获取此值的任何不同方法。也许可以在门控会话中存储 Long?

根据 documentation 并根据您当前的代码,一种方法如下:

// with a function payload
http("name").post("/")
  .body(StringBody(session => s"""{ "foo": "${session("dynamicValueKey").as[String]}" }"""))

因此,在您的情况下:

StringBody(session => toXmlString(sampleUserRequest(session)("EUR"), classOf[Request])

def sampleUserRequest(session: Session)(currency: String): Request = {
  //...
  data.setUserId(session("userId").as[Long])
}