Доступ к журналу воспроизведения для тестирования нагрузки? Jmeter Pitfalls и конкуренты

Контекст

Мы хотим использовать журналы доступа к журналу "replay" для генерации тестов нагрузки. JMeter пришел на ум, так как недавно я читал сообщения в блогах об использовании jmeter в облаке (например, запуская несколько экземпляров Amazon EC2 для генерации нагрузки)

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

Пробник журнала доступа

  • ДЕЛАЕТ:

    • воссоздавать сеансы, т.е. обрабатывать токен jsessionId (он пытается аппроксимировать сеансы по IP-адресу);
  • НЕТ:

    • обрабатывать данные POST (даже если вы можете настроить apache/tomcat для записи данных post в журнал доступа, jmeter access log sampler обрабатывает только "общий" формат журнала).

Опубликованные данные будут иметь большое значение для воссоздания фактической нагрузки.

Кроме того, в документации описывается пробоотбор журнала доступа как "альфа-код", хотя ему 8 лет. Он, похоже, не поддерживается. (Это больше, чем бета-версия Gmail).

HttpPerf

Еще одно сообщение в блоге указало мне на инструмент httpperf. Я начал читать на нем:

Резюме

  • Каков наилучший способ создания сценариев нагрузочного тестирования из реальных пользовательских данных?
  • Что сработало лучше всего для вас?
  • Плюсы и минусы различных инструментов?

Ответ 1

JMeter + HTTP Raw Request + Исходный источник данных для меня хорошо работает

Ответ 2

Я расскажу, как решить эту проблему с помощью нашего собственного инструмента LT, называемого Yandex Tank Он может обрабатывать простой access.log, но только запросы "GET". Когда вам нужно делать другие типы запросов, мы используем другие форматы боеприпасов (боеприпасы - это файл, содержащий все запросы, которые мы отправим на наш сервер). Пример:

342
POST / HTTP/1.1^M
Host: xxx.xxx.xxx.xxx:8080^M
Connection: keep-alive^M
Keep-Alive: 300^M
Content-Type: multipart/form-data; boundary=AGHTUNG^M
Content-Length: 1400^M
Connection: Close^M
^M
--AGHTUNG^M
Content-Disposition: form-data; name="fp"; filename="fp_tank"^M
Content-Type: application/octet-stream^M
Content-Transfer-Encoding: binary^M
...
--AGHTUNG--^M

Число ('342') в первой строке - это размер следующего запроса. Запрос - это необработанный формат. Вы можете написать простой script на своем любимом языке, который генерирует такие файлы боеприпасов из вашего access.log, а затем использовать его для тестирования нагрузки.

Такой формат боеприпасов делает его действительно гибким. Например, этот код генерирует боеприпасы из журналов FCGI (тела POST закодированы в Base64). Но, с другой стороны, вам придется вручную обрабатывать сеансы.

Ответ 3

Вы можете легко воспроизводить журналы доступа с данными POST, используя ZebraTester. Он имеет множество плагинов, похожих на JMeter, а также возможность добавлять встроенные скрипты, с помощью которых вы можете легко настроить целевую нагрузку POST, URL-адреса, метки времени и т.д. Из журналов доступа. Вы можете запускать тесты нагрузки непосредственно из инструмента локально или копировать записанный script в SaaS portal для запуска массового миллиона виртуальных нагрузок пользователя