JMeter:如何在每个迭代的日期范围内将日期增加+1

时间:2014-08-29 13:32:49

标签: java date groovy jmeter

我希望在每次迭代时使用Jmeter增加1天2个日期,即

  • Date1:​​2014/01/01(iteration1 = 2014/01/02),(iteration1 = 2014/01/03)etc

  • 日期2:2014/09/01(iteration1 = 2014/09/02),(iteration1 = 2014/01/03)等

我该怎么做?

4 个答案:

答案 0 :(得分:3)

对于JMeter细节:

  1. 添加User Defined Variables元素以设置初始日期值,例如

    • DATE1 = 2014/03/03
    • DATE2 = 2014/9月1日
  2. 添加Beanshell PreProcessor作为您需要这些更新日期的请求的子项。将以下代码放入预处理器"脚本"是:

    import java.text.SimpleDateFormat; // necessary
    import java.util.Calendar; // imports
    import java.util.Date;
    
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd"); // define date format
    Date date1 = sdf.parse(vars.get("DATE1")); // get DATE1 from User Defined variables
    Date date2 = sdf.parse(vars.get("DATE2")); // get DATE2 from UDV
    
    Calendar cal = Calendar.getInstance(); // get Calendar instance
    cal.setTime(date1); // set Calendar's time to be DATE1
    cal.add(Calendar.DAY_OF_YEAR,1); // add 1 day to DATE1
    date1 = cal.getTime(); // set the new value for date1
    vars.put("DATE1",sdf.format(date1)); // update DATE1 JMeter variable
    
    cal.setTime(date2); // set Calendar time to DATE2
    cal.add(Calendar.DAY_OF_YEAR,1); // add 1 day
    date2 = cal.getTime(); // set the new value for date2
    vars.put("DATE2",sdf.format(date2)); // update DATE2 JMeter variable
    
    log.info("DATE1=" + vars.get("DATE1")); // print value of DATE1 to jmeter.log
    log.info("DATE2=" + vars.get("DATE2")); // print value of DATE2 to jmeter.log 
    
  3. 执行3次后,它提供以下输出:

    2014/08/30 10:11:13 INFO  - jmeter.util.BeanShellTestElement: DATE1=2014/01/02 
    2014/08/30 10:11:13 INFO  - jmeter.util.BeanShellTestElement: DATE2=2014/09/02 
    2014/08/30 10:11:13 INFO  - jmeter.util.BeanShellTestElement: DATE1=2014/01/03 
    2014/08/30 10:11:13 INFO  - jmeter.util.BeanShellTestElement: DATE2=2014/09/03 
    2014/08/30 10:11:13 INFO  - jmeter.util.BeanShellTestElement: DATE1=2014/01/04 
    2014/08/30 10:11:13 INFO  - jmeter.util.BeanShellTestElement: DATE2=2014/09/04 
    
    1. 如果需要,请将变量称为${DATE1}${DATE2}
    2. 有关Apache JMeter中Beanshell脚本的更多信息,请查看How to use BeanShell: JMeter's favorite built-in component指南

答案 1 :(得分:1)

在JMeter中:

0 /首先安装Groovy

  • http://groovy.codehaus.org/下载,截至今日的当前版本为2.3.6

  • 解压缩文件并找到文件夹 embeddable 并在jmeter / lib文件夹中复制groovy-all-2.3.6.jar

  • 重新启动JMeter

  • 那就是它!

1 /添加User Defined Variables元素以设置初始日期值,如下所示:

- DATE1=2014/01/01
- DATE2=2014/09/01

2 /为降低语法,性能和语言能力执行此操作的建议方法是使用Groovy + JSR223 PreProcessor,以这种方式配置:

enter image description here

3 /将此代码粘贴到JSR 223 PreProcessor中:

 final String DATE_PATTERN = "yyyy/MM/dd";  
 def d1Plus1 = Date.parse(DATE_PATTERN, vars["DATE1"] ) + 1;
 def d2Plus1 = Date.parse(DATE_PATTERN, vars["DATE2"] ) + 1;
 vars.put("DATE1", d1Plus1.format(DATE_PATTERN));
 vars.put("DATE2", d2Plus1.format(DATE_PATTERN));

4 /请将您的变量称为${DATE1}${DATE2}

5 /运行此计划显示此结果:

enter image description here

为什么Groovy是你最好的选择,请阅读:

答案 2 :(得分:0)

以下是一个例子:

  • Calendar添加若干天的功能:

    void addDay(Calendar calendar, int offsetDay) {
        calendar.add(Calendar.DAY_OF_YEAR, offsetDay);
    }
    
  • 5次迭代的例子(自2014/01/01起):

    Calendar calendar = Calendar.getInstance();
    calendar.set(2014, Calendar.JANUARY, 1);
    
    for (int i = 0 ; i < 5; i++) {
        addDay(calendar, 1);
    
        // Only for preview sample (if sdf = new SimpleDateFormat("yyyy/MM/dd");)
        System.out.println(sdf.format(calendar.getTime()));
    }
    

执行此代码的输出将是:

2014/01/02
2014/01/03
2014/01/04
2014/01/05
2014/01/06

希望它对你有所帮助。

答案 3 :(得分:0)

就像Groovy的善良一样简单:

Date end= new Date() + 5 // from now till +5 days

for( Date curr = new Date(); curr < end; curr++ ){
  println curr.format( 'dd.MM' )
}

给出

29.08
30.08
31.08
01.09
02.09