Уявімо, що Ви єдиний тестувальник на проєкті і Ваша компанія підписала контракт на розробку веб-застосунку, який буде доступний у всьому світі. Очікується, що буде сотні тисяч користувачів, які одночасно отримуватимуть доступ до веб-сайту. В такому випадку продуктивність матиме велику роль, бо сервери повинні ефективно обробляти дії користувачів. Ваша організація бажає знати, як будуть працювати веб-сервери у випадку такого навантаження. Як тестувальник Вам потрібно надати результати для такого сценарію. В такому випадку потрібно скористатися інструментами для тестування навантаження, які зможуть імітувати поведінку користувача в режимі реального часу. JMeter – це один з інструментів, що може допомогти провести таке тестування.
Застосування JMeter в тестуванні
- 31.08.2023
- Опубліковано: Admin

Що таке JMeter?
Apache JMeter – це інструмент для проведення навантажувального тестування та перевірки продуктивності, що розробляється Apache Software Foundation. У програмі реалізовані механізми авторизації віртуальних користувачів, підтримуються призначені для користувача сеанси, доступне логування результатів тесту та різноманітна візуалізація результатів у вигляді діаграм, таблиць та ін.
Apache JMeter розроблений на мові програмування Java, має відкритий вихідний код та архітектуру, яка підтримує плагіни сторонніх розробників, що дозволяє доповнювати інструмент новими функціями. Хоча спочатку він був розроблений для тестування веб-застосунків, але згодом розширився до інших тестових функцій.
Наразі JMeter підтримує наступні протоколи:
- web – HTTP, HTTPS сайти web 1.0, web 2.0 (ajax, flex та flex-ws-amf);
- веб-сервіси – SOAP / XML-RPC;
- бази даних через драйвера JDBC;
- довідник – LDAP;
- сервіс обміну повідомленнями через JMS;
- сервіси – POP3, IMAP, SMTP;
- FTP сервіс.
Які види тестування можливо провести за допомогою інструмента JMeter?
- Тестування продуктивності – це тестування встановлює максимально можливе очікування продуктивності при даній конфігурації інфраструктури. На початку процесу тестування також наголошується на необхідності внесення будь-яких змін до запуску програми.
- Тестування навантаження – це тестування в основному використовується для тестів системи під максимальним навантаженням, для якої вона була розроблена.
- Стрес-тестування – в цьому тестуванні виконується спроба зламати систему, перевантажуючи її ресурси.
- Тестування на відновлюваність – якщо сервер «впав», як швидко він відновить роботу та що буде з даними.
Деякі особливості та переваги JMeter:
- Це вільно доступне програмне забезпечення з відкритим вихідним кодом.
- Має простий та зрозумілий графічний інтерфейс.
- Це незалежний від платформи інструмент. У Linux/Unix JMeter може бути викликаний натисканням на скрипт оболонки JMeter. У Windows можна запустити, відкривши файл jmeter.bat.
- Він має повну підтримку Swing та полегшених компонентів (попередньо скомпільований JAR використовує пакети javax.swing. *).
- JMeter зберігає свої плани випробувань у форматі XML. Це означає, що можна створити план тестування за допомогою текстового редактора.
- Його повна багатопотокова структура дозволяє одночасну вибірку багатьма потоками та одночасну вибірку різних функцій окремими групами потоків.
- Його також можна використовувати для автоматичного та функціонального тестування програм.
- JMeter має хорошу підтримку онлайн-спільноти та навчальні посібники.
Встановлення JMeter
Процес встановлення досить простий.
- Перевірити системні вимоги. Для роботи JMeter необхідна одна з наступних програм: Oracle Java або OpenJDK, тому слід впевнитись, що в системі встановлена поточна версія Java. Для того, щоб перевірити наявність Java та її версію, у командному рядку слід ввести java -version. Також рекомендовано завжди використовувати останню версію JMeter, оскільки програмне забезпечення постійно вдосконалюється та оновлюється.
- Завантажити та встановити Jmeter. На сайті Apache JMeter обрати посилання «Download Releases» в розділі «Download» в лівій частині сторінки. Вибрати один із форматів архіву з бінарних файлів JMeter або вихідних файлів JMeter і розпочнеться завантаження. Розпакувати та вилучити файл у папку на комп'ютері після завантаження файлу.
- Запустити JMeter. Для цього потрібно перейти до папки, де збережено каталог JMeter. Обрати папку /bin. Знайти та вибрати файл jmeter.bat. Дочекатися початку завантаження інтерфейсу (режим графічного інтерфейсу). Як тільки завантаження закінчиться, можливо буде розпочати створення плану тестування.
Варто звернути увагу, що JMeter може бути запущений у трьох різних режимах:
- режим графічного інтерфейсу: використовується для побудови тестових скриптів та відладки;
- режим інтерфейсу командного рядка (CLI): використовується в основному для тестування навантаження;
- режим сервера: використовується для розподіленого навантажувального тестування на віддалених вузлах.
В цій статті зосереджена увага саме на запуску та використанні JMeter версії 5.6.2 в режимі графічного інтерфейсу.
Як створити навантажувальний тест в JMeter.
Для цього, після запуску JMeter в першу чергу потрібно створити план тестування.
План тестування (Test Plan) – це послідовність компонентів, які визначають, яким чином емулюватиметься навантаження.
Нижче будуть розглянуті основні компоненти.
Для початку в план тестування потрібно додати групу потоків (Thread Group). Групи потоків мають три особливо важливі параметри, які впливають на тестування навантаження:
- Number of Threads (users): Кількість потоків (користувачів), яку емулюватиме JMeter. Або іншими словами кількість юзерів, яка атакуватиме ресурс.
- Ramp-Up Period (in seconds): Тривалість тестування у секундах. Тобто час витрачений те що, щоб Jmeter запустив задану кількість юзерів.
- Loop Count: Кількість тестів або інакше кажучи кількість запитів виконаних юзером.
Для додавання групи потоків потрібно:
- клікнути правою кнопкою миші на «Test Plan»;
- навести курсор на випадаючий список «Add»;
- обрати випадаючий список «Threads (Users)»;
- вибрати значення «Thread Group»;
- у вікні, що з’явилося встановити вказані вище параметри: «Number of Threads», «Ramp-Up Period» і «Loop Count»;
- при необхідності можна додати назву групи потоків та примітки до конкретного плану тестування у полі «Comments».
Для прикладу були обрані наступні значення параметрів: Threads – 30, Ramp-up – 60, Loop-Count – Infinite.
Далі необхідно налаштувати HTTP. Елемент HTTP Request Defaults використовується для встановлення стандартних значень HTTP-запитів у цьому плані тестування.
Додавання налаштувань HTTP для Thread Group:
- клікнути правою кнопкою миші на «Thread Group»
- навести курсор на випадаючий список «Add»;
- обрати випадаючий список «Config Element»;
- вибрати значення «HTTP Request Defaults»;
- у вікні налаштувань HTTP, що з’явилося, у розділі «Web Server» в полі «Server Name or IP» вказати ім'я або IP-адресу веб-сервера, який потрібно протестувати.
Встановлений тут сервер стає сервером за замовчуванням для інших елементів цієї групи потоків.
Для прикладу, було обрано сайт www.google.com для тестування.
Наступним кроком налаштуємо HTTP Cookie Manager. Якщо сервер використовує cookie-файли – за допомогою елемента HTTP Cookie Manager налаштовується їх підтримка.
Додавання налаштувань HTTP Cookie Manager для Thread Group:
- клікнути правою кнопкою миші на «Thread Group»;
- навести курсор на випадаючий список «Add»;
- обрати випадаючий список «Config Element»;
- вибрати значення «HTTP Cookie Manager»;
Після виконання вказаних дій з’явиться наступний екран та до дерева тест-плану додастся конфігурація HTTP Cookie Manager.
Цей компонент дозволяє зберігати куки віртуального користувача та надсилати їх серверу, як це робить звичайний браузер. HTTP Cookie Manager слід обов'язково використовувати коли тестований сайт зберігає інформацію про сесію користувача в кукі-файлах.
Тепер налаштуємо семплери. За налаштування семплера запитів HTTP відповідає компонент HTTP Request, який представляє запити до сторінки кожного потоку.
Семплери – це фактичні запити до сервера. Наприклад, зразки HTTP використовуються для тесту навантаження веб-сайту, програми або API. Інші зразки включають запити FTP, SMTP, Java, JDBC та SOAP.
Додавання семплера запитів HTTP
- клікнути правою кнопкою миші на «Thread Group»;
- навести курсор на випадаючий список «Add»;
- обрати випадаючий список «Sampler»;
- вибрати значення «HTTP Request»;
- у вікні налаштувань, що з’явилося у розділі «HTTP Request», в рядку «Path» вказати об'єкт, якому всі користувачі повинні надіслати запит.
Для того, щоб усі користувачі надіслали запити на домашню сторінку, необхідно встановити значення «/» в рядку «Path». Зверніть увагу: сервер не потрібно вказувати, оскільки він вже вказаний у «HTTP Request Defaults». Для того, щоб додати до тесту більше «HTTP Requests», необхідно повторити дії вище.
Для прикладу ми протестуємо сервіс Google Maps, тому у рядку «Path» вказано значення «/maps».
Також у вказаному вікні можна додати і інші налаштування HTTP семплера:
- додати ім'я зразка HTTP-запиту в полі «Name». При необхідності можна додати коментар для цього зразка до поля «Comments».
- встановити тип запиту. За замовчуванням встановлений тип «GET», але його можна змінити на інший (POST, HEAD, PUT, PATCH, тощо).
Після завершення налаштування групи потоків, HTTP та семплерів тест готовий до виконання. Потрібно зберегти тест план, натиснувши «File» на верхній панелі та обравши «Save Test Plan as».
Результати тестування
Для виведення результатів тестування навантаження використовуються плагіни JMeter під назвою listeners. Існує безліч доступних плагінів. В цьому прикладі використаємо таблицю. Для встановлення цього плагіну необхідно:
- клікнути правою кнопкою миші на «Thread Group»;
- навести курсор на випадаючий список «Add»;
- обрати випадаючий список «Listener»;
- вибрати значення «View Results in Table»;
У дереві зліва з’явиться новий параметр «View Results in Table», натиснувши на який відкриється наступне вікно:
У цьому вікні також можна задати значення «Filename», щоб направити виведення у файл CSV.
Тепер базовий план готовий. Можна запустити тестування навантаження та переглянути результат. Для цього у верхній панелі головного меню необхідно натиснути на пункт «Run» і обрати пункт «Start» (також можна просто натиснути на зелену стрілку «Start» під головним меню).
Результати тестування з'являться у вигляді таблиці.
В таблиці відображено наступні метрики.
- Sample #: кількість запусків або користувачів.
- Start time: час запуску кожного потоку.
- Tread Name: ім'я потоку для кожного запуску та користувача.
- Sample Time (ms): інтервал часу в мілісекундах, необхідний серверу для повної обробки запиту (відповідь + час очікування).
- Status: Зелена галочка вказує на те, що всі запити виконано успішно, червона галочка вказує на збій.
- Latency: інтервал часу в мілісекундах між відправкою запиту та отриманням відповіді на нього.
Також включені додаткові метрики, такі як Bytes, Sent Bytes, Label та Connect Time(ms).
Ще один спосіб виведення результатів тестування – це графічний. В цьому випадку результат тестування буде показано на графіку в режимі реального часу. Для цього способу відображення потрібно виконати такі самі кроки, як для табличного, але у випадаючому списку «Listener» обрати значення «Graph Results».
У дереві зліва з’явиться новий параметр «Graph Results», натиснувши на який відкриється наступне вікно:
Після запуску тесту у цьому вікні буде відображено графік плану тестування. Для наведеного вище прикладу це буде графік, в якому змодельовано 30 користувачів, що зайшли на сайт https://www.google.com/maps.
У нижній частині графіка наведена наступна статистика, представлена у кольорах:
- чорний: загальна кількість відправлених семплерів;
- синій: поточне середнє значення всіх відправлених семплерів;
- червоний: поточне стандартне відхилення (Deviation);
- зелений: пропускна спроможність (Throughput), яка показує кількість запитів на хвилину, оброблених сервером.
Щоб проаналізувати продуктивність веб-сервера, що тестується, необхідно зосередитися на 2 параметрах:
- Пропускна здатнiсть (Throughput)
- Відхилення/похибка (Deviation)
Пропускна здатність є найважливішим параметром. Вона відображає здатність сервера справлятися з великим навантаженням. Чим вища пропускна здатність, тим вища продуктивність сервера.
У цьому тесті пропускна здатність сервіса Google складає 861,322 за хвилину. Це означає, що сервер Google може обробляти 861,322 запитів на хвилину. Це досить високе значення, тому можна зробити висновок, що сервер Google має хорошу продуктивність. Параметр Deviation вказує на відхилення від середнього значення. Чим менше це значення, тим краще.
Таким чином, змінюючи параметри та види налаштувать, можна провести різноманітні тести. Наприклад, якщо збільшити значення кількості потоків – можна перевірити як реакцію сервера при нетипово великому навантаженні, наприклад втричі більше стандартного пікового.
Отже, Jmeter – це доволі популярний інструмент для навантажувального тестування з відкритим вихідним кодом, який дозволяє оптимізувати та вдосконалити сервер веб-програми, усунути неполадки в налаштуваннях та збільшити його продуктивність.

Теги
