在jmeter中每隔x秒重定向线程组

redirecting thread group in every x sec in jmeter

我有一个要求,我需要在 Jmeter 的 If 控制器中检查经过的时间是否大于 x 秒。为此,我使用 System.CurrentTimeMillis 从这个 post 创建了一个计时器并将其放入预处理器

        boolean x=true;
        long starttime=System.currentTimeMillis();
          
        while(x){

        TimeUnit.SECONDS.sleep(1);
        long timepassed=System.currentTimeMillis()-starttime;
        long secondspassed=timepassed/1000;
        if(secondspassed==3)
        {
            secondspassed=0;
            starttime=System.currentTimeMillis();
            System.out.println(displayMinutes+"::"+secondspassed);
        }
       
        
     } 

但是当我运行 jmeter 测试计划时,它在计时器内循环并每 3 秒记录一次,但不会继续执行线程组中的其他步骤

我尝试使用 jmeter constant timer 但它暂停了整个线程组 x 秒。

我想要的是线程组继续其中的步骤,当线程组发出请求时,每 x 秒线程应该设置一个在 If 控制器中检查的 jmeter 属性 ,这会将它重定向到另一个线程组以生成令牌,然后再次返回到该线程。

我试图创建一个计时器,这样我就可以处理每 x 秒,然后使用该逻辑设置一个 属性 标志。

我怎样才能在 jmeter 中实现这个?

最简单的方法是在单独的线程组中执行此操作,就像您“尝试使用 jmeter constant timer”时所做的那样

该线程组将包括:

  1. Constant Timer 配置为暂停 3000 毫秒

  2. JSR223 Sampler 代码如下:

    SampleResult.setIgnore()
    props.put('your-property-name', 'your-property-value')
    

这样,第二个线程组将每 3 秒设置一个 属性,这似乎正是您要查找的内容。

在您的 If 控制器下,您可以重置或移除 属性 以便 If 控制器停止触发:

props.remove('your-property-name') // removes the property
props.put('your-property-name', 'some-other-value') // overwrites previous value

在上面的代码片段中,props 代表 Properties class, see Top 8 JMeter Java Classes You Should Be Using with Groovy article to learn more about this and other JMeter API shortcuts, in this props object JMeter keeps all its properties including user-defined ones and properties are global for all Thread Groups 的实例(实际上是整个 JVM)

上述方法对我来说不知何故不起作用。有用的是,在 JSR223 预处理器中,我把它放好并选择 groovy 作为语言

def st = new Date()
use(groovy.time.TimeCategory){  
   if (props.getProperty("myProp").equals("")){ 
   def et = st+ 10.seconds
   props.put("myProp", et.getTime() as String)
}

}

及以下在 IF 控制器的同一线程中

${_groovy(Long.valueOf(props.get("myProp"))-(new Date().getTime())<=0,)}

并在 JSR223 采样器中的 IF 控制器内放置此

props.put("myProp","")

然后在 Module 控制器中,在 IF 下,您可以重定向到您喜欢的位置。 我重定向到另一个线程中的 IF 控制器,并在此 IF 中使用 Flow Control Action(启动下一个线程循环选项)重定向回原始线程

并在测试计划的开头将 属性 标记为空白,如 props.put("myProp","")