1

我们需要将 n Minutes 添加到每个样本的工单开始时间变量 (WOStartTime) 中,有哪些可能的方法?

目前我们在 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 :在第 1 行第 17 列遇到“15”。期待以下之一:“||” ...“或”...“&&”...“和”...“|” ... "^" ... "&" ... "==" ... "eq" ... "!=" ... "ne" ... "<" ... "lt" ... ">" ... "gt" ... "<=" ... "le" ... ">=" ... "ge" ... "+" ... "-" ... “*” ... “/” ... “div”...“%”...“mod”...“;” ...在 org.apache.commons.jexl.parser.Parser.generateParseException(Parser.java:4176)

我们添加了一个 BeanShell 预处理器来操作日期时间变量;

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,需要帮助来解决问题;

4

2 回答 2

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;

我希望这会有所帮助

于 2014-05-20T11:28:12.883 回答
2

您的 Beanshell 脚本似乎有问题。

  1. JMeter 变量以字符串形式出现,您需要将它们转换为 Date
  2. +2运营商+5正在增加毫秒,而不是分钟
  3. 如果前 3 行中的一个变量未设置,您的脚本将不会继续。

有关详细信息和更正,请参阅下面的更新脚本:

    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));

如果您添加一个调试采样器,您将看到如下内容:

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 提示和技巧,请参阅如何使用 BeanShell:JMeter 最喜欢的内置组件指南。

希望这可以帮助。

于 2014-05-20T12:24:23.263 回答