JMeter - 在测试期间更改 Cookie 的值?

JMeter - Changing a Cookie's Value during a Test?

我已经在 J​​Meter *(版本 2.13) 中创建了一个测试计划。我能够将 Cookie 管理器添加到计划中,并在 HTTP 请求之间保留我的 cookie,效果很好。

我现在要做的是,如果可能的话,从一开始就保留一个 Cookie (*Called "JSESSIONID") 然后再保留一个 Cookie (*我们称之为 "MYID") 可以在 测试期间 进行修改。

我的第一次尝试如下:

+Thread Group
    -HTTP Request Defaults
    -HTTP Cookie Manager
    +HTTP Request - Goto HomePage
        -HTTP Cookie Manager - Set MYID="server_1"
    +HTTP Request - Load Login Page
        -HTTP Cookie Manager - Set MYID="server_2"
....and so on for about 3 more HTTP Requests....

但是,这样做只保留了初始 Cookie 管理器捕获的原始 Cookie,该管理器设置在线程组元素下。

Apache 的站点警告说:

"If there is more than one Cookie Manager in the scope of a Sampler, there is currently no way to specify which one is to be used. Also, a cookie stored in one cookie manager is not available to any other manager, so use multiple Cookie Managers with care."

我进行的另一个测试与第一个测试类似,除了我在测试开始时添加了一个用户定义变量元素,该元素将 MYID Cookie 的变量设置为一个服务器,然后大约 2 或 3 个 HTTP向下请求我有第二个用户定义的变量元素,这次将变量设置为另一台服务器。但是,在阅读了更多关于用户变量的内容之后,JMeter 在测试开始时只读取一次用户定义的变量。因此,我最后设置的变量将保留为我在第二个用户定义变量部分中设置的值。所以这种方式在测试过程中改变Cookie值是行不通的...

我也是从 ApacheJMeter 的网站上阅读这篇文章,这里是 Using Variables to Parametrize Tests,这似乎最接近我想要实现的目标。但是,从他们的示例来看,它似乎是用于在测试开始之前修改变量,例如从命令行设置变量...

总结:
总而言之,我想要实现的是发送带有 2 个 Cookie 的 HTTP 请求:
1. JSESSIONID
2. 我的ID
其中 JSESSIONID 从一开始就保持不变,而 MYID 我想在测试期间更改它的值 *(multiple如果可能的话).


让我知道这是否没有意义,我会尝试进一步解释。 任何想法或建议将不胜感激!

提前致谢,
马特

您可以使用 Beanshell 脚本来操作 cookie:

  1. 向您的 HTTP 请求添加 Beanshell PreProcessor
  2. 将以下代码放入预处理器的"Script"区域:

    import org.apache.jmeter.protocol.http.control.Cookie;
    import org.apache.jmeter.protocol.http.control.CookieManager;
    
    CookieManager manager = sampler.getCookieManager();
    
    for (int i = 0; i < manager.getCookieCount(); i++) {
      Cookie cookie = manager.get(i);        
      if (cookie.getName().equals("MYID")) {
            cookie.setValue(vars.get("foo"));
            manager.remove(i);
            manager.add(cookie);
            break;
    
      }
    
    }
    

以上代码将通过直接调用 CookieManager class 将 "MYID" cookie 值替换为 "foo" JMeter 变量值(有关所有可能的信息,请参阅 API 文档方法和字段)

查看 How to use BeanShell: JMeter's favorite built-in component 指南,了解有关 Apache JMeter 中 Beanshell 脚本的高级信息。