I need to create a random positive integer each time and send it to Json body in Gatling.
I used the below code to create a random positive ineger:
val r = new scala.util.Random;
val OrderRef = r.nextInt(Integer.MAX_VALUE);
but, How can I feed the randomly generated value into the json body?
I tried:
.exec(http("OrderCreation")
.post("/abc/orders")
.body(StringBody("""{ "orderReference": "${OrderRef}"}""").asJson)
But, this doesn't seem to work. Any clues please.
Thanks!
First of all you want to generate random number each time, thus OrderRef
has to be a method, like:
def orderRef() = Random.nextInt(Integer.MAX_VALUE)
Side comment: by Scala convention: name camelCase, () while it generates new values, without ;
in the end.
To use the prepared method you cannot use the Gatling EL string . Syntax is very limited and basically "${OrderRef}"
searches for variable with name OrderRef
in Gatling Session.
Correct way is to use Expression function as:
.exec(
http("OrderCreation")
.post("/abc/orders")
.body(StringBody(session => s"""{ "orderReference": "${orderRef()}" }""")).asJSON
)
Here you are creating anonymous function taking Gatling Session
and returning String
as body. String is composed via standard Scala string interpolation mechanism and uses before prepared function orderRef()
.
Of course you can omit Scala string interpolation as:
.body(StringBody(session => "{ \"orderReference\": " + orderRef() +" }" )).asJSON
which is not very preferred style when using Scala.
See more details at Gatling documentation to Request Body and read more about Galting EL syntax .
An alternative way is to define a Feeder:
// Define an infinite feeder which calculates random numbers
val orderRefs = Iterator.continually(
// Random number will be accessible in session under variable "OrderRef"
Map("OrderRef" -> Random.nextInt(Integer.MAX_VALUE))
)
val scn = scenario("RandomJsonBody")
.feed(orderRefs) // attaching feeder to session
.exec(
http("OrderCreation")
.post("/abc/orders")
// Accessing variable "OrderRef" from session
.body(StringBody("""{ "orderReference": "${OrderRef}" }""")).asJSON
)
Here the situation is different, first we define the feeder, then we attach it to session and then use its value in request body via Gatling EL string . This works while the feeder value is taken from feeder by Gatling before an attached to session for each virtual user. See more about feeders here .
Recommendation: If you scenario is simple, start with first solution. If it takes more complex think about feeders.
Enjoy
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.