Apache JMeter 中的会话/cookie 管理
Posted
技术标签:
【中文标题】Apache JMeter 中的会话/cookie 管理【英文标题】:Session/cookie management in Apache JMeter 【发布时间】:2010-11-26 05:51:14 【问题描述】:我们在应用程序中有一个简单的性能测试流程。
-
我们登录
根据某些条件进行搜索
重复搜索不同的参数。
我们正在使用 Jmeter 进行性能测试。我们需要运行多个线程来以可扩展的方式对此进行测试。
我们目前的安排方式是:
-Test Plan
- Thread Group
- Cookie Manager
- Login To application
- Search on param 1
- Search on param 2
- results summary table
- Summary report
所以基本上我们在计划级别上有汇总返回表和报告,而在线程组级别上有 cookie 管理器。
当我运行一个线程时,它运行良好并且完成得很好。当我将它扩展到多个线程时,一旦下一个线程启动,最后一个线程的会话就会失效。由于新生成的线程,这会导致所有已经运行的线程都失败。
我通过观察得出了这个结果: 1。如果我运行多个线程,则只有最后一个线程在结果摘要树中得到有效响应 2。如果我运行 2 个线程,加速周期为 10 秒,这意味着每个线程都有时间完成自己,那么它们都运行成功。
根据我的理解,每个线程都登录到应用程序中,并且由于 cookie 管理器处于线程级别,因此将分别为每个线程的会话 ID 维护值?但是是什么导致线程之间的会话 id 值被覆盖?
任何帮助将不胜感激。
【问题讨论】:
【参考方案1】:首先将您的代码更改为:
jmeter.properties
CookieManager.save.cookies=true
CookieManager.name.prefix=mycookie_
接下来,在与您的 java 采样器相同的线程组中添加一个 HTTP cookie 管理器。
然后在你的 java 采样器中添加:
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());
【讨论】:
【参考方案2】:复制自 jmeter 文档:
最后一个元素是一个 HTTP Cookie 经理 。 Cookie 管理器应该是 添加到所有网络测试 - 否则 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 将您的请求与 Cookie 管理器组合在一起。
【讨论】:
【参考方案3】:试试这个:
打开 JMeter 的 bin 文件夹中的 user.properties
编辑它并添加以下行:
CookieManager.check.cookies=false
保存并运行脚本。希望能解决你的问题。
【讨论】:
【参考方案4】:我认为安德烈的回答无济于事。他引用了每个请求将使用相同的 cookie 但根据 jmeter 手册:
每个 JMeter 线程都有自己的“cookie 存储区”。
据我了解,您希望每个线程共享相同的会话 ID cookie。所以在我看来你需要有两个线程组并连续执行它们。第一个线程组(单个线程只执行一次)应该登录并将会话 cookie 值保存到全局参数(也许您需要使用 jmeter 的脚本功能)。 然后在第二个线程组的 cookie 管理器中设置那个 cookie。
希望对您有所帮助。
【讨论】:
对此+1。 是否可以通过同一测试计划的不同线程组“传播”cookie?不可以。JMeter 线程旨在代表独立用户,因此 cookie 和变量对于线程来说是本地的。 根据 this。【参考方案5】:尝试增加加速时间。我遇到了同样的问题,其中加速时间约为 1 秒,然后我将其增加到每个线程 3 秒并且运行良好。
【讨论】:
以上是关于Apache JMeter 中的会话/cookie 管理的主要内容,如果未能解决你的问题,请参考以下文章