我希望有一个用于线程间通信的全局变量。
当前设置:
线程组1:它是一个多用户线程,将访问流中的某些API。
线程组2:现在,根据我们当前的系统,auth-token每10分钟刷新一次。所以在这个线程组中,我调用了refreshToken API。
方法1:尝试使用jmeter属性。但由于所有线程都是并行的,因此如果一个线程更新令牌,则所有其他线程都会失败。
方法2:使用InterThreadCommunication插件。由于我不知道系统中的何时何地,令牌将过期,因此不知道在线程间通信预处理器中何处调用。
答案 0 :(得分:1)
使用特定于线程的属性,例如:
在“刷新令牌”中,线程组指定各个属性以保存每个虚拟用户的令牌,如:
${__setProperty(token_${__threadNum},YOUR_TOKEN_VALUE_HERE,)}
在“PA API”中,线程组访问各个令牌值,如:
${__P(token_${__threadNum},)}
参考文献:
答案 1 :(得分:0)
在使用jmeter属性的方法1中,您可以继续添加Critical Section Controller,其中相同的密钥作为尝试获取或刷新令牌的Samplers的父级。
这样,线程将等到上一个(get /)更新令牌结束,然后获取更新的令牌。
请注意,它不适用于分布式测试:
Critical Section Controller仅在一个JVM中获取锁,因此如果使用分布式测试,请确保您的用例不依赖于所有JVM阻塞的所有线程。