我们需要为每个样本的工作订单开始时间变量(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,需要帮助才能解决问题;
答案 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脚本似乎遇到了问题。
+2
和+5
运算符正在添加毫秒,而不是分钟有关详细信息和更正,请参阅下面的更新脚本:
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指南。
希望这会有所帮助。