Проблемы с созданием таймера в jMeter / Groovy - PullRequest
0 голосов
/ 30 октября 2018

У меня есть значения меток времени в 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. Есть мысли?

Ответы [ 3 ]

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

Ваш код должен быть:

 // this returns the currents threads timestamp value from the csv
 long ts = vars["timestamp"].toLong();
 long wait = ts - {previous timestamp in csv}
 return wait;

Я не понимаю, откуда взялась эта величина:

{предыдущая метка времени в csv}

Наконец, вам нужно понять, как работает таймер:

Так что, если вы действительно хотите применить его между сэмплером, убедитесь, что ваш таймер установлен как дочерний элемент Flow Control Action :

JSR223 Timer as child of Flow Control Action

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

Привыкайте просматривать файл jmeter.log - обычно он должен содержать причину неправильного поведения или неудачи теста Groovy (или JMeter). Окно Log Viewer можно открыть, щелкнув желтый треугольник в верхнем правом углу графического интерфейса пользователя 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
}

Логика:

  1. Если определена previousTimestamp переменная - «сон» для времени дельты между предыдущей и текущей метками времени
  2. Если переменная previousTimestamp не определена - сохраните текущую переменную timestamp как previousTimestamp и не спите. Вы можете раскомментировать return 1000 строку, чтобы обеспечить "спящий" режим ожидания в течение 1 секунды

На всякий случай посмотрите руководство Математические функции и преобразование типов данных в Groovy , оно должно дать вам более полное представление о том, что вы пытаетесь реализовать.

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

Вместо возврата ожидания вы должны передать его в спящий метод:

 sleep(wait);

Для чтения CSV см. ответы

...