JMeter может генерировать сэмплеры HTTP-запросов, выступая в качестве локального прокси-сервера для записи между браузером и авторизованным целевым приложением. В текущих версиях этот компонент называется HTTP(S) Test Script Recorder . Он записывает один путь браузера в контроллер записи, после чего скрипт должен быть очищен, сопоставлен, проверен и выполнен как тест на уровне протокола.
Что такое HTTP-прокси-сервер JMeter?
Регистратор прослушивает локальный порт, обычно это... 8888Браузер отправляет HTTP- и HTTPS-запросы на этот прокси-сервер, а JMeter преобразует соответствующий трафик в сэмплеры под управлением выбранного контроллера. Во время воспроизведения JMeter отправляет запросы напрямую; он не запускает браузер для каждого виртуального пользователя.
Почему нужно записывать сценарий, а не создавать его вручную?
- Отслеживает реалистичный порядок запросов, перенаправления, формы и фоновые API-интерфейсы.
- Выявляет вызовы XHR или fetch, которые легко пропустить.
- Создает быстрый базовый уровень для сложного пользовательского сценария.
- Уменьшает количество ошибок транскрипции в заголовках и параметрах.
Ручное создание API остается более удобным для небольшого документированного API. Запись помогает, когда поведение браузера в сети еще не изучено. Терминологию см. в нашем руководстве по типам прокси.
Как записать скрипт в JMeter 5.x
- Запустите JMeter в графическом режиме для создания скрипта.
- Добавьте группу потоков в план тестирования.
- Добавьте контроллер записи в группу потоков.
- Добавьте параметры HTTP-запросов по умолчанию и менеджер HTTP-cookie там, где это необходимо.
- Добавьте средство записи тестовых HTTP(S) скриптов и выберите контроллер записи в качестве целевого объекта.
- Используйте шаблоны включения/исключения для ограничения нерелевантного трафика.
Официальное руководство по записи разговоров в Apache JMeter является авторитетным справочником для конкретной версии.
Шаг 1) Настройка HTTP-прокси-сервера
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) Запишите свою активность
- Запустите программу записи и доверяйте её временному сертификату только в изолированном тестовом браузере.
- Откройте авторизованную тестовую среду.
- Совершите одну чистую поездку в темпе, подходящем для человека.
- Запись следует немедленно прекратить после завершения всех деловых операций.
- Восстановите стандартные настройки прокси-сервера в браузере.
Переименуйте сэмплеры в соответствии с бизнес-действиями и сгруппируйте связанные запросы в разделе «Контроллеры транзакций». Удалите аналитику, рекламу, обновления браузера, виджеты чата и дублирующиеся статические ресурсы, если они явно не входят в область действия.
Проверьте каждый сэмплер на наличие секретных данных. Пароли должны поступать из защищенных данных среды выполнения, а для изменяющихся токенов требуется сопоставление.
Шаг 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 генерирует временный центр сертификации при запуске регистратора. Импортируйте его только в выделенный тестовый браузер, запишите авторизованный сайт, а затем удалите.
- Запустите средство записи тестовых скриптов HTTP(S).
- Найдите сгенерированный сертификат ApacheJMeterTemporaryRootCA.
- Импортируйте его как доверенный центр сертификации в изолированном профиле.
- Зафиксируйте пройденный HTTPS-маршрут.
- Удалите сертификат после завершения.
Привязка сертификатов, взаимное TLS, управляемые браузеры, мобильные приложения и новые транспортные протоколы могут блокировать перехват. Не ослабляйте меры безопасности в производственной среде. Используйте тестовую сборку, спецификацию API или утвержденный альтернативный метод перехвата.
Корреляция: Как сделать записанный сценарий воспроизводимым
Идентификаторы сессий, токены CSRF, состояние OAuth, подписи запросов и идентификаторы ресурсов изменяются между запусками. Корреляция извлекает новое значение из одного ответа и подставляет его в последующие запросы.
- Найдите ответ, который первым содержит динамическое значение.
- Добавьте инструмент для извлечения данных из JSON, CSS, XPath или регулярных выражений.
- Сохраните результат в именованной переменной JMeter.
- Замените последующие жестко заданные значения ссылкой на переменную.
- Ошибка должна быть явной, если при извлечении данных совпадений не обнаружено.
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 в браузере.
Безопасно ли записывать данные о входе в рабочую среду?
Предпочтительны тестовые и промежуточные учетные записи. Для захвата данных в рабочую среду требуется явное разрешение и строгое соблюдение конфиденциальности.
