Java / Jmeter将纪元增加15秒

时间:2018-10-03 15:33:11

标签: javascript java datetime jmeter beanshell

因此,我尝试使用以下代码将收集的时间增加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秒为单位的纪元时间?

3 个答案:

答案 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个问题:

  1. 我期望您将Calendar.SECONDS更改为Calendar.SECOND
  2. 您的变量名不相同,即在一个地方secondsFromEpoch,在另一个seoncdsFromEpoch
  3. 您不能使用Long作为vars.put()函数的参数,请执行以下操作之一:

    vars.put("secondsFromEpoch",String.valueOf(secondsFromEpoch));
    

    vars.putObject("secondsFromEpoch", secondsFromEpoch);
    
  4. 您在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)

java.time

我相信你在追求

    long secondsFromEpoch = Instant.now().plusSeconds(15).getEpochSecond();

出了什么问题?

您要添加两个毫秒值,这两个值都是从1970年开始计算的。这没有任何意义,并且给您未来的时间大约是今天的两倍。刚运行您的代码时,我得到了3,077,271,068秒,根据大纪元Unix时间戳转换器,它等于07/07/2067 @ 1:31 pm(UTC)。

我建议您不要使用过时的课程

您使用的日期和时间类-SimpleDateFormatCalendarDate-不仅已经过时,而且还存在设计问题,尤其是第一个非常麻烦。我建议您避免所有这些,而改用java.time。

链接