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

时间:2017-11-12 11:01:57

标签: multithreading variables jmeter jmeter-plugins

我希望有一个用于线程间通信的全局变量。

当前设置:

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

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

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

方法2:使用InterThreadCommunication插件。由于我不知道系统中的何时何地,令牌将过期,因此不知道在线程间通信预处理器中何处调用。

enter image description here

2 个答案:

答案 0 :(得分:1)

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

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

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

    ${__P(token_${__threadNum},)}
    
  3. 参考文献:

答案 1 :(得分:0)

在使用jmeter属性的方法1中,您可以继续添加Critical Section Controller,其中相同的密钥作为尝试获取或刷新令牌的Samplers的父级。

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

请注意,它不适用于分布式测试:

  

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