Как выполнить Ajax-запросы в JMeter?
Я хочу выполнить запросы Ajax в JMeter. Я записываю свой план тестирования с помощью JMeter и BlazeMeter, но никто не может обрабатывать запросы Ajax. Как я могу решить мою проблему?
Или есть какой-либо инструмент, который может отправлять параллельные запросы Ajax?
Спасибо заранее, М.А.
4 ответа
По умолчанию запросы Ajax не могут быть смоделированы JMeter, поскольку он не обрабатывает .js
файлы (начиная с версии 3.1). Вы должны явно добавить запросы (HTTP Samplers) для запросов AJAX.
использование Network
вкладка браузера (опция F12) и фильтрация трафика по xhr
, который показывает только запросы AJAX. Добавьте эти запросы в качестве примеров HTTP в сценарии в тот момент, который вам нужен в плане тестирования.
Браузер может обрабатывать .js
файлы, следовательно, запросы AJAX отправляются из браузера. Когда вы записываете сценарий с помощью HTTP Test Script Recorder
, поскольку вы используете браузер для навигации, даже AJAX-запросы (исходящие из js-файлов) также будут добавлены / записаны в План тестирования.
Так как JMeter не может обработать .js
файлы из-за ограничений, вручную добавьте запросы AJAX (только запросы HTTP Get или Post), используя HTTP Sampler, если вы создаете Test Plan
без HTTP Test Script Recorder
,
Примечание: если вы используете HTTP Test Script Recorder
нет необходимости добавлять их вручную, так как они уже записаны в плане тестирования.
У меня была такая же проблема после записи сэмплеров с использованием JMeter Proxy. Ответ был на этот пост в блоге: https://lincolnloop.com/blog/load-testing-jmeter-part-1-getting-started/ - см. Раздел Ajax-запросы.
Добавьте менеджер заголовка HTTP для запроса ajax и убедитесь, что вы отправляете X-Requested-With:XMLHttpRequest
заголовок.
Это невозможно, так как отсечение большего количества потоков, чем изначально определено в группе потоков, в настоящее время не поддерживается, функция отслеживается как ошибка 53159. AJAX-запросы являются "обычными" HTTP-запросами, поэтому JMeter может записывать и воспроизводить их, но когда дело доходит до асинхронного выполнения - вы не можете сделать это на данный момент. Варианты обходного пути находятся в:
- Используйте плагин WebDriver Sampler, чтобы каждый виртуальный пользователь JMeter запускал настоящий браузер. Предупреждение: этот способ очень ресурсоемкий.
- Используйте сценарии, то есть JSR223 PostProcessor для запуска AJAX-управляемых запросов через Apache HttpComponents
- Разработайте свой собственный сэмплер. Вы можете использовать текущий способ обработки встроенных ресурсов в качестве ссылки.
Узнайте больше: Как загрузить тестовые сайты с поддержкой AJAX/XHR с помощью JMeter
Вы можете сделать это, записав трафик http с помощью JMeter Proxy
http://jmeter.apache.org/usermanual/jmeter_proxy_step_by_step.pdf
но это возможно только для воспроизведения того же трафика, может быть проблематично для сеансов, куки-файлов... Лучшее решение - использовать WebDriver
https://jmeter-plugins.org/wiki/WebDriverTutorial/
https://jmeter-plugins.org/wiki/PluginInstall/
необходимый пакет - https://jmeter-plugins.org/files/packages/jpgc-webdriver-1.4.0.zip