1

StartDate(たとえば2011-01-01)とEndDate(たとえば2011-12-31)があります。私のデータはすべてこの範囲に配置されます。

テストプランでは、この日付範囲[2011-01-01; 2011-12-31]。これらの各ケースには、定義された重みが必要です。

ランダムな開始日とランダムな終了日で固定間隔を取得するにはどうすればよいですか(そしてこれらのランダムな日付を2つの変数に入れます)?

私はjava-scriptのこの変種を見つけました

最初のスクリプトは次のとおりです。

var startDate = new Date();
startDate.setDate(1);
startDate.setMonth(0);
startDate.setYear(1991);
var startDateTime = startDate.getTime();

var endDate = new Date();
endDate.setDate(31);
endDate.setMonth(11);
endDate.setYear(2003);
var endDateTime = endDate.getTime();

var randomDate = new Date();
var randomDateTime = startDateTime+Math.random()*(endDateTime-startDateTime);
randomDate.setTime(randomDateTime);

var rndDate = randomDate.getDate();
var rndMonth = randomDate.getMonth() + 1;
var rndYear = randomDate.getFullYear();

if (rndDate.toString().length == 1)
rndDate = "0" + rndDate;
if (rndMonth.toString().length == 1)
rndMonth = "0" + rndMonth;

rndDate + "/" + rndMonth + "/" + rndYear;

ただし、固定間隔のランダムな開始日($ {RandomStartDate}と呼びます)を生成してから、間隔の長さを追加して終了日(この日付を$ {RandomEndDate}と呼びます)を取得する必要があります。

次に、スクリプトを1日間隔で変更しました(1日は86400秒です)。

var startDate = new Date();
startDate.setDate(01);
startDate.setMonth(01);
startDate.setYear(2011);
var startDateTime = startDate.getTime();

var endDate = new Date();
endDate.setDate(31);
endDate.setMonth(12);
endDate.setYear(2011);
var endDateTime = endDate.getTime();

var randomSDate = new Date();
var randomSDateTime = startDateTime+Math.random()*((endDateTime - 86400) -startDateTime );
randomSDate.setTime(randomSDateTime);

var randomEDate = new Date();
var randomEDateTime = (randomSDateTime +  86400);    //add 1 day long interval (86400 s)
randomEDate.setTime(randomEDateTime);   //convert number format to string format of date
var rndSDate = randomSDate.getDate();
var rndSMonth = randomSDate.getMonth()+1 ;
var rndSYear = randomSDate.getFullYear();

var rndEDate = randomEDate.getDate();      
var rndEMonth = randomEDate.getMonth()+1 ;
var rndEYear = randomEDate.getFullYear();

if (rndSDate.toString().length == 1)      
rndSDate = "0" + rndSDate;
if (rndSMonth.toString().length == 1)
rndSMonth = "0" + rndSMonth;

if (rndEDate.toString().length == 1)      
rndEDate = "0" + rndEDate;
if (rndEMonth.toString().length == 1)
rndEMonth = "0" + rndEMonth;

var RandomStartDate = rndSYear + "-" + rndSMonth + "-" + rndSDate;
vars.put ("RandomStartDate", RandomStartDate);

var RandomEndDate = rndEYear + "-" + rndEMonth + "-" + rndEDate;
vars.put ("RandomEndDate", RandomEndDate);

ただし、このスクリプトは、RandomStartDateと等しいRandomEndDateを生成します。 RandomStartDateを個別に生成する場合(RandomEndDateに接続されているコードの部分なしで)、スクリプトは正常に機能します。

私を手伝ってくれますか?なにが問題ですか?

4

3 に答える 3

6

はるかに少ないコードでBeanshellでそれを行うことができます:

import java.text.SimpleDateFormat;
import java.util.Calendar;

calendar = Calendar.getInstance();
calendar.set(2011, 0, 1);
startTime = calendar.getTimeInMillis();
calendar.set(2012, 11, 31);
endTime = calendar.getTimeInMillis();
randomTime1 = startTime + (long)(Math.random()*(endTime-startTime));
randomTime2 = randomTime1 + (long)(Math.random()*(endTime - randomTime1)+86400000);

formatter = new SimpleDateFormat("yyyy-MM-dd");
calendar.setTimeInMillis(randomTime1);
vars.put("start", formatter.format(calendar.getTime()));
calendar.setTimeInMillis(randomTime2);
vars.put("end", formatter.format(calendar.getTime()));
于 2012-12-21T20:25:32.320 に答える
1

このような状況では、複雑さをjMeterの外に置き、perlスクリプトを作成して、要件に応じて100ペアの日付を生成し、CSV DataSetConfigを使用してそれらをjMeter変数に読み込みます。

于 2012-12-20T16:47:12.157 に答える
0

私は解決策を見つけました!

これは正しいスクリプトであり、固定長(1日の長さの間隔)でランダムな間隔をモデル化し、開始と終了の2つの変数(${RandomStartDate}と${RandomEndDate})を取得できます。

var startDate = new Date();
startDate.setDate(01);
startDate.setMonth(01);
startDate.setYear(2011);
var startDateTime = startDate.getTime();

var endDate = new Date();
endDate.setDate(31);
endDate.setMonth(12);
endDate.setYear(2011);
var endDateTime = endDate.getTime();

var randomSDate = new Date();
var randomSDateTime = startDateTime+Math.random()*((endDateTime - 86400000) -startDateTime );
randomSDate.setTime(randomSDateTime);

var randomEDate = new Date();
var randomEDateTime = (randomSDateTime + 86400000);    //add 1 day long interval (86400000 ms)
randomEDate.setTime(randomEDateTime);   //convert number format to string format of date
var rndSDate = randomSDate.getDate();
var rndSMonth = randomSDate.getMonth()+1 ;
var rndSYear = randomSDate.getFullYear();

var rndEDate = randomEDate.getDate();      
var rndEMonth = randomEDate.getMonth()+1 ;
var rndEYear = randomEDate.getFullYear();

if (rndSDate.toString().length == 1)      
rndSDate = "0" + rndSDate;
if (rndSMonth.toString().length == 1)
rndSMonth = "0" + rndSMonth;

if (rndEDate.toString().length == 1)      
rndEDate = "0" + rndEDate;
if (rndEMonth.toString().length == 1)
rndEMonth = "0" + rndEMonth;

var RandomStartDate = rndSYear + "-" + rndSMonth + "-" + rndSDate;
vars.put ("RandomStartDate", RandomStartDate);

var RandomEndDate = rndEYear + "-" + rndEMonth + "-" + rndEDate;
vars.put ("RandomEndDate", RandomEndDate);

私の間違いは、時間が秒単位だと思っていたのですが、ミリ秒単位です!

于 2012-12-21T15:16:11.010 に答える