Процесор в JMeter: препроцесор і постпроцесор
⚡ Розумний підсумок
Процесор в JMeter змінює запити Sampler до або після виконання. PreProcessor готує дані запиту, тоді як PostProcessor виконуєtracts визначає значення та контролює потік тестів, забезпечуючи кореляцію, динамічну параметризацію та надійну поведінку тестів продуктивності.

Процесор у Apache JMeter — це елемент плану тестування, який змінює семплери в межах своєї області дії. Він запускається автоматично, безпосередньо перед тим, як запит надходить JMeter або одразу після отримання відповіді, що робить його основним механізмом обробки динамічних даних під час перевірка продуктивності.
Існує 2 типи процесорів:
- Попередній процесор
- Постпроцесор
Область дії визначає, наскільки далеко процесор досягає. Процесор, розміщений безпосередньо під План тестування або група потоків застосовується до кожного семплера під нею, тоді як процесор, вкладений в один семплер, впливає лише на цей запит. Розуміння цього правила запобігає помилкам конфігурації, описаним у розділі усунення несправностей на цій сторінці.
Попередній процесор
Препроцесор виконує певну дію перед тим створення запиту на вибірку.
Розглянемо простий приклад: скажімо, ви хотіли JMeter «павук» через тестований веб-сайт, розбору посилання (перевірте всі посилання на сторінці) і повертати HTML. Перед створенням HTTP-запиту ви повинні додати певну дію, наприклад «аналізатор посилань HTML» до свого контролера.
На діаграмі вище показано препроцесор, що знаходиться між контролером та вихідним запитом. Оскільки він виконується першим, саме він є правильним місцем для створення даних запиту: генерування позначки часу, зчитування значення зі стовпця CSV, перезапис ідентифікатора сеансу в URLабо призначення різних облікових даних кожному віртуальному користувачеві.
Постпроцесор
Постпроцесор виконує певну дію після запиту семплера.
Розглянемо простий приклад: JMeter надсилає запит HTTP на веб-сервер, що тестується (і т.д www.google.com) і отримати відповідь. Ти хочеш JMeter щоб зупинити тест, якщо відповідь сервера є помилкою. Ви можете використовувати постпроцесор для виконання вищезазначеного завдання наступним чином:
Як показано на другій діаграмі, постпроцесор зчитує відповідь після завершення семплера. Це також стандартна відповідь на кореляцію. Коли сервер повертає токен, ідентифікатор сеансу або номер замовлення, який змінюється під час кожного запуску, постпроцесор фіксує це значення в JMeter змінну, щоб наступний семплер міг її повторно використати.
Типи препроцесорів у JMeter
Apache JMeter Постачається з компактним набором препроцесорів. Кожен з них готує семплер по-різному, тому вибір правильного елемента забезпечує зрозумілий та легкий у підтримці план тестування.
- Час очікування зразка: Визначає максимальну тривалість запиту. Будь-який семплер, який виконується довше, ніж налаштоване значення, позначається як невдалий.
- Параметри користувача: Призначає певні значення змінним для кожного віртуального користувача, тому кожен потік надсилає свій власний набір даних.
- Парсер посилань HTML: Переглядає тестовану сторінку, аналізує знайдені посилання та передає їх у наступний HTTP-запит.
- HTTP URL Модифікатор переписування: Вставляє ідентифікатор сеансу в URL для програм, які track сеансів без файлів cookie.
- Параметри користувача регулярного виразу: Заповнює параметри запиту, використовуючи значення, отримані регулярним виразом з попередньої відповіді.
- Препроцесор JDBC: Виконує SQL-інструкцію перед Sampler, що корисно для існення або скидання записів бази даних.
- Попередній процесор JSR223: Виконує Groovy or Java скрипт для будь-якої власної логіки підготовки. Він замінює старіший BeanShell PreProcessor та працює значно краще під навантаженням.
💡 Порада: Віддавайте перевагу попередньому процесору JSR223 з Groovy мова над BeanShell. Groovy скрипти компілюються та кешуються, тому вони споживають набагато менше ресурсів процесора, коли тисячі потоків виконуються паралельно.
Типи постпроцесорів у JMeter
Постпроцесори поділяються на дві групи:tracтори, що витягують значення з відповіді, та обробники, що реагують на результат семплера. У таблиці нижче кожен елемент зіставлено з форматом відповіді, який йому найкраще підходить.
| Постпроцесор | Найкраще підходить для | Типове використання |
| Регулярний вираз Extracтор | Будь-яка текстова відповідь | Отримання токенів або ідентифікаторів з HTML та звичайного тексту |
| Boundary Extracтор | Будь-яка текстова відповідь | Отримання значення за допомогою лівої та правої межі замість повного регулярного виразу |
| JSON Extracтор | JSON-відповіді | Зчитування полів з корисних навантажень REST під час Тестування API |
| CSS/jQuery Extracтор | HTML-відповіді | Вибір елемента за допомогою CSS-селектора |
| XPath Extracтор | Відповіді XML та XHTML | Навігація по структурованому дереву документів |
| JDBC-постпроцесор | Результати бази даних | Перевірка або очищення рядків після запиту |
| Постпроцесор JSR223 | Будь-яка відповідь | Спеціальний сценарний парсинг та твердження |
| Обробник дії статусу результату | Будь-яка відповідь | Стопping потік або весь тест, коли Sampler дає збій |
The Boundary ExtracТор прибув у JMeter 4.0 і часто є найшвидшим варіантом для запису, оскільки запитує лише текст безпосередньо ліворуч та праворуч від значення. Регулярний вираз Extractor залишається більш гнучким вибором, коли навколишня розмітка змінюється між відповідями.
Різниця між препроцесором та постпроцесором
Обидва елементи мають однакові правила області видимості, проте вирішують протилежні проблеми. Порівняння нижче підсумовує різницю перед розв'язаним прикладом.
| Параметр | Препроцесор | Постпроцесор |
| Час виконання | Виконується до того, як Sampler надішле свій запит | Запускається після того, як Sampler отримає свою відповідь |
| Основне призначення | Готує та змінює дані запиту | Зчитує дані відповіді та реагує на них |
| Типові елементи | Параметри користувача, HTML-парсер посилань, препроцесор JSR223 | Регулярний вираз Extractor, JSON Extractor, Обробник дій зі статусом результату |
| Вплив на потік | Неможливо зупинити тест, лише формує запит | Може зупинити потік або весь тестовий запуск |
| Спільна мета | Параметризація | Кореляція та обробка помилок |
На практиці ці два процеси працюють як пара. Постпроцесор захоплює токен сесії з відповіді на вхід, а препроцесор під час наступного запиту вставляє цей токен перед надсиланням виклику. Наведений нижче приклад демонструє частину цього шаблону, пов'язану з постпроцесором.
Приклад постпроцесора
Цей посібник покаже вам покрокові інструкції щодо використання постпроцесора в JMeter. Почнемо з простого тестового сценарію.
- JMeter надсилає HTTP-запит до тестованого веб-сервера www.google.com.
- JMeter отримує відповідь від Google сервера.
- Якщо відповідь сервера є помилка, JMeter волі СТОП тест.
- Якщо відповідь сервера OK (без помилок), JMeter волі продовжувати тест.
Ось Дорожня карта цього прикладу:
Попередня умова:
We повторне використання крок 1 і крок 2 у статті JMeter Тестування продуктивності. Якщо JMeter ще не встановлено, виконайте JMeter Інструкція з монтажу перший.
Крок 1) Додайте групу потоків
Клацніть правою кнопкою миші на План тестування і додайте нову групу потоків: додавати -> Потоки (користувачі) -> Група ниток
Але на панелі керування групою потоків введіть властивості потоку таким чином:
Цей параметр дозволяє JMeter створювати 10 запит користувача до http://www.google.com 10 раз.
Крок 2) Додати JMeter елементи
- Додати стандартний запит HTTP
- Додайте HTTP-запит
Ми все ще робимо JMeter відправляти запит http://www.google.com до Google сервера.
Крок 3) Додайте елемент постпроцесора
Клацніть правою кнопкою миші Група ниток -> додавати -> Постпроцесор -> Обробник дії статусу результату
Обробник дії статусу результату дозволяє користувачеві зупинити потік або весь тест, якщо запит користувача не виконано.
На панелі маркерів дій статусу результату виберіть Зупиніть тест зараз. Цей вибір припинить перевірку, якщо JMeter отримати повідомлення про помилку з відповіді сервера.
Крок 4) Налаштуйте HTTP-запит
Відкрийте панель запитів HTTP. Введіть "abc" до поля Шлях.
Коли ви входите "abc" до шляху, JMeter створить URL запит до Google сервер: http://www.google.com/abc. Це URL не існує на Google сервер. Це неправильно URL запит Google сервер поверне помилку.
Крок 5) Додайте дерево результатів перегляду
Клацніть правою кнопкою миші Група ниток -> додавати -> слухач -> Перегляд дерева результатів
Крок 6) Запустіть тест
Виберіть «Переглянути дерево результатів», натисніть кнопку «Виконати» на панелі меню. Ви побачите помилка відповідь від Google сервер, і тест зупиниться з виходом виконання 100 потоків.
Тепер поверніться до кроку 4, відкрийте панель запитів HTTP, введіть «календар” на панель. Це робить JMeter створювати URL запросити https://calendar.google.com/calendar/u/0/r до Google сервер. Це виправити URL запит Google Сервер поверне OK (без помилок).
Виберіть «Переглянути дерево результатів», натисніть кнопку «Виконати» на панелі меню. Ви побачите OK відповідь від Google сервер, і тест триватиме, доки не будуть завершені всі 100 потоків.
Додавання затвердження поряд із обробником дій статусу результату перевірка стає суворішою, оскільки твердження може не враховувати Sampler, який повернув HTTP 200, але доставив неправильний вміст.
Пошук і усунення несправностей
Якщо ви зіткнулися з проблемою під час виконання описаного вище сценарію... виконайте такі дії:
- Перевірте, чи ви підключаєтесь до Інтернету через проксі. Якщо так, видаліть проксі.
- Відкрийте новий екземпляр Jmeter
- Відкрийте ProcessorTestPlan.jmx в Jmeter
- Double-клацніть «Група потоків» -> «Переглянути дерево результатів».
- Запустіть тест
Якщо постпроцесор нічого не робить, спочатку перевірте його положення. Постпроцесор, розміщений поза межами області семплера, на який він спрямований, ніколи не працює, що є найчастішою причиною порожнього ex.tracзмінна ted. Пов'язані елементи, такі як контролери та розподілене тестування дотримуйтесь тієї ж логіки області застосування.









.gif)

.gif)