【问题标题】:How to manually set a cookie in JMeter that is set programmatically by JavaScript如何在 JMeter 中手动设置由 JavaScript 以编程方式设置的 cookie
【发布时间】:2021-09-14 12:19:33
【问题描述】:

我正在测试一个具有以下流程的 Web 应用程序:

  1. 用户登录
  2. 成功登录后,将颁发访问令牌。
  3. 登录后的每个请求都有获取资源的访问令牌。

在我的 JMeter 测试计划中,我添加了一个 cookie 管理器,我可以从登录请求的响应标头中提取此访问令牌。我想将此访问令牌设置为测试计划的 cookie。

我在 BSF PostProcessor 中提取访问令牌后添加了这个:vars.put('COOKIE_access_token', actual_token); 它在调试采样器中被视为 cookie 变量。

但登录后的后续请求在其 cookie 数据中没有此访问令牌,因此再次重定向到登录页面。

如何将此令牌设置为将用于所有进一步请求的 cookie?

【问题讨论】:

    标签: javascript cookies jmeter


    【解决方案1】:

    定义变量不会添加 cookie 本身。您需要将 cookie 插入 Cookie Manager 以使其工作,例如:

    1. 添加 Beanshell PreProcessor 作为失败请求的子项
    2. 将以下代码放入预处理器的“脚本”区域:

      import org.apache.jmeter.protocol.http.control.Cookie;
      
      sampler.getCookieManager().add(new Cookie("access_token", "actual_token", "domain", "path", true, Long.MAX_VALUE));
      

    将domain、path、true(代表“安全”)和Long.MAX_VALUE(过期)替换为您自己的值。

    请参阅How to Use BeanShell: JMeter's Favorite Built-in Component 以编程方式操作 cookie 的示例。

    【讨论】:

    • 感谢 Dmitri T。它成功了。尽管在插入 cookie 时,我必须给出负 (-1) 值作为到期时间。任何非负值都不起作用。再次感谢!
    • 感谢上帝的回答。 HTTP Cookie Manager 完全是浪费时间,JMeter 也是如此,但至少这个答案将 ****ing cookie 添加到我的请求中。
    【解决方案2】:
    import org.apache.jmeter.protocol.http.control.Cookie;
    
    sampler.getCookieManager().add(new Cookie("access_token", "actual_token", "domain", "path", true, Long.MAX_VALUE));
    

    这段代码确实有效。这对我有帮助。
    谁想要在请求 cookie 数据中传递丢失的 cookie(会话或任何 cookie),而不是添加标头管理器,请在 bean shell 预处理器中使用上述代码。

    谢谢 DMITRI T

    【讨论】:

    • 答案不是可读格式。请使用代码和其他需要的块更正答案的格式。
    猜你喜欢
    • 2022-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-19
    相关资源
    最近更新 更多