JMeter может генерировать сэмплеры HTTP-запросов, выступая в качестве локального прокси-сервера для записи между браузером и авторизованным целевым приложением. В текущих версиях этот компонент называется HTTP(S) Test Script Recorder . Он записывает один путь браузера в контроллер записи, после чего скрипт должен быть очищен, сопоставлен, проверен и выполнен как тест на уровне протокола.

Проверяйте только те системы, которые принадлежат вам или которые вы имеете явное право оценивать. Записи могут содержать пароли, файлы cookie, токены и персональные данные. Предпочтительнее использовать тестовые учетные записи, удалять секретные данные перед обменом файлами JMX и соблюдать установленные ограничения нагрузки.

Что такое HTTP-прокси-сервер JMeter?

Регистратор прослушивает локальный порт, обычно это... 8888Браузер отправляет HTTP- и HTTPS-запросы на этот прокси-сервер, а JMeter преобразует соответствующий трафик в сэмплеры под управлением выбранного контроллера. Во время воспроизведения JMeter отправляет запросы напрямую; он не запускает браузер для каждого виртуального пользователя.

Почему нужно записывать сценарий, а не создавать его вручную?

  • Отслеживает реалистичный порядок запросов, перенаправления, формы и фоновые API-интерфейсы.
  • Выявляет вызовы XHR или fetch, которые легко пропустить.
  • Создает быстрый базовый уровень для сложного пользовательского сценария.
  • Уменьшает количество ошибок транскрипции в заголовках и параметрах.

Ручное создание API остается более удобным для небольшого документированного API. Запись помогает, когда поведение браузера в сети еще не изучено. Терминологию см. в нашем руководстве по типам прокси.

Как записать скрипт в JMeter 5.x

  1. Запустите JMeter в графическом режиме для создания скрипта.
  2. Добавьте группу потоков в план тестирования.
  3. Добавьте контроллер записи в группу потоков.
  4. Добавьте параметры HTTP-запросов по умолчанию и менеджер HTTP-cookie там, где это необходимо.
  5. Добавьте средство записи тестовых HTTP(S) скриптов и выберите контроллер записи в качестве целевого объекта.
  6. Используйте шаблоны включения/исключения для ограничения нерелевантного трафика.

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

Используйте чистый профиль браузера: Расширения, синхронизация, телеметрия и несвязанные вкладки создают избыточные запросы.

Шаг 1) Настройка HTTP-прокси-сервера

Recorder: выберите неиспользуемый локальный порт, например: 8888, укажите целевой контроллер и нажмите Начать.

Настройте тестовый браузер с использованием HTTP и HTTPS прокси-серверов. 127.0.0.1 и тот же порт. Если браузер работает в другой виртуальной машине или контейнере, localhost относится к этой среде; вместо этого используйте разрешенный доступный частный адрес.

Proxy host: 127.0.0.1
Proxy port: 8888

Include: https?://test.example.com/.*
Exclude: .*(.png|.jpg|.gif|.css|.woff2)(?.*)?$

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

Шаг 2) Запишите свою активность

  1. Запустите программу записи и доверяйте её временному сертификату только в изолированном тестовом браузере.
  2. Откройте авторизованную тестовую среду.
  3. Совершите одну чистую поездку в темпе, подходящем для человека.
  4. Запись следует немедленно прекратить после завершения всех деловых операций.
  5. Восстановите стандартные настройки прокси-сервера в браузере.

Переименуйте сэмплеры в соответствии с бизнес-действиями и сгруппируйте связанные запросы в разделе «Контроллеры транзакций». Удалите аналитику, рекламу, обновления браузера, виджеты чата и дублирующиеся статические ресурсы, если они явно не входят в область действия.

Проверьте каждый сэмплер на наличие секретных данных. Пароли должны поступать из защищенных данных среды выполнения, а для изменяющихся токенов требуется сопоставление.

Шаг 3) Запустите план тестирования

Перед добавлением нагрузки проверьте одного пользователя и одну итерацию. Временно используйте дерево результатов просмотра, проверьте перенаправления и тела ответов, а также добавьте утверждения для ожидаемого бизнес-результата. Один только HTTP 200 не доказывает успешность входа в систему или оформления заказа.

Threads: 1
Ramp-up: 1 second
Loop Count: 1

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

jmeter -n -t recorded-test.jmx -l results.jtl -e -o html-report

Каталог отчетов должен быть новым или пустым. Постепенно увеличивайте нагрузку и отслеживайте целевую систему, а также JMeter.

Шаг 4) Сохраните результат теста

Сохраните многоразовый план как .jmx Сохраните сгенерированные данные в отдельном файле:

  • ЯМХ: сэмплеры, контроллеры, утверждения, таймеры, переменные и конфигурация.
  • JTL: Исходные результаты анализа образцов.
  • HTML-панель управления: процентили, пропускная способность, ошибки и активные потоки.
  • Показатели сервера: Телеметрия ЦП, памяти, базы данных, очередей и служб.

Составьте версию плана, включив в нее несекретные свойства и тестовые данные. Запишите версии JMeter и Java, целевую сборку, среду, количество пользователей, период наращивания нагрузки и продолжительность.

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

Запись HTTPS-трафика и сертификатов

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

  1. Запустите средство записи тестовых скриптов HTTP(S).
  2. Найдите сгенерированный сертификат ApacheJMeterTemporaryRootCA.
  3. Импортируйте его как доверенный центр сертификации в изолированном профиле.
  4. Зафиксируйте пройденный HTTPS-маршрут.
  5. Удалите сертификат после завершения.

Привязка сертификатов, взаимное TLS, управляемые браузеры, мобильные приложения и новые транспортные протоколы могут блокировать перехват. Не ослабляйте меры безопасности в производственной среде. Используйте тестовую сборку, спецификацию API или утвержденный альтернативный метод перехвата.

Корреляция: Как сделать записанный сценарий воспроизводимым

Идентификаторы сессий, токены CSRF, состояние OAuth, подписи запросов и идентификаторы ресурсов изменяются между запусками. Корреляция извлекает новое значение из одного ответа и подставляет его в последующие запросы.

  1. Найдите ответ, который первым содержит динамическое значение.
  2. Добавьте инструмент для извлечения данных из JSON, CSS, XPath или регулярных выражений.
  3. Сохраните результат в именованной переменной JMeter.
  4. Замените последующие жестко заданные значения ссылкой на переменную.
  5. Ошибка должна быть явной, если при извлечении данных совпадений не обнаружено.
JSON Extractor
Variable: csrfToken
JSON Path: $.csrf.token
Default: NOT_FOUND

Later header:
X-CSRF-Token: ${csrfToken}

Параметризация предоставляет независимые пользовательские данные, часто из CSV-файлов. Корреляция фиксирует данные, генерируемые сервером во время выполнения. Для реалистичных планов обычно необходимы оба подхода.

Диагностика неисправностей

Проблема Вероятная причинафиксированный
Запросы не зарегистрированыНеправильный прокси-сервер, остановленный регистратор, конфликт портов или правило обхода.Подтвердите хост и порт, запустите регистратор и удалите исключения для целевых устройств.
Предупреждение HTTPSВременный сертификат CA отсутствует или истек.Сгенерируйте новый сертификат регистратора и импортируйте его только в тестовый профиль.
Большие пробкиРасширения, телеметрия, другие вкладки или общие шаблоныИспользуйте чистый профиль и уточните фильтры включения/исключения.
Повтор входа в систему завершается неудачей.Отсутствуют файлы cookie, токены, поток OAuth или корреляция.Добавьте менеджер файлов cookie, извлеките динамические значения и проверьте перенаправления.
После этого браузер отключится от сети.Он по-прежнему указывает на остановленный локальный прокси.Восстановите автоматические настройки или настройки без прокси.
Ошибка памяти JMeterобработчики событий графического интерфейса или хранилище больших ответовИспользуйте режим без графического интерфейса и ограничьте объем сохраняемых данных ответа.
Отличается от браузераJMeter не отображает и не выполняет JavaScript-код страницы.Протестируйте базовые API и используйте инструменты браузера для отображения метрик.

JMeter — это инструмент для измерения производительности протоколов. Он не может самостоятельно измерять визуальные события, такие как Largest Contentful Paint.

Часто задаваемые вопросы (FAQ)

Что заменило имя HTTP-прокси-сервера в JMeter?

Теперь этот компонент называется HTTP(S) Test Script Recorder.

Какой порт для записи мне следует использовать?

Подойдет любой неиспользуемый локальный порт. Порт 8888 является распространенным, и браузер должен использовать то же значение.

Может ли JMeter записывать HTTPS-трафик?

Да, если изолированный тестовый браузер доверяет временному сертификату записи JMeter.

Почему при повторном воспроизведении записанного сценария возникает ошибка?

Динамические токены, файлы cookie, потоки аутентификации, различия между хостами и отсутствующие данные обычно требуют корреляции и параметризации.

Может ли JMeter записывать видео в Chrome?

Да. Настройте чистый профиль Chrome для использования локального регистратора JMeter.

Следует ли запускать нагрузочные тесты через графический интерфейс JMeter?

Нет. Выполняйте сборку и отладку в режиме графического интерфейса, затем загрузку — в режиме без графического интерфейса.

Ведет ли себя JMeter как настоящий браузер?

Нет. Он отправляет запросы по протоколу, но не отображает HTML и не выполняет JavaScript в браузере.

Безопасно ли записывать данные о входе в рабочую среду?

Предпочтительны тестовые и промежуточные учетные записи. Для захвата данных в рабочую среду требуется явное разрешение и строгое соблюдение конфиденциальности.