我正在用加特林编写一个测试模拟,我已经碰到了一堵砖墙。我的一个帖子请求有一个奇怪的要求。请求是:
.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。非常感谢任何帮助。
答案 0 :(得分:1)
使用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
答案 1 :(得分:0)
您可以在Set-Cookie响应标头上使用regexHeader check来捕获Cookie值。
答案 2 :(得分: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}")
答案 3 :(得分:0)
使用HTTP Helper getCookieValue
是另一种获取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}")