Knows Not Much
Knows Not Much

Reputation: 31546

Not able to extract values in Gatling

I have written 2 sets of Gatling code. My usecase in example 1 is make a post call. extract a value. make a get call and use the extracted value in header.

My usecase in example 2 is make a post call, extract a value, make a get call use the extracted value in cookie.

Example 1

   val login = http("Login")
      .post("login")
      .body(StringBody("""{"username": "foo", "password": "bar"}""")).asJSON
      .check(status.is(200), jsonPath("$..response.id").ofType[String].saveAs("id"))

   val get = http("get")
      .get("foo")
      .header("token", "$id")
      .check(status.is(200), jsonPath("$..response").exists)

   var id = ""
   val scn = scenario("scenario")
      .exec(login)
      .exec(session => {
         id = session("id").as[String].trim
         println("+++++++" + id)
         session}
      )
      .pause(3)
      .exec(get)

When I run this code I see that the print statement above prints the correct ID. The server throws 403 on the get call because the ID is not being set correctly. If I take any of the printed values and then remote $id and replace it with that. the test runs correctly.

So how do I access the saved variable?

Example 2

val login = http("Login")
      .post("login")
      .body(StringBody("""{"username": "foo", "password": "bar"}""")).asJSON
      .check(status.is(200), jsonPath("$..response.id").ofType[String].saveAs("id"))

   val get = http("get")
      .get("foo")
      .check(status.is(200), jsonPath("$..response").exists)

   val testCookie = scenario("test-cookie")
      .exec(login)
      .pause(3)
      .exec(addCookie(Cookie("foo_cookie", "$id")))
      .exec(get)

Here also the value is not extracted successfully and I get a 403 when I run it because the "foo_cookie" was not set correctly and the server will throw a 403 if the cookie is not found. (in postman I can make the same call work by specifying the cookie correctly)

Upvotes: 0

Views: 1570

Answers (1)

Knows Not Much
Knows Not Much

Reputation: 31546

I was able to resolve the issue. The problem was this line

.header("token", s"$id")

In Scala $id and ${id} are same but it appears that in Gatling they are not.

when I replaced my code to

.header("token", "${id}")

note that there is no "s" behind the string.

it worked!

Upvotes: 1

Related Questions