Jmeter - 如何将在一个线程中捕获的cookie传递给另一个线程

时间:2015-12-08 12:39:16

标签: cookies jmeter

我试图在Jmeter中的不同线程中使用相同的cookie(即在主线程中捕获cookie并尝试在支持线程中传递它)。我已经阅读了文章

https://blazemeter.com/blog/queen-jmeters-built-componentshow-use-beanshell

但它在我的情况下不起作用。在实施上述链接中给出的逻辑时,有人可以帮助识别我在做什么错误 请查看以下我正在遵循的步骤

  Test Plan  
     - HTTP Cache Manager           
     - HTTP Header Manager         
     - HTTP Cookie Manager        
     - Main Thread(login page under main thread)                           
        - Login (BeanShell PostProcessor under login)   
           - BeanShell PostProcessor  
         import org.apache.jmeter.protocol.http.control.CookieManager;
         CookieManager manager = ctx.getCurrentSampler().getProperty("HTTPSampler.cookie_manager").getObjectValue();
         props.put("cookiecount", String.valueOf(manager.getCookieCount()));
         for (int i = 0; i < manager.getCookieCount(); i++)        
         {  
            props.put("cookie_name" + i, manager.get(i).getName());
            props.put("cookie_value" + i, manager.get(i).getValue());
            props.put("cookie_domain" + i, manager.get(i).getDomain());
            props.put("cookie_path" + i, manager.get(i).getPath());
            props.put("cookie_expires" + i, String.valueOf(manager.get(i).getExpires()));
            props.put("cookie_secure" + i, String.valueOf(manager.get(i).getSecure()));  
         }

     - Support Thread 1
          - BeanShell PreProcessor
              import org.apache.jmeter.protocol.http.control.CookieManager;
              import org.apache.jmeter.protocol.http.control.Cookie;
              import org.apache.jmeter.testelement.property.JMeterProperty;
    CookieManager manager = ctx.getCurrentSampler().getProperty("HTTPSampler.cookie_manager").getObjectValue();
    int count = Integer.parseInt(props.getProperty("cookiecount"));
    for (int i = 0; i < count; i++) {
        Cookie cookie = new Cookie(props.getProperty("cookie_name" + i), 
                  props.getProperty("cookie_value" + i),
                props.getProperty("cookie_domain" + i), 
                props.getProperty("cookie_path" + i),
                Boolean.parseBoolean(props.getProperty("cookie_secure" + i)),
                Long.parseLong(props.getProperty("cookie_expires" + i)));
                manager.add(cookie);
    }
    JMeterProperty cookieprop = ctx.getCurrentSampler().getProperty("HTTPSampler.cookie_manager");
    cookieprop.setObjectValue(manager);
    ctx.getCurrentSampler().setProperty(cookieprop);
           - HTTP Request

运行1个线程后 - 1个循环为两个线程获取不同的cookie,如下所示

- Main Thread 
  Cookie Data:
JSESSIONID=PvRSWmBXNp9y65njGkRWbLlxLM1pvxLzpnyjThQDny3pMy6Gkcjv!486373045

- Support Thread
  Cookie Data:
JSESSIONID=YVGsWmQSXdGt1xqfDDvlkgkHLpqJ3WRD2sDyqXp62rChfTDbM0Vj!486373045 

我已设置CookieManager.save.cookies = true。

1 个答案:

答案 0 :(得分:0)

只需为不同的线程组使用2个不同的HTTP Cookie Manager测试元素。

P.S。如果您已经设置了CookieManager.save.cookies=true属性并且知道了cookie名称 - 您可以使用__setProperty()函数来传递在线程组之间保存cookie值的变量,如:

  • 在第一个线程组中将变量转换为${__setProperty(JSESSIONID,COOKIE_JSESSIONID,)}

  • 等属性
  • 在第二个线程组中,将该属性称为${__P(JSESSIONID,)}

How to Use Variables in Different Thread Groups文章详细介绍了该方法。