JMeter: нагрузочное тестирование HTTP POST с последующим HTTP GET - PullRequest
0 голосов
/ 06 марта 2012

Я оцениваю производительность моей транспортной библиотеки, и будет полезно, если я получу предложения по следующим вопросам:

Я использую сэмплер Junit для выполнения следующих действий:

Тест HTTP POST: я отправляю запрос HTTP POST: это приведет к записи в БД. Я должен оценивать все параметры (пропускная способность, среднее время отклика) для операции POST + DB_WRITE. В ответ на этот запрос POST я получаю уникальный идентификатор. Поэтому, если я отправлю 1000 успешных POST-запросов, у меня будет 1000 уникальных идентификаторов.

Теперь мой вопрос: как я могу использовать эти уникальные идентификаторы для моего следующего тестового примера, выполнить HTTP GET для каждого из созданных уникальных идентификаторов.

Я могу разобрать ответ HTTP POST и записать уникальный идентификатор в файл и попробовать использовать этот файл для моего теста HTTP GET. Но проблема в том, что если я создаю группу потоков из 10 различных потоков, при записи файла будут возникать проблемы с синхронизацией.

Есть ли какой-нибудь PostProcessor, который я могу использовать для записи результатов в файловой системе?

Ответы [ 2 ]

3 голосов
/ 06 марта 2012

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

Логика следующая:

  1. выполнить ваш запрос POST;
  2. ответ синтаксического анализа, возвращенный из POST - с использованием Regular Expression Extractor или любого другого постпроцессора , прикрепленного к запросу - для извлечения вашего идентификатора;
  3. сохранить извлеченный идентификатор в уникальной для пользователя / уникальной для потока переменной - в том же постпроцессоре;
    как это сделать для Regular Expression Extractor, смотрите ниже: ${__javaScript('${username}'+'UnicID')} генерирует уникальную переменную для каждого пользователя / потока, чтобы избежать помех в многопользовательских случаях;
    кажется, что может также использовать функцию threadNum вместо переменной $ {username};
  4. если запрос POST завершен успешно, ID извлечен и сохранен в переменной - выполнить ваш запрос GET, если извлеченный идентификатор используется в качестве параметра;
    используйте конструкцию ${__V(${username}UnicID)} для возврата ранее сохраненного идентификатора.

Вы также можете добавить Debug PostProcessor в сэмплер POST-запросов - для мониторинга сгенерированных переменных и их значений.

Кажется, это все.

<strong>Thread Group</strong> Number of Threads = X Loop Count = N . . . <strong>HTTP Request POST</strong> <strong>checkingReturnCode</strong> // Response Assertion <strong>extractUniqueID</strong> // Regular Expression Extractor (e.g.) Reference Name = ${__javaScript('${username}'+'UnicID')} Regular Expression = ... Template = $1$ Match No. = 1 Default Value = NOTFOUND <strong>IF Controller</strong> // execute GET only if POST was successful Condition = ${JMeterThread.last_sample_ok} // you may change this to verify that variable with extracted ID is not empty <strong>HTTP Request GET</strong> param = ${__V(${username}UnicID)} . . .

Надеюсь, это поможет.

0 голосов
/ 06 марта 2012

Проблем с синхронизацией не возникнет (они решаются файловой системой).В каждом потоке (который является POST-ing) вы должны открыть свой файл для записи и добавить к нему новую строку.Опять же, не беспокойтесь о синхронизации, об этом позаботится ОС.

...