2

我目前正在用 gatling 编写一个测试模拟,但我已经碰到了一堵砖墙。我的一个帖子请求有一个奇怪的要求。请求是:

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

此发布请求不会通过在 URL 末尾附加表单键来完成,表单键存储在名为:CACHED_FRONT_FORM_KEY 的 cookie 中

我需要一种方法从 gatling cookiejar 中获取该 cookie 中的值并在 post 请求中使用,如下所示:

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

我做了一些谷歌搜索,发现了一个类似的请求:

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

但我不确定如何将它实现到模拟文件中,我目前使用的是 gatling 1.4.3。任何帮助将不胜感激。

4

4 回答 4

2

使用 Gatling 2 API,您可以按如下方式访问 cookie:

.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
})

取消注释迭代器以查看当前会话中的所有 cookie

于 2017-08-16T20:25:43.870 回答
0

您可以对 Set-Cookie 响应标头使用regexHeader 检查以捕获 cookie 值。

于 2013-10-23T16:30:56.527 回答
0

没有足够的代表发表评论,所以我会添加另一个答案。

对于这个 Magento 场景,我需要表单键,但使用headerRegex("Set-Cookie","CACHED_FRONT_FORM_KEY=(.*)").saveAs("formkey")会返回一个值,例如

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

通过使用以下正则表达式,我能够仅提取1Nt86VNYoPP5WUtt

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

然后我在我的 HTTP Post 中使用它

 http("add_to_cart")
 .post("/checkout/cart/add/product/12345")
 .formParam("form_key", "${formkey}")
于 2015-01-14T12:27:00.817 回答
0

使用 HTTP HelpergetCookieValue是另一种获取 cookie 数据的方法:

// 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}")

来源

于 2019-10-24T13:09:33.487 回答