I am trying to parse the following response and do some calculation on id and version .
`
{
"result": "SUCCESS",
"data": [
{
"playerId": {
"id":2,
"version":1
},
"score":200
}
]
}
`
Code is
`
package computerdatabase
import io.gatling.core.Predef._
import io.gatling.http.Predef._
import scala.concurrent.duration._
import io.gatling.jsonpath._
class Test1 extends Simulation {
//Global Users
val userMap = scala.collection.concurrent.TrieMapString, String
//Randomiser
val rnd = new scala.util.Random
val httpConf = http
.baseURL(“http://demo1263864.mockable.io/”) // Here is the root for all relative URLs
.acceptHeader(“application/json”) // Here are the common headers
.doNotTrackHeader(“1”)
.acceptLanguageHeader(“en-US,en;q=0.5”)
.acceptEncodingHeader(“gzip, deflate”)
.userAgentHeader(“Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:16.0) Gecko/20100101 Firefox/16.0”)
val headers_10 = Map(“Content-Type” → “application/json”) // Note the headers specific to a given request
val scn = scenario(“Simple request”)
.exec(
http(“If request “)
.get(“gatling1”)
.headers(headers_10)
.check(jsonPath(”$.result”).is(“SUCCESS”),
jsonPath("$.data[*]").ofType[Map[String, Any]].findAll.saveAs(“pList”)))
.foreach("${pList}", “player”) {
exec(session => {
val playerMap = session(“player”).as[Map[String, Any]]
val playerId = playerMap(“playerId”).asInstanceOf[Map[String, Any]]
val id = playerId(“id”)
println(id)
session.set(“playerId”, playerId)
})
}
setUp(scn.inject(atOnceUsers(1)).protocols(httpConf))
}Enter code here…
`
The line
val playerId = playerMap(“playerId”).asInstanceOf[Map[String, Any]]
Errors out with
20:36:15.860 [ERROR] i.g.c.a.b.SessionHookBuilder$$anonfun$build$1$$anon$1 - Action anonfunbuild1anon1 crashed on session Some(Session(Simple request,4173992086124673397-0,Map(8d6aa6d4-3c7e-4e8f-b475-db8bfe5094e1 → 0, pList → Vector(Map(playerId → {id=2, version=1}, score → 200)), timestamp.8d6aa6d4-3c7e-4e8f-b475-db8bfe5094e1 → 1408547175843, player → Map(playerId → {id=2, version=1}, score → 200), gatling.http.cookies → CookieJar(Map())),1408547175294,71,OK,List(ExitOnCompleteLoopBlock(8d6aa6d4-3c7e-4e8f-b475-db8bfe5094e1)))), forwarding to the next one
java.lang.ClassCastException: org.boon.core.value.LazyValueMap cannot be cast to scala.collection.immutable.Map
at computerdatabase.Test1$$anonfun$1.apply(Test1.scala:34) ~[na:na]
at computerdatabase.Test1$$anonfun$1.apply(Test1.scala:32) ~[na:na]
at io.gatling.core.action.SessionHook.executeOrFail(SessionHook.scala:35) ~[gatling-core-2.0.0-RC2.jar:2.0.0-RC2]
at io.gatling.core.action.Failable$class.execute(Actions.scala:71) ~[gatling-core-2.0.0-RC2.jar:2.0.0-RC2]
at io.gatling.core.action.SessionHook.execute(SessionHook.scala:28) ~[gatling-core-2.0.0-RC2.jar:2.0.0-RC2]
at io.gatling.core.action.Action$$anonfun$receive$1.applyOrElse(Actions.scala:29) ~[gatling-core-2.0.0-RC2.jar:2.0.0-RC2]
at scala.PartialFunction$OrElse.applyOrElse(PartialFunction.scala:166) ~[scala-library.jar:na]
at akka.actor.Actor$class.aroundReceive(Actor.scala:465) ~[akka-actor_2.10-2.3.4.jar:na]
at io.gatling.core.akka.BaseActor.aroundReceive(BaseActor.scala:23) ~[gatling-core-2.0.0-RC2.jar:2.0.0-RC2]
at akka.actor.ActorCell.receiveMessage(ActorCell.scala:516) ~[akka-actor_2.10-2.3.4.jar:na]
at akka.actor.ActorCell.invoke(ActorCell.scala:487) ~[akka-actor_2.10-2.3.4.jar:na]
at akka.dispatch.Mailbox.processMailbox(Mailbox.scala:238) ~[akka-actor_2.10-2.3.4.jar:na]
at akka.dispatch.Mailbox.run(Mailbox.scala:220) ~[akka-actor_2.10-2.3.4.jar:na]
at akka.dispatch.ForkJoinExecutorConfigurator$AkkaForkJoinTask.exec(AbstractDispatcher.scala:393) [akka-actor_2.10-2.3.4.jar:na]
at scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260) [scala-library.jar:na]
at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339) [scala-library.jar:na]
at scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979) [scala-library.jar:na]
at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107) [scala-library.jar:na]
How do I handle
nested maps ?