首页 > 解决方案 > Jmeter - 如何在一个线程组中的所有线程的第一个请求中使用变量集

问题描述

我想只运行一次请求,并使用 Json 提取器从其响应中获取授权令牌,然后将该令牌用作在同一线程组下运行的另一个请求中的标头。

我尝试使用“设置线程组”,但变量值对主线程组不可用。所以,我在同一个线程组下使用了“ If Controller ”,条件如下:

${__groovy(ctx.getThreadNum() == 0 &&  vars.getIteration() == 1,)}

这使得特定请求只执行一次。但是,变量值仅适用于后续请求的一个线程,而不适用于所有线程。下面是结果树的图片:

在此处输入图像描述

我可以知道如何访问在所有线程的第一个请求中设置的变量值,而不仅仅是一个线程吗?

标签: testingjmeterperformance-testingload-testing

解决方案


根据JMeter 文档

属性与变量不同。变量是线程本地的;属性对所有线程都是通用的

因此,如果您想对所有线程(虚拟用户)使用单个令牌,则需要首先将其转换为 JMeter 属性,例如:

  1. 在 If Controller 下使用__setProperty() 函数将变量转换为属性
  2. 在您的 GET 请求中使用__P() 函数读取属性值

在线程之间共享数据的另一种方法(即使它们位于不同的线程组中)是使用线程间通信插件


推荐阅读