Случайный выбор из файла CSV в Jmeter

У меня очень большой CSV файл (8000+ элементов) URL-адресов, которые я читаю с помощью элемента конфигурации набора данных CSV. Он заполняет путь пробоотбора HTTP-запроса и выполняет итерацию с помощью контроллера while.

Это прекрасно, за исключением того, что я хочу, каждый пользователь (поток) выбирает случайный URL из списка URL CSV. Я не хочу, чтобы каждый поток использовал CSV-элементы последовательно.

Я смог добиться этого с помощью Random Order Controller с несколькими пробоотборами HTTP-запроса, однако 8000+ HTTP-пробоотборников действительно увязли с jmeter в непригодном состоянии. Поэтому я поместил URL-адрес Sampler HTTP в файл CSV. Не похоже, что я могу использовать контроллер случайных заказов с данными файла CSV. Итак, как я могу получить случайный выбор элементов данных CSV для потока?

Ответ 1

Есть еще один способ добиться этого:

  • создать отдельную группу потоков
  • в зависимости от того, чего вы хотите достичь:
    • добавить (случайный) счетчик циклов → это установит начальное смещение для группы потоков, которая выполняет работу
    • добавить счетчик циклов или навсегда и таймер и дать ему цикл, пока выполняется другая группа потоков. Эта группа потоков будет читать "псевдо" случайную строку

Это не очень случайный, файл по-прежнему читается последовательно, но ваш рабочий поток выполняет скачки в файле. Это сработало для меня: -)

Ответ 2

При чтении данных csv нет случайной функции выбора. Причина в том, что вам сначала нужно будет прочитать весь файл в памяти, чтобы сделать это, и что плохая идея с инструментом проверки нагрузки (любой инструмент проверки нагрузки).

Другие коммерческие инструменты решают эту проблему, автоматически перерабатывая данные. В JMeter вы можете добиться того же вручную, просто отсортировав данные с помощью произвольного поля. Если вы сортируете, скажем, фамилию, тогда результат будет эффективно случайным распределением.

Примечание. Если вы убедитесь, что для CSV Data Set Config установлено значение по умолчанию All Threads, то данные будут уникальными в области процесса JMeter.

Ответ 3

Я не уверен, что это сработает, но я все равно предложим это.

Почему бы не разделить URL-адреса в 100 разных CSV файлах. Затем в каждом потоке вы генерируете случайное число и используете этот номер для идентификации файла CSV для чтения с использованием функции __CSVRead.

CSVRead" > http://jmeter.apache.org/usermanual/functions.html#_CSVRead

Теперь единственная часть, я не уверен, что функция __CSVRead снова открывает файл каждый раз или использует один и тот же дескриптор файла в потоках.

Вы можете попробовать. Пожалуйста, поделитесь своими результатами.

Ответ 4

Как указывали другие ответы, причина, по которой вы не можете выбрать строку в случайном порядке, - это то, что вам нужно будет прочитать весь файл в памяти, который неэффективен.

Вместо того, чтобы пытаться заставить JMeter справиться с этим "на лету", почему бы не просто рандомизировать порядок файлов перед тем, как начать тест?

Язык сценариев, такой как perl, делает короткую работу:

 cat unrandom.csv | perl -MList::Util=shuffle -e 'print shuffle<STDIN>' > random.csv

Ответ 5

Очень прямое решение. В CSV файле добавьте еще один столбец (скажем, B) apply = RAND() в первой ячейке столбца B (скажем, B1). Это создаст случайное число с плавающей точкой. Перетащите ячейку (скажем, B1), чтобы применить все соответствующие URL-адреса. Сортировка столбца B. ваш URL будет отсортирован случайным образом. Удалить столбец B.