Java/Jmeter 将 15 秒添加到 epoch

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


阿晨1998
浏览 140回答 3
3回答

12345678_0001

您可以java.time.Instant从收集时间开始创建实例:Long epochMillisYouCollected = ...Instant instant = Instant.ofEpochMilli(epochYouCollected);然后加上 15 秒并从纪元返回秒数:long secondsSinceEpoch = instant.plusSeconds(15).getLong(ChronoField.INSTANT_SECONDS);

幕布斯6054654

首先,你知道__timeShift() 函数吗?您可以将 15 秒添加到当前时间戳并将其存储到一个变量中,就像${__timeShift(,,P15S,,secondsFromEpoch)}如果出于任何原因您想继续编写脚本,则您的代码存在(至少)4 个问题:我的期望是您应该更改Calendar.SECONDS为Calendar.SECOND您的变量名称不相同,即在您拥有的一个地方secondsFromEpoch,在另一个地方seoncdsFromEpoch您不能使用Long作为vars.put()函数的参数,请执行以下操作之一:vars.put("secondsFromEpoch",String.valueOf(secondsFromEpoch));或者vars.putObject("secondsFromEpoch", secondsFromEpoch);您正在使用 Beanshell,而从 JMeter 3.1 开始,您应该使用 Groovy。等效的 Groovy 代码类似于:use (groovy.time.TimeCategory) {    def plus15seconds = new Date() + 15.seconds    vars.put('secondsFromEpoch', plus15seconds.getTime() as String)} 

梦里花落0921

时间我相信你在追求    long secondsFromEpoch = Instant.now().plusSeconds(15).getEpochSecond();什么地方出了错?您要添加两个毫秒值,这两个值都是从 1970 年开始计算的。这是没有意义的,并且让你在未来的时间大约是今天的两倍。当我刚刚运行你的代码时,我得到了 3 077 271 068 秒,根据 Epoch Unix Time Stamp Converter 等于 07/07/2067 @ 1:31pm (UTC)。我建议你不要使用过时的课程你正在使用的日期和时间类- SimpleDateFormat,Calendar和Date-不仅早已过时,他们也有设计上的问题,特别是第一是出了名麻烦。我建议您避免所有这些并使用 java.time 代替。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java