Процесор в JMeter: препроцесор і постпроцесор

⚡ Розумний підсумок

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

  • Основне визначення: Процесор модифікує Sampler всередині своєї області видимості, виконуючи його або до запиту, або після відповіді.
  • 🔍 Роль препроцесора: Препроцесори встановлюють змінні, переписують URLs, розбирати HTML-посилання та застосовувати параметри користувача перед запуском Sampler.
  • 📤 Роль постпроцесора: Відповіді на читання постпроцесорами, наприкладtracдинамічні значення у змінні та вирішити, чи продовжуватиметься запущений тест.
  • 🧩 ExtracВибір тор: Регулярні вирази, межі, JSON, CSS/jQuery та XPath extracКожен з торів відповідає різному формату відповіді.
  • 🛑 Управління потоком: Обробник дій зі статусом результату зупиняє один потік або весь тест, коли Sampler завершує роботу.
  • 🧪 Застосований покроковий огляд: Шість кроків створюють план, який автоматично зупиняється, щойно недійсний шлях повертає помилку сервера.

Процесор в JMeter

Процесор у Apache JMeter — це елемент плану тестування, який змінює семплери в межах своєї області дії. Він запускається автоматично, безпосередньо перед тим, як запит надходить JMeter або одразу після отримання відповіді, що робить його основним механізмом обробки динамічних даних під час перевірка продуктивності.

Існує 2 типи процесорів:

  1. Попередній процесор
  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. Почнемо з простого тестового сценарію.

  1. JMeter надсилає HTTP-запит до тестованого веб-сервера www.google.com.
  2. JMeter отримує відповідь від Google сервера.
  3. Якщо відповідь сервера є помилка, JMeter волі СТОП тест.
  4. Якщо відповідь сервера 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" до поля Шлях.

Налаштуйте HTTP-запит

Коли ви входите "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, але доставив неправильний вміст.

Пошук і усунення несправностей

Якщо ви зіткнулися з проблемою під час виконання описаного вище сценарію... виконайте такі дії:

  1. Перевірте, чи ви підключаєтесь до Інтернету через проксі. Якщо так, видаліть проксі.
  2. Відкрийте новий екземпляр Jmeter
  3. Відкрийте ProcessorTestPlan.jmx в Jmeter
  4. Double-клацніть «Група потоків» -> «Переглянути дерево результатів».
  5. Запустіть тест

Якщо постпроцесор нічого не робить, спочатку перевірте його положення. Постпроцесор, розміщений поза межами області семплера, на який він спрямований, ніколи не працює, що є найчастішою причиною порожнього ex.tracзмінна ted. Пов'язані елементи, такі як контролери та розподілене тестування дотримуйтесь тієї ж логіки області застосування.

Поширені запитання

Препроцесор змінює вміст запиту перед його надсиланням. Таймер лише призупиняє потік на визначений інтервал. Обидва виконуються перед семплером, але таймер ніколи не змінює дані запиту.

Колишнійtractor зберігає значення в JMeter ім'я змінної, яке ви визначаєте. Будь-який наступний Sampler у тому ж потоці посилається на неї з синтаксисом ${variableName} у шляху, заголовку або тілі запиту.

Так. Кілька помічників ШІ тепер зчитують записану відповідь і пропонують регулярний вираз або пару меж для кореляції. Пропозиція все ще потребує перегляду, оскільки ШІ не може знати, які значення є справді динамічними.

Так. Помічники штучного інтелекту порівнюють необроблену відповідь з попередньою.tracвираз tor та вказати на невідповідності в escaping, групаpingабо область дії. Перевірте виправлення всередині View Results Tree, перш ніж довіряти йому під час завантаження.

Процесори запускаються один раз для кожного виконання семплера в межах їхньої області видимості. З десятьма потоками looping п'ять разів процесор, підключений до цього семплера, виконується п'ятдесят разів, і кожен потік зберігає власні значення змінних.

Підсумуйте цей пост за допомогою: