Задать вопрос

Как отправить с помощью JMetr POST запрос на URL, с данными из файла (файлов)?

Доброго всем дня!

Опыта применения JMeter нет, пока и к сожалению.

Имеется директория с текстовыми файлами, каждая строка в котором есть тело POST запроса. Каждый файл содержит запросы одного клиента, т.е. файл=клиент.

Прошу совета или информации по решению задачи автоматизированной отправки
средствами JMeter данных из файлов на заданный URL.

Замечательно если получится управлять параметрами:
1. Количество одновременно "работающих" клиентов (файлов)
2. Периодичность отправки запросов.

Спасибо.
  • Вопрос задан
  • 3697 просмотров
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 1
@polarnik
Тестировщик
Доброго дня.

Про загрузку тела запроса из файла
В компоненте HTTP Request есть особое поведение для поля File Path:, как раз для отправки полного тела запроса из файла:

Name of the file to send. If left blank, JMeter does not send a file, if filled in, JMeter automatically sends the request as a multipart form request.

If it is a POST or PUT or PATCH request and there is a single file whose 'Parameter name' attribute (below) is omitted, then the file is sent as the entire body of the request, i.e. no wrappers are added. This allows arbitrary bodies to be sent. This functionality is present for POST requests, and also for PUT requests. See below for some further information on parameter handling.


Эту возможность особенно удобно использовать при отправке больших запросов с минимальным количеством оперативной памяти. Иначе бы пришлось хранить большое тело запроса в тесте, и загружать большие запросы в виде строк в память JMeter, а память всегда ценный ресурс.

Про загрузку набора файлов в качестве тел запросов
Рекомендую сделать так:
* использовать Directory Listing Config из JMeter Plugins, помещая им названия файлов в переменную
* а переменную указать в поле File Path компонента HTTP Request

Если использовать только стандартные средства, то можно сделать так:
* командой dir /B или ls -l или find * сформировать список имён файлов в виде файла, пусть его имя будет files.csv
* используя CSV Data Set Config загружать имена файлов в переменную
* а переменную указать в поле File Path компонента HTTP Request

Про возможность управления частотой отправки
Тут разные подходы.
Самый простой такой - просто использовать Thread Group с параметрами:
* Action to be taken after a Sampler error: Start Next Thread Loop
* Number of Threads: 80000
* Ramp-up Period: 10000
* Loop Count: 1
* Delay Thread creation until needed: [v]
* Scheduler: [v]
* Duration (seconds): 300
* Startup delay (seconds): 0

что получится - JMeter будет знать, что за 10 000 секунд надо выполнить 80 000 запусков, то есть будет работать с частотой 8 запусков в сек. Всё частота контроллируется. Космического значения 80 000 thread-ов не пугайтесь, ведь стоит галочка Delay Thread creation until needed: [v].
А тест будет выполняться с такой частотой 300 сек или 5 минут (не 10 000 сек).

Есть вариант контроля нагрузки, через расчет количества потоков и пауз между выполнениями операций в них.
Классический вариант - использовать
* Ultimate Thread Group
* Test Action (сейчас называется Flow Control Action)
* Constant Throughput Timer
Инструкцию написал про такую связку:
* https://loadtestweb.wordpress.com/2017/08/23/pacing/

В качестве альтернативы можно использовать вариант с точным выполнением заданного количества запросов за интервал времени:
* используя Precise Throughput Timer вместо Constant Throughput Timer

Или четвертый, с использованием дополнительных плагинов:
* Concurrency Thread Group
* Throughput Shaping Timer
* Schedule Feedback Function

(но я так ещё не пробовал)

Резюме
Таким образом можно решить все задачи:
  • Отправить запрос с телом из указанного файла
  • Файлы брать из указанного каталога
  • Контролировать интенсивность отправки
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы