1

サンプルごとに作業指示書の開始時間変数 (WOStartTime) に n 分を追加する必要があります。どのような方法がありますか?

現在、jp@gc - Parameterized Controller で 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" ... "<=" ... "ル" ... ">=" ... "げ" ... "+" ... "-" ... "*" ... "/" ... "div" ... "%" ... "mod" ... ";" ... org.apache.commons.jexl.parser.Parser.generateParseException(Parser.java:4176) で

datetime 変数を操作する 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ですが、2 番目のサンプルの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 変数は String として提供されるため、Date にキャストする必要があります
  2. +2オペレーターは分ではなくミリ秒を+5追加しています
  3. 最初の 3 行の変数の 1 つが設定されていない場合、スクリプトは実行されません。

詳細と修正については、以下の更新されたスクリプトを参照してください。

    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 の使用方法: JMeter のお気に入りの組み込みコンポーネントガイドを参照して、Beanshell のヒントとコツをさらに確認してください。

お役に立てれば。

于 2014-05-20T12:24:23.263 に答える