如何在JMeter中手动设置由JavaScript

时间:2016-01-14 10:24:04

标签: javascript cookies jmeter

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

  1. 用户登录
  2. 成功登录后,将发出访问令牌。
  3. 登录后的每个请求都有访问令牌来获取资源。
  4. 在我的JMeter测试计划中,我添加了一个cookie管理器,我可以从登录请求的响应头中提取此访问令牌。我想将此访问令牌设置为测试计划的cookie。

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

    enter image description here

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

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

2 个答案:

答案 0 :(得分:3)

定义变量不会添加cookie本身。您需要将Cookie插入Cookie管理器才能使其正常工作,例如:

  1. 添加Beanshell PreProcessor作为未通过的请求的子项
  2. 将以下代码放入预处理器"脚本"面积:

    function mapping(list, callback)
    {
        var txtObj = []
        list.forEach(function(val)
        {
            try { txtObj.push(mapred(fs.readFileSync(val, 'utf8'))) }
            catch(err) { callback(err) }
        })
        callback(null, txtObj)
    }
    
  3. 使用您自己的值替换import org.apache.jmeter.protocol.http.control.Cookie; sampler.getCookieManager().add(new Cookie("access_token", "actual_token", "domain", "path", true, Long.MAX_VALUE)); domainpath(代表"安全")和true(过期)。

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

答案 1 :(得分:0)

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