Search code examples
javascalaarraylistgatling

Gatling feed an ArrayList of random strings


I have gatling script to send HTTP request with an array of 10,000 email addresses, the JSON body is like this one:

{
  "userIds": [
    "user1@paragonia.com",
    "user2@bedlam.com",
    "user3@blurrybus.com",
    "user4@barkarama.com",
    "user5@bullzone.com",
    .
    .
    .
    "user10000@miraclis.com"
  ]
}

So, I generate an ArrayList of 10,000 random email addresses:

val emails = new util.ArrayList[String]
  for(i <- 1 to 10000) {
    emails.add("\"" + Random.alphanumeric.take(8).mkString.toLowerCase +
      "@" + Random.alphanumeric.take(10).mkString.toLowerCase + ".com\"")
  }

And I need to feed that ArrayList into my scenario:

  val scn = scenario("Add Users")
    .exec(
      http("AddUsers")
        .post(path)
        .header("Authorization", apiKey)
        .body(StringBody("{" +
          "\n\t\"userIds\": " +
          userNames +
          "\n\t\n" +
          "}")).asJson
    )

The problem is that the same array sent to all the requests in my scenario, and I need to generate a different array every time.

I guess I need to convert my ArrayList to a feeder or an Iterator but I'm stuck on it.

Is it possible to do such thing in Gatling?


Solution

  • I found the answer.

    I created a function to build the ArrayList of random emails:

    def getEmailsArray(count: Integer): util.ArrayList[String] = {
        val emails = new util.ArrayList[String]
        for (i <- 1 to count) {
          emails.add("\"" + Random.alphanumeric.take(8).mkString.toLowerCase +
            "@" + Random.alphanumeric.take(10).mkString.toLowerCase + ".com\"")
        }
        emails
      }
    

    Then I get the ArrayList into a feeder:

    val emailsFeeder = Iterator.continually(Map("emails" -> getEmailsArray(totalEmails)))