Apache JMeter中的会话/cookie管理

2022-08-31 19:57:01

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

  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 值被覆盖?

任何帮助将不胜感激。


答案 1

从 jmeter 文档复制:

最后一个元素是 HTTP Cookie 管理器 。应将 Cookie 管理器添加到所有 Web 测试中 - 否则 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管理器分组在一起。


答案 2

我认为安德烈的回答无济于事。他引用每个请求将使用相同的cookie,但根据jmeter手册:

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

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

希望有所帮助。


推荐