【问题标题】:How to have a global variable in Jmeter for Inter thread communication?如何在 Jmeter 中有一个全局变量用于线程间通信?
【发布时间】:2017-11-13 13:52:19
【问题描述】:

我想要一个用于线程间通信的全局变量。

当前设置:

线程组 1:它是一个多用户线程,将访问流中的某些 API。

线程组 2:现在,根据我们当前的系统,auth-token 每 10 分钟刷新一次。所以在这个线程组中,我正在调用 refreshToken API。

Approach1:尝试使用 jmeter 属性。但是由于所有线程都是并行的,所以如果一个线程更新令牌,所有其他线程都会失败。

方法2:使用InterThreadCommunication 插件。由于不知道系统中何时何地token会过期,所以不知道在线程间通信预处理器中调用哪里。

【问题讨论】:

    标签: multithreading variables jmeter jmeter-plugins


    【解决方案1】:

    使用线程特定的属性,例如:

    1. 在“刷新令牌”线程组中指定单独的属性来保存每个虚拟用户的令牌,例如:

      ${__setProperty(token_${__threadNum},YOUR_TOKEN_VALUE_HERE,)}
      
    2. 在“PA API”线程组中访问单个令牌值,例如:

      ${__P(token_${__threadNum},)}
      

    参考资料:

    【讨论】:

      【解决方案2】:

      在使用 jmeter 属性的方法 1 中,您可以继续为尝试获取或刷新令牌的采样器添加具有与父级相同密钥的 Critical Section Controller

      这样,线程将等到上一个 (get/)update 令牌结束,然后获取更新的令牌。

      注意它在分布式测试中不起作用:

      Critical Section Controller 仅在一个 JVM 中获取锁,因此如果使用分布式测试,请确保您的用例不依赖于所有 JVM 阻塞的所有线程。

      【讨论】:

      • 但这意味着所有其他线程都必须等待,直到一个线程完成?因为根据截图,您可以看到 getToken 工作一次,然后所有其他请求都使用该令牌。
      • 这是您需要等到获得新令牌的要求
      • 也许我用错了方式。对此感到抱歉。我的要求是 - 所有线程并行运行。令牌对于每个线程都是唯一的。刷新令牌,需要并行运行并刷新每个唯一令牌。
      • 如果是每个线程,你可以用新的令牌值设置 JMeter 变量
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-16
      • 1970-01-01
      • 2017-07-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多