Как выполнить 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 может записывать и воспроизводить их, но когда дело доходит до асинхронного выполнения - вы не можете сделать это на данный момент. Варианты обходного пути находятся в:

  1. Используйте плагин WebDriver Sampler, чтобы каждый виртуальный пользователь JMeter запускал настоящий браузер. Предупреждение: этот способ очень ресурсоемкий.
  2. Используйте сценарии, то есть JSR223 PostProcessor для запуска AJAX-управляемых запросов через Apache HttpComponents
  3. Разработайте свой собственный сэмплер. Вы можете использовать текущий способ обработки встроенных ресурсов в качестве ссылки.

Узнайте больше: Как загрузить тестовые сайты с поддержкой 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

Другие вопросы по тегам