因此,我尝试使用以下代码将收集的时间增加15秒:
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
Calendar cal = Calendar.getInstance();
cal.setTime(new Date());
long now = cal.getTimeInMillis();
cal.add(Calendar.SECONDS, 15);
long then = cal.getTimeInMillis();
long secondsFromEpoch = (then + now) / 1000;
vars.put("secondsFromEpoch",seoncdsFromEpoch);
我尝试使用Jmeter中的JSR223预处理器来执行此操作,并且还尝试了Beanshell预处理器。我在代码中创建的要在Jmeter内部使用的变量未返回任何结果。这使我认为代码有问题。
我写的东西有什么明显不正确的地方吗?还是我可以采取另一种方法来获取以秒+ 15秒为单位的纪元时间?
答案 0 :(得分:1)
您可以从收集开始创建java.time.Instant
实例:
Long epochMillisYouCollected = ...
Instant instant = Instant.ofEpochMilli(epochYouCollected);
然后加上15秒,并从纪元返回秒:
long secondsSinceEpoch = instant.plusSeconds(15).getLong(ChronoField.INSTANT_SECONDS);
答案 1 :(得分:1)
首先,您知道还是__timeShift() function?您可以在当前时间戳记上添加15秒,然后将其存储到${__timeShift(,,P15S,,secondsFromEpoch)}
如果出于任何原因要继续编写脚本,则代码中至少存在4个问题:
Calendar.SECONDS
更改为Calendar.SECOND secondsFromEpoch
,在另一个seoncdsFromEpoch
您不能使用Long作为vars.put()
函数的参数,请执行以下操作之一:
vars.put("secondsFromEpoch",String.valueOf(secondsFromEpoch));
或
vars.putObject("secondsFromEpoch", secondsFromEpoch);
您在since JMeter 3.1 you should be using Groovy时正在使用Beanshell。等效的Groovy代码类似于:
use (groovy.time.TimeCategory) {
def plus15seconds = new Date() + 15.seconds
vars.put('secondsFromEpoch', plus15seconds.getTime() as String)
}
答案 2 :(得分:1)
我相信你在追求
long secondsFromEpoch = Instant.now().plusSeconds(15).getEpochSecond();
您要添加两个毫秒值,这两个值都是从1970年开始计算的。这没有任何意义,并且给您未来的时间大约是今天的两倍。刚运行您的代码时,我得到了3,077,271,068秒,根据大纪元Unix时间戳转换器,它等于07/07/2067 @ 1:31 pm(UTC)。
您使用的日期和时间类-SimpleDateFormat
,Calendar
和Date
-不仅已经过时,而且还存在设计问题,尤其是第一个非常麻烦。我建议您避免所有这些,而改用java.time。