【问题标题】:Share Variables Within JMeter Thread Group在 JMeter 线程组内共享变量
【发布时间】:2023-03-25 23:23:01
【问题描述】:

我有一个线程组,它同时运行多个线程。 每个线程都使用 csv 文件中的 ID 发出请求。 因此,随着时间的推移,线程组中的不同线程最终会发出具有相同 ID 的请求。 我想将返回的 cookie 用于请求中的特定 ID,即使它是由不同的线程创建的。

目前我有一个正则表达式提取器提取 cookie 值,它根据其 ID 创建一个变量,例如,其中 ID 为 56789,cookie 为 1234,该变量将为 56789_1234。

然后我使用${__V(${id}_g1)} 拉取 cookie,该 cookie 与另一个请求的特定 ID 相关联。

(本质上是创建了一堆变量,前缀为 ID 和最后返回的 cookie 值,然后每个后续请求都可以使用 ID 为其请求提取正确的 cookie)

然后像这样创建cookie:

import org.apache.jmeter.protocol.http.control.CookieManager;
import org.apache.jmeter.protocol.http.control.Cookie;
CookieManager manager = sampler.getCookieManager();

Cookie AWSALB = new Cookie("AWSALB","${cookieVal}","domain","path",false,Long.MAX_VALUE);
manager.add(AWSALB);

(我使用 jp@gc 将 ${__V(${id}_g1)} 分配给 'cookieVal' - 设置变量操作)

但是,我仍然无法共享在所有线程中创建的变量范围。

我试过属性,但我相信它只适用于线程组之间,如果组连续运行。

我希望组内的所有线程都能够读取其他线程提取的所有变量。

【问题讨论】:

  • 您也可以使用 JMeter 属性在同一线程组内的线程之间共享值。

标签: multithreading cookies jmeter blazemeter


【解决方案1】:
  1. 您可以将每个线程(虚拟用户)“粘贴”到自己的 ID(或 CSV 中的一组 ID),即为每个用户使用单独的文件和 __CSVRead() 函数或单个文件和 __groovy() 函数来读取价值观
  2. 如果您仍想继续您的方法,请查看Inter-Thread Communication Plugin,它提供了一个FIFO 队列
  3. 另一种方法是使用JMeter Properties 如果 ID=cookie_value 的名称-值对的形式,如果 ID 没有 cookie 值 - 将值写入属性,如果有 - 从属性中读取值请求新 cookie 的次数

【讨论】:

    【解决方案2】:

    虽然尝试了属性,但我似乎并没有让它发挥作用。即使创建了属性(如 Debug Postprocessor 中所述),由于某种原因,我仍然无法在线程之间访问它们。

    但是我通过在请求之前和之后使用 Beanshell 采样器解决了这个问题,将单个 cookie 值写入每个 ID 的单个 txt 文件,其中 txt 文件名是 ID。每次任何线程使用此 ID 发出请求时,它都会更新相应 txt 文件中的值,然后在每次请求之前,读取该 ID 的特定 txt 文件以检索最后返回的 cookie。

    更新

    随着线程数量的增加,尝试同时访问/写入同一个 .txt 文件时线程被阻塞的可能性也在增加。

    我改用 __CSVRead(),到目前为止效果很好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-14
      • 2018-08-28
      • 2017-09-10
      • 1970-01-01
      • 2021-08-12
      相关资源
      最近更新 更多