Java / Jmeter добавляет 15 секунд к эпохе - PullRequest
0 голосов
/ 03 октября 2018

Итак, я пытаюсь добавить 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);

Я попытался сделать это, используя препроцессор JSR223 в Jmeter, и я также попыталсяпрепроцессор Beanshell.Переменная, которую я создал в коде для использования внутри Jmeter, не возвращает никаких результатов.Это заставляет меня предположить, что с кодом что-то не так.

Что-нибудь заметно неправильное в том, что я написал?Или я могу выбрать другой путь, чтобы получить время эпохи в секундах + 15 секунд?

Ответы [ 3 ]

0 голосов
/ 03 октября 2018

Прежде всего, знаете ли вы или __ timeShift () функция ?Вы можете добавить 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. Вы используете Beanshell, пока , начиная с JMeter 3.1, вы должны использовать Groovy .Эквивалентный код Groovy будет выглядеть примерно так:

    use (groovy.time.TimeCategory) {
        def plus15seconds = new Date() + 15.seconds
        vars.put('secondsFromEpoch', plus15seconds.getTime() as String)
    } 
    
0 голосов
/ 03 октября 2018

java.time

Я полагаю, что вы после

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

Что пошло не так?

Вы добавляете два значения в миллисекундах, которые считаются с эпохи 1970 года.Это не имеет смысла и дает вам время в будущем, примерно вдвое больше, чем сегодня.Когда я только что запустил ваш код, я получил 3 077 271 068 секунд, что в соответствии с Epoch Unix Time Stamp Converter равно 07/07/2067 @ 13:31 (UTC).

Я советую вам этого не делатьиспользуйте устаревшие классы

Используемые вами классы даты и времени - SimpleDateFormat, Calendar и Date - не только давно устарели, но и имеют проблемы с дизайном, особенно первый, как известно, проблематичен.Я рекомендую вам избегать их всех и использовать вместо этого java.time.

Ссылки

0 голосов
/ 03 октября 2018

Вы можете создать экземпляр java.time.Instant из времени, которое вы собрали:

Long epochMillisYouCollected = ...
Instant instant = Instant.ofEpochMilli(epochYouCollected);

, затем плюс 15 секунд и вернуть секунды из эпохи:

long secondsSinceEpoch = instant.plusSeconds(15).getLong(ChronoField.INSTANT_SECONDS);
...