Использует ли vars.putObject и vars.getObject дополнительную память в jmeter? - PullRequest
0 голосов
/ 27 ноября 2018

У меня есть план тестирования, который выглядит как

Test plan
  Jsr223 sampler
  {
    def lst = [100 elements];
    vars.putObject("lst",lst);    
  }
  loop controller(100 times)
  {
    Http request
      preprocessor
      {
        lst = vars.getObject("lst");
      }
  }

Теперь lst в препроцессоре использует ту же память, что и lst в сэмплере jsr223, или создает новую память и использует ее.Q2) Другой вопрос: очищается ли первая память в препроцессоре для каждой итерации или создается новая память для каждой итерации.

1 Ответ

0 голосов
/ 27 ноября 2018

В вашей настройке вы всегда ссылаетесь на один и тот же объект, который живет в JMeterVariables экземпляре класса, он не выделяет новую часть памяти и не освобождает ее во время новых итераций.

Однако учтите, что каждый поток JMeter (виртуальный пользователь) будет иметь этот объект в своем локальном хранилище , поэтому для 1 потока у вас будет 1 экземпляр, для 2 потоков- 2 экземпляра.

Таким образом, если у вас> 1 поток и используется один и тот же объект во всех потоках - лучше использовать props вместо переменных, как указано в документации :

Свойства не совпадают с переменными.Переменные являются локальными для потока;свойства являются общими для всех потоков

Если вы хотите очистить объект вручную, используйте функцию vars.remove () , где это необходимо, например:

vars.remove('lst')

Чтобы уменьшить потребление памяти, вы можете подумать о том, чтобы поместить свои объекты в файл CSV и перейти к Конфигурация набора данных CSV , которая не загружает полный файл в память и имеет гибкие параметры совместного использования значений по всем потокам.

...