Apache JMeter中的会话/ cookie管理

Pri*_*ank 51 java cookies session jmeter session-cookies

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

  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
Run Code Online (Sandbox Code Playgroud)

因此,基本上我们在计划级别上有汇总返回表和报告,而cookie管理器存在于线程组级别.

当我为一个线程运行时,它运行良好并且完成得很好.当我将它扩展到多个线程时,一旦下一个线程启动,最后一个线程的会话就会失效.由于新生成的线程,这会导致所有已经运行的线程出现故障.

我通过观察得出了这个结果:
1.如果我运行多个线程,只有最后一个线程在结果摘要树
2中得到了有效的响应 .如果我运行2个线程,加速周期为10秒,这意味着每个线程都有时间完成本身,然后他们都成功运行.

根据我的理解,每个线程登录到应用程序,并且由于cookie管理器处于线程级别,因此将分别为每个线程的会话ID维护这些值?但是什么导致线程之间的会话id值被覆盖?

任何帮助都感激不尽.

And*_*ich 46

从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管理器一起分组.


ako*_*nov 6

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

每个JMeter线程都有自己的"cookie存储区".

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

希望有所帮助.

  • +1给这个.*是否可以通过同一测试计划的不同线程组"传播"cookie?不.JMeter线程旨在表示独立用户,因此cookie和变量是线程的本地.*根据[this](http://jmeter.512774.n5.nabble.com/HTTP-cookie-manager-td544523. HTML). (2认同)