У меня есть значения меток времени в файле csv, и я загружаю файл в ThreadgGoup в jMeter. Я использую сценарий JSR223 для расчета времени задержки между каждым потоком, но у меня проблемы с этим.
Я хочу запускать свои потоки, не основываясь на реальных данных, поэтому я использую временные метки из файла журнала csv. но я не знаю, как настроить уравнение для этого. Я читаю метку времени из csv в моем скрипте, и я знаю, что время ожидания должно равняться текущему значению метки времени - значению метки времени предыдущего потока, но как я могу это реализовать?
def long wait=0;
// this returns the currents threads timestamp value from the csv
def long ts = Double.valueOf(vars.get("timestamp")).longValue();
wait = ts - {previous timestamp in csv}
return wait;
Я использую groovy для написания сценариев, и в моей группе потоков у меня есть httpRequest, а в нем таймер JSR223. Есть предположения?
@ user7294900 Я уже проверял этот пост. этот парень использует постоянный таймер. Я не хочу этого. Я пытаюсь создать таймер, который будет изменять свое значение для каждого потока на основе временных меток, которые он читает в файле csv.
Вместо того, чтобы возвращать ожидание, вы должны передать его методу сна:
sleep(wait);
Для чтения CSV см. ответы.
Ваш код должен быть:
// this returns the currents threads timestamp value from the csv
long ts = vars["timestamp"].toLong();
long wait = ts - {previous timestamp in csv}
return wait;
Я не понимаю, откуда взялось это значение:
{previous timestamp in csv}
Наконец, вам нужно понять, как работает таймер:
Поэтому, если вы действительно хотите применять его между сэмплерами, убедитесь, что вы поместили свой таймер как дочерний элемент Действие управления потоком:
Привыкайте заглядывать в файл jmeter.log - обычно он должен содержать причину неправильного поведения или сбоя вашего теста Groovy (или JMeter). Окно Просмотр журнала можно открыть, щелкнув желтый треугольник в правом верхнем углу графического интерфейса JMeter.
Измените свой код, чтобы он выглядел так:
if (vars.get('previousTimestamp') != null) {
long ts = vars.get('timestamp') as Long
long wait = ts - (vars.get('previousTimestamp') as Long)
return wait
} else {
vars.put('previousTimestamp', vars.get('timestamp') as String)
//return 1000
}
Логика такова:
previousTimestamp
определена - «спящий» для дельта-времени между предыдущей и текущей отметками времени.previousTimestamp
не определена - сохранить текущую переменную timestamp
как previousTimestamp
и не спать. Вы можете раскомментировать строку return 1000
, чтобы обеспечить «спящий режим по умолчанию» в 1 секунду.На всякий случай ознакомьтесь с руководством Математические функции и преобразование типов данных в Groovy, оно должно дать вам больше информации о том, что вы пытаетесь реализовать.
См. stackoverflow.com/questions/47496012/…