如何在 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.
使用特定于线程的属性,例如:
在 "Refresh Token" 线程组中指定单独的属性来为每个虚拟用户保存令牌,例如:
${__setProperty(token_${__threadNum},YOUR_TOKEN_VALUE_HERE,)}
在 "PA APIs" 线程组中访问单个令牌值,例如:
${__P(token_${__threadNum},)}
参考文献:
我想要一个用于线程间通信的全局变量。
当前设置:
线程组 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.
使用特定于线程的属性,例如:
在 "Refresh Token" 线程组中指定单独的属性来为每个虚拟用户保存令牌,例如:
${__setProperty(token_${__threadNum},YOUR_TOKEN_VALUE_HERE,)}
在 "PA APIs" 线程组中访问单个令牌值,例如:
${__P(token_${__threadNum},)}
参考文献: