Тестування продуктивності (Performance testing) – це процес тестування програмного забезпечення, який використовується для перевірки швидкості, часу відгуку, стабільності, надійності, масштабованості та використання ресурсів програмного продукту під певним навантаженням.
Популярні технології для тестування продуктивності
- 14.12.2023
- Опубліковано: Admin
Основні параметри (метрики), які контролюються під час тестування продуктивності, включають:
- Завантаження ЦП (CPU utilization) – відсоток потужності ЦП, який використовується для обробки запитів;
- Використання пам'яті (Memory utilization) – показник, що вимірює використання основної пам’яті комп’ютера під час обробки будь-яких робочих запитів;
- Час відповіді (Response times) – загальний час між відправленням запиту та отриманням відповіді. Кращий час відгуку – краща продуктивність веб-сайту/програми;
- Середній час завантаження (Average load time) – показник, який відображає час, який потрібний веб-сторінці для завершення процесу завантаження та появи на екрані користувача;
- Пропускна здатність (Throughput) – вимірює кількість транзакцій, які програма може обробити за секунду, або, іншими словами, це швидкість, з якою мережа або комп’ютер отримує запити за секунду;
- Середня затримка/час очікування (Average latency/Wait time) – час, проведений запитом у черзі перед обробкою;
- Пропускна здатність (Bandwidth) – вимірювання обсягу даних, що передаються за секунду;
- Запитів за секунду (Requests per second) – показник, який стосується кількості запитів, оброблених програмою за секунду;
- Частота помилок (Error rate) – відсоток запитів, які призвели до помилок, порівняно із загальною кількістю запитів;
- Транзакції пройдено/не виконано (Transactions Passed/Failed) – відсоток виконаних/невдалих транзакцій від загальної кількості транзакцій.
Типи тестування продуктивності
Тестування навантаження (Load testing) – перевіряє здатність програми працювати в умовах очікуваного навантаження користувача. Мета полягає в тому, щоб виявити вузькі місця продуктивності до того, як програма запуститься.
Стрес-тестування (Stress testing) – передбачає тестування програми за екстремальних робочих навантажень, щоб побачити, як вона справляється з великим трафіком або обробкою даних. Мета полягає в тому, щоб визначити точку зламу програми.
Тестування на довговічність (Endurance testing) – проводиться, щоб переконатися, що програмне забезпечення може витримати очікуване навантаження протягом тривалого періоду часу.
Тестування стрибків (Spike testing) – перевіряє реакцію програмного забезпечення на раптові великі стрибки навантаження, що створюються користувачами.
Об’ємне тестування (Volume testing) – визначає, наскільки ефективно програмне забезпечення працює з великими прогнозованими обсягами даних.
Тестування масштабованості (Scalability testing). Мета тестування масштабованості полягає в тому, щоб визначити ефективність програмного продукту в «розширенні» для підтримки збільшення навантаження на користувачів. Проведення даного тестування допомагає спланувати збільшення потужності продукту.
Технології для тестування продуктивності: короткий огляд, переваги, недоліки
Далі розглянемо декілька популярних інструментів для тестування продуктивності з відкритим кодом.
JMeter
JMeter – це найпопулярніший інструмент із відкритим кодом у сфері продуктивності, який допомагає вимірювати час завантаження.
Переваги:
- Відкритий код. Розробники також можуть вносити свої інновації та модифікації для оновлення JMeter;
- Простота. JMeter дуже простий у вивченні та використанні;
- Незалежний від ОС. JMeter написаний однією з найпоширеніших мов програмування у світі – це настільна програма Java. Його можна встановити та використовувати на будь-якій платформі, включаючи Windows, Linux та Mac;
- Візуалізація. JMeter також пропонує надійні звіти, які доповнюються чудовими візуальними елементами – графіками, діаграмами та деревами. Їх можна створювати та зберігати в багатьох форматах (XML, HTML, JSON і просто текст);
- Розширені типи тестування з автоматизацією. JMeter дозволяє автоматизувати тестові випадки та запускати їх без участі людини;
- Для написання тестів можна використовувати jmeter-java-dsl, використовуючи переваги автозаповнення IDE та вбудованої документації.
Недоліки:
- Система може бути настільки перевантажена, що їй не вистачить пам'яті. Коли це трапляється, JMeter більше не може симулювати та візуалізувати тести. Крім того, JMeter не підходить для мобільних або настільних програм, оскільки він може запускати тести лише для веб-програм. Також, JMeter не підтримує JavaScript, що негативно впливає на якість і точність моделювання;
- JMeter споживає багато пам’яті під час використання в режимі GUI. При перетині певного порогу це також призводить до багатьох помилок;
- Не вистачає підтримки корпоративного рівня та для його роботи потрібен великий технічний досвід.
Taurus
Хоча технічно це не інструмент тестування навантаження, Taurus діє більше як оболонка поверх інших рішень, які приховують складність виконання тестів продуктивності.
Ідея Taurus полягає в тому, щоб надати сценарії створення/налаштування мови більш зручним для користувача способом. Taurus зі своєю письмовою мовою на основі JSON або YAML створює сценарії в JMeter, Grinder або Gatling.
Переваги:
- Підтримка кількох протоколів. Taurus підтримує різні протоколи, включаючи HTTP, JMS, JDBC, MQTT та інші, що робить його універсальним інструментом;
- Легке створення тесту. Є можливість створити тестовий сценарій у форматі YAML або JSON або використати існуючі сценарії з популярних інструментів тестування продуктивності, таких як JMeter, Gatling і Locust;
- Інтеграція з хмарою. Taurus підтримує інтеграцію з хмарними платформами тестування, такими як BlazeMeter. Ця функція дозволяє запускати тести продуктивності в хмарі, допомагаючи заощадити на апаратному забезпеченні;
- Результати та звітність у реальному часі. Taurus надає результати та звітність у реальному часі, що дозволяє аналізувати результати тестування, коли вони відбуваються;
- Сумісність із CI/CD. Taurus сумісний із системами безперервної інтеграції/безперервної доставки (CI/CD), такими як Jenkins і Travis. Ця сумісність забезпечує легку інтеграцію з конвеєром розробки.
Недоліки:
- Taurus може бути не таким інтуїтивно зрозумілим у використанні, як деякі інші інструменти тестування навантаження, особливо для новачків;
- Для успішного використання можуть знадобитися певні технічні знання.
Locust
Locust – це популярний інструмент тестування навантаження, який існує щонайменше з 2011 року. Він написаний на Python, завдяки чому став дуже популярним, оскільки насправді не існує інших компетентних інструментів тестування навантаження, які б базувалися на Python (і Locust також підтримує сценарії в Python).
Переваги:
- Використання Python робить Locust нескінченно розширюваним і дуже зручним для розробників, а реалізацію швидшою та легшою;
- Вимагає менше використання ЦП і може використовуватися з обмеженими ресурсами;
- Легко масштабувати кількість користувачів, яких потрібно емулювати;
- Є адаптивним і гнучким та інтегрується з різними системами та інструментами тестування. Це дозволяє адаптувати його відповідно до конкретних вимог тестування.
Недоліки:
- Чим більша кількість користувачів, тим повільніше виконується код через особливості Python;
- Моніторинг не такий хороший, як Gatling;
- Має набагато менше плагінів, ніж JMeter.
Gatling
Gatling був випущений у січні 2012 року та є інструментом для навантажувального тестування з відкритим кодом, написаним на Scala.
Переваги:
- Це платформа тестування продуктивності з відкритим вихідним кодом на основі Scala, яка має зрозумілий для людини DSL, що полегшує створення та виконання тестів;
- Має високу швидкість генерації запитів;
- Може імітувати поведінку користувачів, як-от вхід у систему, перегляд веб-сайту та здійснення транзакції;
- Gatling створює миттєві звіти та дані, які допомагають зрозуміти, як веб-додаток працює під навантаженням. До цих звітів включено такі показники, як швидкість реакції, пропускна спроможність і частота помилок;
- Зручний інтерфейс спрощує розробку та виконання навантажувальних тестів. Крім того, він надає спеціальний словник, що полегшує створення тестових сценаріїв.
Недоліки:
- Підтримує лише HTTP, WebSockets, події на стороні сервера та JMS (служба повідомлень Java);
- Базується виключно на коді, тому для тих, хто не знайомий із Gatling, може бути досить складним у процесі навчання;
- Час відповіді можна переглянути лише після завершення тесту, що потребує використання стороннього рішення;
- Gatling може використовувати багато ресурсів на тестовому комп’ютері, особливо коли він генерує багато запитів на секунду. У результаті тестова машина повинна мати достатньо пам’яті та обчислювальної потужності, щоб впоратися з навантаженням;
- Порівняно з іншими інструментами тестування повноваження Gatling щодо створення сценаріїв обмежені. Це може зробити його менш корисним у деяких ситуаціях тестування.
k6
k6 – це орієнтований на розробника інструмент навантажувального тестування з відкритим кодом для тестування продуктивності, створеним за допомогою Go та JavaScript, який добре інтегрується в робочий процес більшості розробників.
Переваги:
- k6 оптимізовано для мінімального споживання ресурсів і розроблено для виконання тестів із високим навантаженням (тести на стрибки, навантаження, тести на витримку);
- Інструмент CLI із зручними для розробників API;
- Скрипти в JavaScript ES2015/ES6 з підтримкою локальних і віддалених модулів;
- Використання xk6-browser. Він забезпечує автоматизацію веб-переглядача та наскрізне веб-тестування, дозволяючи вимірювати продуктивність інтерфейсу і серверу за допомогою одного інструменту;
- Перевірки та порогові значення – для цілеспрямованого, зручного для автоматизації навантажувального тестування.
Недоліки:
- Не запускається в браузері. За замовчуванням k6 не відображає веб-сторінки так, як це робить браузер. Браузери можуть споживати значні системні ресурси. Пропуск браузера дозволяє виконувати більше навантаження на одній машині. Однак за допомогою браузера k6 ви можете взаємодіяти зі справжніми браузерами та збирати показники інтерфейсу як частину своїх тестів k6;
- Не працює в NodeJS. Як правило, JavaScript не підходить для високої продуктивності. Щоб досягти максимальної продуктивності, сам інструмент написаний на Go, у якому вбудовано середовище виконання JavaScript, що дозволяє легко тестувати сценарії.
Wrk
Wrk входить до числа найкращих інструментів без сценаріїв. Він також надасть точні вимірювання часу відповіді на транзакції, чого не вдається багатьом іншим інструментам, коли вони змушені генерувати багато трафіку.
Переваги:
- По суті, Wrk має один варіант, коли його найкраще використовувати: коли є необхідність згенерувати максимальний обсяг трафіку з однієї машини, і при цьому не дуже важливі детальні показники результатів, а трафік, що моделюється, не дуже складний.
Недоліки:
- Немає підтримки HTTP/2;
- Відсутній режим фіксованої швидкості запитів;
- Немає параметрів виводу;
- Відсутній простий спосіб генерації результатів проходження/відмови в налаштуваннях CI;
- Загалом мало функцій.
Тестування продуктивності проводиться, щоб надати зацікавленим сторонам інформацію щодо швидкості, стабільності та масштабованості. Але ще важливіше те, що тестування продуктивності виявляє, що потрібно покращити, перш ніж продукт вийде на ринок. Без цього програмне забезпечення, ймовірно, страждатиме від таких проблем, як: повільна робота, коли ним користуються декілька користувачів одночасно, невідповідності між різними операційними системами та низька зручність використання.