如何查看中频控制器的时差?

时间:2019-01-29 08:22:55

标签: jmeter

我正在测试需要每15分钟生成令牌ID的Web应用程序。

我在bean shell采样器的以下两个变量中分配了当前时间和当前时间+ 15分钟,这将为各个变量分配以毫秒为单位的日期时间。

String StartTime =“ $ {__ timeShift(,,,,)}”; String EndTime =“ $ {__ timeShift(,, PT15M ,,}}”;

现在,我想比较IF控制器中的时间差。如果时间差为15分钟(900000 ms),则IF控制器应执行以生成令牌ID。

我在不起作用的IF控制器中使用了如下所示的__eval函数。

${__eval(${EndTime})} - ${__eval(${StartTime})}  >= 900000

2 个答案:

答案 0 :(得分:0)

将此表达式与If Controller一起使用:

${EndTime} - ${StartTime} >= 900000

您可以选中my test plan example,它对我有用。

答案 1 :(得分:0)

您违反了JMeter最佳做法,即:

  1. since JMeter 3.1 users are encouraged to switch to JSR223 Test Elements and Groovy language期间使用Beanshell编写脚本
  2. documentation clearly states期间在If控制器中使用JavaScript:

      

    为了提高性能,建议检查Interpret Condition as Variable Expression并使用__jexl3__groovy评估为true或false或包含true或false的变量。 ${JMeterThread.last_sample_ok}可用于测试最后一个采样器是否成功

  3. 您要将JMeter Functions内联到脚本中并不是一个最佳主意,因为该函数可能会解析为导致编译失败的内容。
  4. 我也看不到您使用vars速记在哪里设置相关的JMeter变量。

假设以上所有条件

  1. 切换到JSR223 Sampler并使用以下代码:

    def StartTime = new Date() 
    use(groovy.time.TimeCategory) {
        def EndTime = StartTime + 15.minutes
        vars.put("StartTime", StartTime.getTime() as String)
         vars.put("EndTime", EndTime.getTime() as String)
    }
    
  2. 在If Controller中,使用以下__groovy() function

    ${__groovy((vars.get('EndTime') as long) - (vars.get('StartTime') as long) >= 90000,)}
    

    总体情况下,如果控制器配置只是为了以防万一:

    enter image description here

  3. 查看6 Tips for JMeter If Controller Usage文章是否有不清楚之处