首页 文章

Apache JMeter中的会话/ cookie管理

提问于
浏览
48

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

  • 我们登录

  • 根据某些标准进行搜索

  • 重复搜索不同的参数 .

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

任何帮助都感激不尽 .

5 回答

  • 0

    从jmeter文档复制:

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

    来自http://jmeter.apache.org/usermanual/test_plan.html中的"4.2.2 Logic Controllers"章节 .

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

  • 45

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

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

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

    希望有所帮助 .

  • 0

    尽量增加加速时间 . 我遇到了同样的问题,其中加速时间约为1秒,然后我将每个线程增加到3秒并且运行正常 .

  • 6

    试试这个:

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

    编辑它并添加以下行:

    CookieManager.check.cookies=false
    

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

  • 1

    首先将代码更改为:

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

    接下来,在与java sampler相同的线程组中添加HTTP cookie管理器 .

    然后在你的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());
    }
    

相关问题