Jmeter-如何操作DateTime类型变量?

时间:2014-05-20 10:23:09

标签: csv jmeter jexl

我们需要为每个样本的工作订单开始时间变量(WOStartTime)添加n分钟,有哪些可能的方法?

目前我们在jp @ gc中使用jexl函数 - 参数化控制器;

${__jexl(${__threadNum()}*8 + ${WOStartTime})}

其中WOStartTime是从CSV文件获取的日期时间;

并获得以下异常; 2014/05/20 15:44:11错误 - jmeter.functions.JexlFunction:评估表达式“1 * 8 + 5/20/2004 15:05”时发生错误  org.apache.commons.jexl.parser.ParseException:第17行第1行遇到“15”。 期待以下之一:     “||” ...     “要么” ...     “&安培;&安培;” ...     “和”......     “|” ...     “^”......     “&安培;” ...     “==”......     “eq”......     “!=”......     “ne”......     “<” ...     “lt”......     “>” 中...     “gt”......     “< =”......     “le”......     “> =”......     “ge”......     “+”......     “ - ”......     “*”......     “/”......     “div”......     “%”......     “mod”......     “;” ...     在org.apache.commons.jexl.parser.Parser.generateParseException(Parser.java:4176)

我们添加了一个BeanShell预处理器来操作datetime变量;

woStartDate=vars.get("WOStartTime");
StartTime=vars.get("Start");
EndTime=vars.get("End");


Date NewStartTime ; 


if (StartTime == null){
    StartTime =woStartDate;
    print("StartTime == null");
}
else    {
    NewStartTime=StartTime;
    NewStartTime.setTime(NewStartTime.getTime()+2); 
    StartTime=NewStartTime;

}


print(StartTime);

vars.put("Start", StartTime);

    EndTime=StartTime;
    EndTime.setTime(NewStartTime.getTime()+5); 
vars.put("End", EndTime);

StartTime始终为NULL ,但在第二个示例的 vars.put(“Start”,StartTime)之后,这不应该为NULL,需要帮助才能解决问题;

2 个答案:

答案 0 :(得分:2)

可能是因为你没有正确使用StartTime。你可以使用

  

用户定义的变量

然后你进入你的StartTime,之后你就可以在你的BeanShell中使用它了

StartTime="${Start}"

然后使用java代码转换并获取所需的格式日期,例如:

import java.text.DateFormat; 
import java.text.SimpleDateFormat; 
import java.text.ParseException; 
import java.util.Date; 


SimpleDateFormat format = new SimpleDateFormat("dd-MM-yy:HH:mm"); 

Date OriginalDepositDate = format.parse("${datePlanificationService}"); 
long dateConverti=OriginalDepositDate.getTime();
return dateConverti;

我希望这会有所帮助

答案 1 :(得分:2)

您的Beanshell脚本似乎遇到了问题。

  1. JMeter变量以String形式出现,您需要将它们转换为Date
  2. +2+5运算符正在添加毫秒,而不是分钟
  3. 如果未设置前3行中的一个变量,则脚本将不会继续。
  4. 有关详细信息和更正,请参阅下面的更新脚本:

        import java.text.SimpleDateFormat;
        import java.util.Calendar;
        import java.util.Date;
    
        vars.put("WOStartTime", "1970-01-01 12:00");
        vars.put("Start", "1970-01-01 12:00");
        vars.put("End", "1970-01-01 12:00");
        Date woStartDate = null;
        Date StartTime = null;
        Date EndTime = null;
    
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-mm-dd HH:mm");
    
        try {
            woStartDate = sdf.parse(vars.get("WOStartTime"));
        } catch (NullPointerException ex) {
            System.err.println("WOStartTime is not defined");
        }
        try {
            StartTime = sdf.parse(vars.get("Start"));
        } catch (NullPointerException ex) {
            System.err.println("Start variable is not defined");
        }
        try {
            EndTime = sdf.parse(vars.get("End"));
        } catch (NullPointerException ex) {
            System.err.println("End variable is not defined");
        }
    
    
        Date NewStartTime = null;
    
    
        if (StartTime == null) {
            StartTime = woStartDate;
            System.out.println(("StartTime == null"));
        } else {
            Calendar cal = Calendar.getInstance();
            cal.setTime(StartTime);
            cal.add(Calendar.MINUTE, 2);
            NewStartTime = cal.getTime();
            StartTime = NewStartTime;
    
        }
    
    
        System.out.println(StartTime);
    
        vars.put("Start", sdf.format(StartTime));
    
        EndTime = StartTime;
        if (NewStartTime != null) {
            Calendar cal = Calendar.getInstance();
            cal.setTime(StartTime);
            cal.add(Calendar.MINUTE, 5);
            EndTime = cal.getTime();
        }
        vars.put("End", sdf.format(EndTime));
    

    如果添加Debug Sampler,您会看到以下内容:

    JMeterVariables:
    JMeterThread.last_sample_ok=true
    End=1970-07-01 12:07
    Start=1970-02-01 12:02
    WOStartTime=1970-01-01 12:00
    

    有关更多Beanshell提示和技巧,请参阅How to use BeanShell: JMeter's favorite built-in component指南。

    希望这会有所帮助。