Java ApacheJMeter中的会话/cookie管理

Java ApacheJMeter中的会话/cookie管理,java,session,cookies,jmeter,session-cookies,Java,Session,Cookies,Jmeter,Session Cookies,我们在应用程序中有一个简单的性能测试流程 我们登录 基于某些条件的搜索 重复搜索不同的参数 我们正在使用Jmeter进行性能测试。我们需要运行多个线程来以可伸缩的方式测试这一点 我们目前的安排方式是: -Test Plan - Thread Group - Cookie Manager - Login To application - Search on param 1 - Search on param 2 - results summa

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

  • 我们登录
  • 基于某些条件的搜索
  • 重复搜索不同的参数 我们正在使用Jmeter进行性能测试。我们需要运行多个线程来以可伸缩的方式测试这一点

    我们目前的安排方式是:

    -Test Plan
      - Thread Group
          - Cookie Manager
          - Login To application
          - Search on param 1
          - Search on param 2
      - results summary table
      - Summary report
    
    所以基本上,我们在计划级别上有摘要返回表和报告,而在线程组级别上有cookie管理器

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

    我通过观察得出了这个结果:
    一,。若我运行多个线程,那个么在结果摘要树中只有最后一个线程得到了有效的响应
    二,。如果我使用两个线程运行,爬升周期为10秒,这意味着每个线程都有时间完成自身,那么这两个线程都会成功运行

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


    任何帮助都将不胜感激

    从jmeter文档中复制:

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

    来自中的“4.2.2逻辑控制器”章节


    编辑:我想您应该使用Cookie Manager将请求分组。

    尝试增加启动时间。我遇到了同样的问题,爬升时间约为1秒,然后我将它增加到每个线程3秒,运行正常

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

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

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

    希望能有所帮助。

    试试这个:

    打开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());
    }
    
    JMeterVariables jmv=JMeterContextService.getContext().getVariables();
    迭代器it=jmv.getIterator();
    while(it.hasNext()){
    Map.Entry v=it.next();
    System.out.println(“名称:+v.getKey()+”值:+v.getValue());
    }
    
    +1到这个。是否可以通过同一测试计划的不同线程组“传播”cookie?不可以。JMeter线程用于表示独立用户,因此cookie和变量是线程的本地变量。根据