如何跨不同的线程组维护sessionid

时间:2014-03-17 10:05:07

标签: json performance testing jmeter performance-testing

我正在使用JSON进行API测试。 我的Jmeter测试计划如下所示:

Test Plan 
   Thread Group 1 (run once) 
      - Login 
   Thread Group 2 (I will run this multiple times) 
      - Do some opeartion 
   Thread Group 3 (run once) 
      - Logout 

我想将sessionid从线程组1传递给线程组2和3。

4 个答案:

答案 0 :(得分:0)

要提取sessionId,请使用Regular Expression Extractor

答案 1 :(得分:0)

您可以使用以下代码使用Jmeter中的 beanshell后处理器侦听器元素将值传递给另一个线程组

保存变量的Behellhell代码

import org.apache.jmeter.util.JMeterUtils;
JMeterUtils.setProperty("propname", "value");

从另一个线程组中检索变量的Beanshell代码

import org.apache.jmeter.util.JMeterUtils;
vars.put("localvariable", JMeterUtils.getProperty("propname"));
var testVar=vars.get("localvariable");
log.info("@ NEXT THREAD GROUP value="+testVar); 

使用Jmeter's getprperty(),setproperty() API传递值的代码。您也可以使用JMeter插件进行线程间通信。

希望这会有所帮助。 :)

答案 2 :(得分:0)

How to use Beanshell指南包含在不同线程组之间共享Cookie的示例,向下滚动到Advanced Examples部分。

如果你"会话"假定基于cookie的会话您需要执行以下操作:

  1. HTTP Cookie Manager添加到测试计划(或者如果您愿意,可以添加每个线程组)
  2. 通过将 jmeter.properties 文件中的CookieManager.save.cookies属性设置为true告诉Cookie管理器将Cookie保存为变量,该文件位于JMeter的/ bin文件夹下安装或将其作为命令行参数传递,如下所示

    jmeter -JCookieManager.save.cookies=true -n ... -t ... -l ... 
    

答案 3 :(得分:0)

另一种方法是只有一个线程组而不是三个,并将CookieManager添加到线程组。让Loop Controller多次运行该操作。

您的测试可以结构化为:

Test Plan 
  Thread Group
  - Cookie Manager
  - Login 
  - Loop Controller (run this multiple times) 
    - Do some operation  
  - Logout