如何在JMeter中生成日期范围内的随机固定间隔?

如何在JMeter中生成日期范围内的随机固定间隔?,jmeter,Jmeter,我有开始日期(例如2011-01-01)和结束日期(例如2011-12-31)。 我的所有数据都放在这个范围内 在测试计划中,我需要生成具有固定持续时间的随机间隔 (4例:1、3、7天和1个月) 该日期范围为[2011-01-01;2011-12-31]。 每种情况都必须定义权重 我应该如何获得随机开始日期和随机结束日期的固定间隔(并将这些随机日期放入两个变量) 我发现了java脚本的变体 初始脚本如下所示: var startDate = new Date(); startDate.setDa

我有开始日期(例如2011-01-01)和结束日期(例如2011-12-31)。 我的所有数据都放在这个范围内

在测试计划中,我需要生成具有固定持续时间的随机间隔 (4例:1、3、7天和1个月) 该日期范围为[2011-01-01;2011-12-31]。 每种情况都必须定义权重

我应该如何获得随机开始日期和随机结束日期的固定间隔(并将这些随机日期放入两个变量)

我发现了java脚本的变体

初始脚本如下所示:

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秒):

但此脚本生成的RandomEndDate等于RandomStartDate。 如果我单独生成RandomStartDate(没有与RandomEndDate连接的代码部分),脚本工作正常


你能帮帮我吗?有什么问题吗?

对于这种情况,我会选择将复杂性置于jMeter之外,并创建一个perl脚本,根据您的要求生成100对日期,并使用将它们读入jMeter变量。

对于这种情况,我会选择将复杂性置于jMeter之外,并创建一个perl脚本,根据您的需求生成100对日期,并使用将它们读入jMeter变量。

我找到了解决方案

这是正确的脚本,它允许使用固定长度(1天长的间隔)对随机间隔进行建模,并为其开始和结束获取两个变量${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);

我的错误是我以为时间是以秒为单位的,但它是以毫秒为单位的

我找到了解决办法

这是正确的脚本,它允许使用固定长度(1天长的间隔)对随机间隔进行建模,并为其开始和结束获取两个变量${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);

我的错误是我以为时间是以秒为单位的,但它是以毫秒为单位的

您可以在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()));

您可以在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()));

是的,我是这样想的。但我无法想象如何生成数据,然后如何确定生成的数据的最小数量足以在我的情况下进行均匀随机选择。因此,我找到了java脚本并尝试对其进行更改,但在获取随机间隔的结束日期(正确生成间隔的开始日期)方面存在一些小问题。也许吧,你能帮我吗?是的,我想过这样做。但我无法想象如何生成数据,然后如何确定生成的数据的最小数量足以在我的情况下进行均匀随机选择。因此,我找到了java脚本并尝试对其进行更改,但在获取随机间隔的结束日期(正确生成间隔的开始日期)方面存在一些小问题。可能是,您可以帮助我吗?Date实例使用毫秒作为值,因此要添加1天,您需要添加每天的毫秒数86400000,而不是每天的秒数。@rsp,谢谢。是的,这就是原因。我已经找到并修复了它。Date实例使用毫秒作为值,因此要添加1天,您需要添加每天的毫秒数86400000,而不是每天的秒数。@rsp,谢谢。是的,这就是原因。我已经找到并修复了它。是的,你的变体更紧凑!可能是,它应该是:randomTime1=startTime+(long)(Math.random()*(endTime startTime-86400000));randomTime2=randomTime1+86400000;一天的间隔?在我看来,脚本randomTime1=startTime+(long)(Math.random()*(endTime startTime));randomTime2=randomTime1+(long)(Math.random()*(endTime-randomTime1)+1);我们两个的约会都是随机的,对吗?谢谢你为什么喜欢用BeanShell来做这个?这一代人使用BeanShell和BSF的实际区别是什么?(我将脚本放在BSF中,但我不知道哪个预处理器更适合这种情况,以及为什么。如果您能解释其中的差异,我将不胜感激。)@user1900369谢谢。我做了一个小的更新。我没有更改randomTime1的代码,因为它已经有了max date
2012-12-30
@user1900369 BSF支持多种语言,不仅仅是Beanshell。我认为这是唯一的区别。我是在Beanshell写的,因为它对我来说已经足够好了使用JodaTime可以大大减少所需代码的数量是的,你的变体更紧凑!可能是,它应该是:randomTime1=startTime+(long)(Math.random()*(endTime startTime-86400000));randomTime2=randomTime1+86400000;一天的间隔?在我看来,脚本randomTime1=startTime+(long)(Math.random()*(endTime startTime));randomTime2=randomTime1+(long)(Math.random()*(endTime-randomTime1)+1);我们两个的约会都是随机的,对吗?谢谢你为什么喜欢用BeanShell来做这个?这一代人使用BeanShell和BSF的实际区别是什么?(我将脚本放在BSF中,但我不知道哪个预处理器更适合这种情况,以及为什么。如果您能解释其中的差异,我将不胜感激。)@user1900369谢谢。我做了一个小的更新。我没有更改randomTime1的代码,因为它已经有了max date
2012-12-30
@user1900369 BSF支持多种语言,不仅仅是Beanshell。我认为这是唯一的区别。我在Beanshell中编写了它,因为它对我来说已经足够好了。使用JodaTime可以大大减少所需代码的数量