Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

Helping me understand session api Gatling

I am new to gatling
I am trying to loop on json response, find the country code that I am looking for and take the id coressponding the that coutry code.
Sample algorithm:
list.foreach( value => { if (value.coutrycode == "PL") then store value.id })

on Gatling:

def getOffer() = {
          exec(
                http("GET /offer")
                  .get("/offer")
                  .check(status.is(Constant.httpOk))
                  .check((bodyString.exists),
                    jsonPath("$[*]").ofType[Map[String,Any]].findAll.saveAs("offerList")))
                      .foreach("${offerList}", "item"){
                        exec(session => {
                          val itemMap = session("item").as[Map[String,Any]]
                          val countryCodeId = itemMap("countryCode")
                          println("****" + countryCodeId)
                          // => print all the country code on the list 
                          if (countryCodeId =="PL"){ // if statement condition
                             println("*************"+ itemMap("offerd")); // print the id eg : "23"
                             session.set("offerId", itemMap("offerId")); // set the id on the session
                          }
                          println("$$$$$$$$$$$$$$" + session("offerId")) // verify that th session contains the offerId but is not 
                          session
                        })
                      }
        }

When I try to print the session("offerId"), it’s print "item" and not the offerId.
I looked on the documentation but I didn’t understand the behaviour. Could you please explain it to me ?

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

>Solution :

It’s all in the documentation.

Session instances are immutable!

Why is that so? Because Sessions are messages that are dealt with in a
multi-threaded concurrent way, so immutability is the best way to deal
with state without relying on synchronization and blocking.

A very common pitfall is to forget that set and setAll actually return
new instances.

val session: Session = ???

// wrong usage
session.set("foo", "FOO") // wrong: the result of this set call is just discarded
session.set("bar", "BAR")

// proper usage
session.set("foo", "FOO").set("bar", "BAR")

So what you want is:

val newSession =
  if (countryCodeId =="PL"){ // if statement condition
    println("*************"+ itemMap("offerd")); // print the id eg : "23"
    session.set("offerId", itemMap("offerId")); // set the id on the session
  } else {
    session
  }
// verify that the session contains the offerId
println("$$$$$$$$$$$$$$" + newSession("offerId").as[String]) 
newSession
Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading