【问题标题】:Gatling-tool Extracting cookie dataGatling-tool 提取 cookie 数据
【发布时间】:2013-10-23 15:39:20
【问题描述】:

我目前正在编写一个带有 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。任何帮助将不胜感激。

【问题讨论】:

    标签: scala cookies gatling


    【解决方案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

    【讨论】:

    • 看起来 CookieJar 在 gatling-3.2.1 中是私有的
    【解决方案2】:

    您可以在 Set-Cookie 响应标头上使用 regexHeader check 以捕获 cookie 值。

    【讨论】:

    • 获取 cookie 的值:.check(headerRegex("Set-Cookie","CACHED_FRONT_FORM_KEY=(.*)").saveAs("formkey"))
    • 如何从另一个 exec() 访问这个 formkey?
    • @Mayumi 使用 Gatling EL "${formkey}" 或 Session API。
    【解决方案3】:

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

    对于这个 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}")
    

    【讨论】:

      【解决方案4】:

      使用 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}")
      

      来源

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-11-09
        • 1970-01-01
        • 1970-01-01
        • 2022-10-15
        • 2016-11-30
        • 2014-03-09
        • 1970-01-01
        相关资源
        最近更新 更多