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

  1. 我们登录
  2. 根据某些条件进行搜索
  3. 重复搜索不同的参数。

我们正在使用 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 值的覆盖呢?

任何帮助都感激不尽。

有帮助吗?

解决方案

从 jmeter 文档复制:

最后一个元素是HTTP Cookie Manager。应将Cookie Manager添加到所有Web测试中 - 否则Jmeter将忽略Cookie。 通过在线程组级别添加它,我们确保所有HTTP请求都将共享相同的cookie。

来自章节“4.2.2 逻辑控制器” http://jmeter.apache.org/usermanual/test_plan.html.

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

其他提示

我认为安德烈的回答没有帮助。他引用每个请求将使用相同的 cookie,但根据 jmeter 手册:

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

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

希望有帮助。

尝试增加斜坡上升时间。我遇到了同样的问题,启动时间约为 1 秒,然后我将其增加到每个线程 3 秒,并且运行良好。

尝试这个:

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

编辑它并添加以下行:

CookieManager.check.cookies=false

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

首先将您的代码更改为:

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());
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top