Случайный выбор из файла 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.