Hi all,
Can we store the data from the response into another data structure like a Map and then user that data for subsequent requests being made?
The idea is to populate the Map with key as the userNumber and value as the authKey and then retrieve that value based on the key passed to my method. Sharing a snippet of the code :
object APIs {
var numbersVsUCID = new mutable.HashMap[String, String]()
def newCall(phoneNumber: String, isSIP: Boolean): ChainBuilder = {
exec(http(s"Start call : ${phoneNumber}")
.get("outbound")
.queryParam("api_key", "TOKEN")
.queryParam("phone_no", phoneNumber)
.queryParam("isSip", isSIP)
.check(status.is(Config.success))
.check(xpath("//message").saveAs("ucid")) //Extracted the id here
.check(bodyString.saveAs("callStarted")))
.exec(session => {
numbersVsUCID.put(phoneNumber, session("ucid").as[String]) // If the phone number is 2020, the map would be HashMap("2020" -> "ZXCVBNMQWERTY")
session
})
}
def invite(phoneNumber: String, isSIP: Boolean): ChainBuilder = {
exec(http(s"Invite : ${phoneNumber}")
.get("Conference")
.queryParam("api_key", "TOKEN")
.queryParam("phoneno", phoneNumber)
.queryParam("isSip", isSIP)
.queryParam("ucid", "${ucid}")
.check(status.is(Config.success))
.check(jsonPath("$..ucid").saveAs("ucid"))) // Creates a new unique ID
.exec(session => {
numbersVsUCID.put(phoneNumber, session("ucid").as[String]) // If the number is 2022, the map would now be HashMap("2020" -> "ZXCVBNMQWERTY", "2022" -> "QWERTYZXCVBNM")
session
})
}
def disconnect(phoneNumber: String): ChainBuilder = {
exec(http(s"Disconnect : ${phoneNumber}")
.get("Disconnect")
.queryParam("api_key", "TOKEN")
.queryParam("ucid", numbersVsUCID.get(phoneNumber).get)) // Fetch the value from the map and use here
}
}
class Test extends BaseSimulation {
var callScn: ScenarioBuilder = scenario("Tests")
.exec(APIs.newCall("2020", true))
.pause(15 seconds, 30 seconds)
.exec(OzonetelAPI.invite("2022", true))
.pause(15 seconds, 30 seconds)
.exec(OzonetelAPI.disconnect("2020"))
.exec(OzonetelAPI.disconnect("2022"))
setUp(
callScn.inject(rampUsers("1") during ("1" seconds))
).protocols(Config.baseHttpConf)
}
One execution of the above code I always getting an invocation target exception as below :
java.util.NoSuchElementException: None.get
at scala.None$.get(Option.scala:627)
at scala.None$.get(Option.scala:626)
at spr.objects.OzonetelAPI$.disconnect(APIs.scala:96)
at spr.tests.CallControlsTest.<init>(Test.scala:23)
... 10 common frames omitted
Wrapped by: java.lang.reflect.InvocationTargetException: null
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:490)
at io.gatling.app.Runner.run0(Runner.scala:62)
at io.gatling.app.Runner.run(Runner.scala:49)
at io.gatling.app.Gatling$.start(Gatling.scala:83)
at io.gatling.app.Gatling$.fromArgs(Gatling.scala:45)
at io.gatling.app.Gatling$.main(Gatling.scala:37)
at io.gatling.app.Gatling.main(Gatling.scala)
Exception in thread "main" java.lang.reflect.InvocationTargetException
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:490)
at io.gatling.app.Runner.run0(Runner.scala:62)
at io.gatling.app.Runner.run(Runner.scala:49)
at io.gatling.app.Gatling$.start(Gatling.scala:83)
at io.gatling.app.Gatling$.fromArgs(Gatling.scala:45)
at io.gatling.app.Gatling$.main(Gatling.scala:37)
at io.gatling.app.Gatling.main(Gatling.scala)
Caused by: java.util.NoSuchElementException: None.get
at scala.None$.get(Option.scala:627)
at scala.None$.get(Option.scala:626)
at spr.objects.APIs$.disconnect(OzonetelAPI.scala:96)
at spr.tests.Test.<init>(CallControlsTest.scala:23)
... 10 more
Can someone please point out what I might be doing wrong here?
Thanks in advance