We need to add n Minutes to a work order start time variable (WOStartTime) for every sample, what are possible ways?
Currently we are using jexl function in jp@gc - Parameterized Controller;
${__jexl(${__threadNum()}*8 + ${WOStartTime})}
where WOStartTime is a datetime fetched from a CSV file;
and getting following exception; 2014/05/20 15:44:11 ERROR - jmeter.functions.JexlFunction: An error occurred while evaluating the expression "1*8 + 5/20/2004 15:05" org.apache.commons.jexl.parser.ParseException: Encountered "15" at line 1, column 17. Was expecting one of: "||" ... "or" ... "&&" ... "and" ... "|" ... "^" ... "&" ... "==" ... "eq" ... "!=" ... "ne" ... "<" ... "lt" ... ">" ... "gt" ... "<=" ... "le" ... ">=" ... "ge" ... "+" ... "-" ... "*" ... "/" ... "div" ... "%" ... "mod" ... ";" ... at org.apache.commons.jexl.parser.Parser.generateParseException(Parser.java:4176)
We have added a BeanShell Preprocessor to manipulate datetime variable;
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 is always NULL , but after vars.put("Start", StartTime) for second sample this should not be NULL, need help to resolve the issue;
It seems that you're having issues with your Beanshell script.
+2
and +5
operators are adding milliseconds, not minutesRefer to updated script below for details and corrections:
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));
If you add a Debug Sampler you'll see something like:
JMeterVariables:
JMeterThread.last_sample_ok=true
End=1970-07-01 12:07
Start=1970-02-01 12:02
WOStartTime=1970-01-01 12:00
See How to use BeanShell: JMeter's favorite built-in component guide for more Beanshell tips and tricks.
Hope this helps.