Question

I'm currently writing a test simulation with gatling and I've hit a brick wall. One of my post requests has an odd requirement. the request is:

.post("/checkout/cart/add/product/form_key/")

This post request wont complete with appending the form key on the end of the URL, the form key is stored in a cookie called: CACHED_FRONT_FORM_KEY

I need a way to grab the value in that cookie from the gatling cookiejar and to be used in the post request as follows:

.post("/checkout/cart/add/product/form_key/${FORM_KEY}")

I have done some googling and found a similar request:

https://groups.google.com/forum/#!topic/gatling/gXosGVnUuZA

But I'm unsure of how to implement this into a simulation file, I'm currently using gatling 1.4.3. Any assistance would be most appreciated.

Was it helpful?

Solution 2

You can use a regexHeader check on the Set-Cookie reponse header in order to capture the cookie value.

OTHER TIPS

Using the Gatling 2 API, you can access cookies as follows:

.exec( session => {
  import io.gatling.http.cookie._
  import org.asynchttpclient.uri._
  import io.netty.handler.codec.http.cookie.ClientCookieDecoder.LAX.decode

  val cookies = session("gatling.http.cookies").as[CookieJar].get(Uri.create("https://www.someSite.com"))
  // for (ck <- cookies ) {
  //     val cc = decode(ck.toString()) 
  //     println(s"${cc.name} === ${cc.value}");
  // }

  val ck = cookies.filter( cookie => decode(cookie.toString()).name == "CookieName")
  println(decode(ck.toString()).value)

  session
})

Uncomment the iterator to view all the cookies in the current session

Don't have enough rep to comment, so I'll add another answer.

For this Magento scenario I needed the form key, but using headerRegex("Set-Cookie","CACHED_FRONT_FORM_KEY=(.*)").saveAs("formkey") would return a value like

1Nt86VNYoPP5WUtt; path=/; domain=example.com

By using the following regex, I was able to extract just the 1Nt86VNYoPP5WUtt value

headerRegex("Set-Cookie","CACHED_FRONT_FORM_KEY=([^;]+)").saveAs("formkey")

I then used it in my HTTP Post like

 http("add_to_cart")
 .post("/checkout/cart/add/product/12345")
 .formParam("form_key", "${formkey}")

Using the HTTP Helper getCookieValue is another way to grab cookie data:

// add cookie to the session as CACHED_FRONT_FORM_KEY
.exec(getCookieValue(CookieKey("CACHED_FRONT_FORM_KEY"))) 
.exec { session =>
  println(session("CACHED_FRONT_FORM_KEY").as[String]) // `.as[]` unwraps the value from the session object
  session
}
.post("/checkout/cart/add/product/form_key/${CACHED_FRONT_FORM_KEY}")

Sources

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top