Home > Mobile >  Gatling session - get attribute as Long
Gatling session - get attribute as Long

Time:05-25

I am a new in Scala and got some problems with casting from String to Long. I try to get Gatling session value as Long in request. Before in exec() part, I try to set the userId value

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

Next, in request creator I want to use it like that because I need a new userId every call:

object UserRequestCreator {

  def sampleUserRequest(currency: String): Request = {

    Data data = new Data()

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

Test scenario:

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

but receive error:

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

How to fix that in Scala? I also try Long.valueOf, JLong.parseLong("${userId"}, 16), Try(BigDecimal(...)) and more but nothing can help. I think the problem is with $ symbol, but I don't see any different way to get this value from the session. Maybe it is possible to store Long in the Gating session?

CodePudding user response:

From the documentation and based on your current code, one way to do it is like that:

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

Thus, in your case:

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

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