Apache JMeter中的会话/ cookiepipe理

我们在应用程序中有一个简单的性能testingstream程。

  1. 我们login
  2. 根据一些标准进行search
  3. 重复search不同的参数。

我们正在使用Jmeter进行性能testing。 我们需要运行多个线程以可扩展的方式进行testing。

我们目前安排的方式是:

-Test Plan - Thread Group - Cookie Manager - Login To application - Search on param 1 - Search on param 2 - results summary table - Summary report 

因此,基本上我们有总结返回表和报告目前在计划水平,而cookiepipe理器是在线程组级别。

当我运行一个线程运行良好,并完成。 当我缩放到多个线程时,只要下一个线程启动,最后一个线程的会话就会失效。 这会导致所有已经运行的线程由于新产生的线程而失败。

我看到了这个结果:
1.如果我运行多个线程,只有最后一个线程在结果汇总树中得到有效的响应
2.如果我用2个线程运行,并且以10秒的上升周期运行,这意味着每个线程都有时间完成自己,然后它们都成功运行。

根据我的理解,每个线程login到应用程序,并且由于cookiepipe理器在线程级别,价值将分别维护每个线程的会话ID? 但是什么导致线程之间的会话id值的覆盖?

任何帮助都感激不尽。

从jmeter文档复制:

最后一个元素是一个HTTP Cookiepipe理器。 一个Cookiepipe理器应该被添加到所有的Webtesting – 否则JMeter会忽略cookie。 通过在线程组级别添加它,我们确保所有HTTP请求将共享相同的cookie。

http://jmeter.apache.org/usermanual/test_plan.html的 “4.2.2逻辑控制器”一章。

编辑 :我想你应该使用http://jmeter.apache.org/usermanual/component_reference.html#Simple_Controller与Cookiepipe理器一起分组您的请求。

我认为安德烈的答案不能帮助。 他引用了每个请求将使用相同的cookies但是根据jmeter手册:

每个JMeter线程都有自己的“cookie存储区”。

据我了解这个问题,你希望每个线程共享相同的会话ID cookie。 所以在我看来,你需要有两个线程组,并连续执行它们。 第一个线程组(有一个只执行一次的单个线程)应该login并保存会话cookie值到一个全局参数(也许你需要使用jmeter的脚本function)。 然后在第二个线程组的cookiepipe理器中设置该cookie。

希望有所帮助。

尝试增加加速时间。 我遇到了同样的问题,加速时间大约1秒,然后我把它增加到每个线程3秒,它运行良好。

尝试这个:

打开JMeter的bin文件夹中的user.properties

编辑它并添加以下行:

 CookieManager.check.cookies=false 

保存并运行脚本。 我希望它能解决你的问题。

首先将您的代码更改为:

 jmeter.properties CookieManager.save.cookies=true CookieManager.name.prefix=mycookie_ 

接下来,在您的java sampler中添加一个HTTP cookiepipe理器在同一个线程组中。

然后在你的java sampler中添加:

 JMeterVariables jmv = JMeterContextService.getContext().getVariables(); Iterator<Map.Entry<String,Object>> it = jmv.getIterator(); while(it.hasNext()){ Map.Entry<String,Object> v = it.next(); System.out.println("name: " + v.getKey() + " value: " + v.getValue()); }