JMeter може генерувати семплери HTTP-запитів, діючи як локальний проксі-сервер запису між браузером та авторизованим цільовим застосунком. Поточні версії називають цей компонент HTTP(S) Test Script Recorder . Він фіксує один шлях браузера в контролер запису, після чого скрипт має бути очищений, співвіднесений, перевірений та виконаний як тест на рівні протоколу.
Що таке HTTP-проксі-сервер JMeter?
Рекордер прослуховує локальний порт, зазвичай 8888Браузер надсилає HTTP- та HTTPS-запити до цього проксі-сервера, а JMeter перетворює відповідний трафік на семплери під керуванням вибраного контролера. Під час відтворення JMeter надсилає запити безпосередньо; він не запускає браузер для кожного віртуального користувача.
Чому варто записувати сценарій, а не створювати його вручну?
- Записує реалістичний порядок запитів, перенаправлення, форми та фонові API.
- Виявляє XHR-виклики або виклики fetch, які легко пропустити.
- Створює швидку базову основу для складного шляху користувача.
- Зменшує кількість помилок транскрипції в заголовках і параметрах.
Ручне конструювання залишається зрозумілішим для невеликого документованого API. Запис допомагає, коли поведінка мережі браузера ще не зрозуміла. Термінологію див. у нашому посібнику з типів проксі-серверів.
Як записати скрипт у JMeter 5.x
- Запустіть JMeter у режимі графічного інтерфейсу для створення скрипта.
- Додайте групу потоків до плану тестування.
- Додайте контролер запису в групу потоків.
- Додайте значення HTTP-запитів за замовчуванням та менеджер HTTP-кукі, де це доречно.
- Додайте записувач тестових сценаріїв 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 файл та зберігайте згенеровані дані окремо:
- 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 | Тимчасовий сертифікат сертифікації відсутній або термін дії закінчився. | Згенеруйте новий сертифікат диктофона та імпортуйте його лише в тестовий профіль. |
| Занадто багато трафіку | Розширення, телеметрія, інші вкладки або загальні шаблони | Використовуйте чистий профіль та уточнюйте фільтри включення/виключення. |
| Не вдалося відтворити вхід | Відсутні файли cookie, токени, потік OAuth або кореляція | Додайте менеджер файлів cookie, витягуйте динамічні значення та перевіряйте перенаправлення. |
| Браузер після цього буде в автономному режимі | Він все ще вказує на зупинений локальний проксі-сервер | Відновіть автоматичні налаштування або налаштування без проксі-сервера. |
| Помилка пам'яті JMeter | Слухачі графічного інтерфейсу або велике сховище відповідей | Використовуйте режим без графічного інтерфейсу та обмежте збережені дані відповідей. |
| Відрізняється від браузера | JMeter не рендерить та не виконує JavaScript сторінки | Тестуйте базові API та використовуйте інструменти браузера для відображення показників. |
JMeter — це інструмент для оцінки продуктивності протоколу. Він не може самостійно вимірювати візуальні події, такі як найбільший відбиток контенту (Largest Contentful Paint).
Поширені запитання
Що замінило назву HTTP-проксі-сервера в JMeter?
Компонент тепер називається HTTP(S) Test Script Recorder.
Який порт рекордера слід використовувати?
Будь-який невикористаний локальний порт працює. Порт 8888 є поширеним, і браузер повинен використовувати те саме значення.
Чи може JMeter записувати HTTPS-трафік?
Так, коли ізольований тестовий браузер довіряє тимчасовому сертифікату запису JMeter.
Чому записаний сценарій не працює під час повторного відтворення?
Динамічні токени, файли cookie, потоки автентифікації, відмінності хостів та відсутні дані зазвичай потребують кореляції та параметризації.
Чи може JMeter записувати дані з Chrome?
Так. Налаштуйте чистий профіль Chrome для використання локального диктофона JMeter.
Чи варто мені запускати навантажувальні тести з графічного інтерфейсу JMeter?
Ні. Збирайте та налагоджуйте в режимі графічного інтерфейсу, а потім виконуйте завантаження в режимі без графічного інтерфейсу.
Чи поводиться JMeter як справжній браузер?
Ні. Він надсилає запити протоколу, але не відтворює HTML та не виконує JavaScript браузера.
Чи безпечно записувати логін у виробничому середовищі?
Надавайте перевагу проміжним та тестовим обліковим записам. Захоплення виробничих даних вимагає чіткої авторизації та суворого конфіденційного використання.
