如何在 Jmeter 中使用全局变量进行线程间通信?

How to have a global variable in Jmeter for Inter thread communication?

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

当前设置:

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

线程组 2:现在,根据我们当前的系统,授权令牌每 10 分钟刷新一次。所以在这个线程组中,我调用了refreshToken API。

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

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

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

这样线程会等到之前的(获取/)更新令牌结束,然后获取更新的令牌。

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

Critical Section Controller takes locks only within one JVM, so if using Distributed testing ensure your use case does not rely on all threads of all JVMs blocking.

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

  1. 在 "Refresh Token" 线程组中指定单独的属性来为每个虚拟用户保存令牌,例如:

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

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

参考文献: