Тестування продуктивності (Performance Testing) – визначає наскільки тестований додаток стабільний, а також досліджує показники швидкості реакції програми на зовнішні впливи при різному за характером та інтенсивністю навантаження. Метою тестування є виявлення недоліків і вразливостей в системі, визначення швидкості завантаження даних і їх обробки, надійності програми.

Тестування параметрів роботи системи можна проводити за допомогою:

  • визначення допустимої кількості користувачів додатка;
  • вимірювання часу виконання тієї чи іншої операції системи;
  • визначення допустимих меж продуктивності програми з різними рівнями навантаження.

Тестування продуктивності можна розділити на наступні підвиди:

  • навантажувальне;
  • стресове;
  • стабільності;
  • конфігураційне.

Тестування навантаження

Тестування навантаження

Тестування навантаження (Load Testing) – дозволяє зрозуміти чи здатен додаток стабільно працювати з навантаженням в допустимих межах і трохи перевищуючи ці межі. При цьому тестуванні перевіряється поведінка додатка з високим навантаженням. Навантаженням може бути, наприклад, певна кількість одночасно працюючих користувачів додатка в певний проміжок часу. Такий тип тестування дозволяє визначити час відгуку важливих бізнес-транзакцій. Спостерігаючи за базою даних, сервером додатка і мережею можна визначити слабкі місця програми.

Нижче розглянемо приклади навантажувального тестування.

Припустимо, у нас є діючий інтернет-магазин і наближається всіма улюблене свято – Новий Рік. В цьому випадку потрібно, щоб сайт витримав навантаження від численних користувачів та їх замовлень. Для цього виду тестування можна використовувати API, а також проаналізувати таймінги завантаження сайту при високій кількості користувачів. Для цього можна взяти значення завантаження в звичайний день і порівняти його зі значенням при великій кількості користувачів.

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

Конфігураційне тестування

Конфігураційне тестування

Конфігураційне тестування (Configuration Testing) перевіряє роботу програмного забезпечення на різних операційних системах, апаратних і програмних конфігураціях, а також їх сумісність. На даному етапі тестування вимірюються параметри продуктивності системи з середніми і граничними значеннями навантаження. Цей тип тестування продуктивності дозволяє переконатися, що система працює однаково на різних конфігураціях і операційних системах.

Прикладом конфігураційного тестування може бути перевірка запуску сайту на девайсах з флагманської начинкою (Iphone 12, Samsung Galaxy S21) і аксесуарах п'ятирічної давності (Xiaomi Note 3, Nexus 5), а також порівняння продуктивності сайту на даних платформах. З цими перевірками можна визначити оптимальну конфігурацію пристрою для комфортної роботи з додатком або сайтом. Також можна протестувати сайт на мобільних (iOS, Android) і десктопних (Linux, MacOS, Windows) операційних системах.

Стрес-тестування

Стресове тестування

Стресове тестування (Stress Testing) – це дослідження поведінки додатка при несподіваних змінах навантаження, які перевищують розрахунковий рівень. Ця перевірка визначає як працюють програми та система в нестандартних умовах, а також дозволяє оцінити чи здатна система продовжити свою роботу після нестандартної ситуації. Стресом може бути збільшена інтенсивність виконання операцій, що досягає досить високих значень, або аварійна зміна конфігурації сервера.

Для стресового тестування можна взяти звичайний ПК і протестувати його компоненти: процесор, ОЗУ і т.д. Для тесту CPU застосовуються консольні команди, які навантажують всі наявні ядра, наприклад:

stress-ng --class cpu --sequential 8 --timeout 60s --metrics-brief

Будуть виконуватися математичні операції, сортування, шифрування, стиснення, пошук, робота з рядками.

Для тестів ОЗУ можна застосувати консольні команди, наприклад:

stress-ng --class memory --sequential 8 --timeout 60s --metrics-brief

Також для тестів ОЗУ можна використовувати окреме ПЗ: MemTest, SuperRam і інші. Проводитимуться операції виділення, копіювання і очищення пам'яті, тест компресії і сортування даних.

HDD тести також проводяться при застосуванні сторонніх ПЗ (Victoria, HDDScan), які дозволяють переконатися в живучості HDD, наявність битих секторів, провести процедури читання/запису, дізнатися швидкість роботи HDD при читанні/запису, а також його температуру в момент пікового навантаження.

Тестування стабільності

Тестування стабільності

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

Для тестування стабільності можна використовувати програму Apache Bench, яка посилає вказану кількість запитів і кількість потоків цих запитів. З цього тесту можна виділити головні складові: кількість запитів за секунду (Requests per second), середній час на виконання запитів за секунду (Time per request), середній час на виконання одного запиту (Time per request). Використовуючи утиліту Httperf та її запити, можна визначити швидкість створення нових з'єднань (Connection rate), час з'єднання від ініціалізації до його закриття (Connection time), швидкість обробки запитів сервера за секунду часу (Request rate).

Тестування продуктивності також можна розділити на перевірки за сценаріями.

При тестуванні сайтів перевіряється:

  • кількість користувачів – яка кількість виконаних запитів за конкретний проміжок часу;
  • час відгуку – яка кількість часу необхідна, щоб виконати запити користувачів;
  • запити в секунду – яка кількість запитів надіслана користувачами на сервер;
  • транзакції в секунду – вимірюється кількість транзакцій, надісланих користувачами на сервер;
  • відсоток помилок – перевіряється який відсоток помилок в загальній кількості відповідей користувачеві в одиницю часу;
  • процесор – перевіряється наскільки сильно завантажується процесор при виконанні завдань;
  • оперативна пам'ять – перевіряється використовувані MБ фізичної пам'яті;
  • жорсткий диск – перевіряється використання дискового простору.

При тестуванні мобільних додатків перевіряється:

  • процес однакової роботи програми в різних умовах мережі;
  • пошук різних ненадійних місць додатків, які можуть порушити продуктивність додатків;
  • чи впорається додаток з потрібними обсягами навантаження;
  • час відгуку, тому що він повинен відповідати вимогам;
  • чи стабільно працює додаток з великою кількістю користувачів;
  • робота додатка з нестабільним інтернет-підключенням;
  • конфігурація клієнт-сервера, яка повинна забезпечувати потрібну продуктивність.

При тестуванні ігор:

  • перевіряються ігри в різних налаштуваннях (режим мінімальної, максимальної і середньої якості);
  • вимірюється середній FPS (Frames Per Second) на різних налаштуваннях;
  • перевіряється завантаження центрального процесора в різних режимах гри (меню, завантаження, геймплей і тд.);
  • перевіряється завантаження оперативної пам'яті;
  • оцінюється працездатність гри;
  • перевіряється поведінка системи при згортанні\розгортанні гри з різними налаштуваннями.

Інструменти для тестування продуктивності

Також в тестуванні продуктивності використовуються різні інструменти, які полегшують роботу тестувальника. Нижче наведені деякі приклади таких інструментів.

LoadView – один з найефективніших інструментів в тестуванні продуктивності. Найпопулярнішими функціями цього інструменту є: обробка сценаріїв «Point and Click», глобальна хмарна інфраструктура, тестування в реальному браузері.

Apache JMeter – інструмент для проведення навантажувального тестування, що розробляється Apache Software Foundation. У програмі реалізовані механізми авторизації віртуальних користувачів, підтримуються призначені для користувача сеанси. Організоване логування результатів тесту та різноманітна візуалізація результатів у вигляді діаграм, таблиць і т. п.

MSI Afterburner – дає можливість відображати оверлеєм різні характеристики і моніторити споживання ресурсів грою. Безкоштовний інструмент, має безліч налаштувань, легкий у використанні. Завантажити можна за посиланням. Дає можливість відстежувати FPS, завантаження CPU, GPU, завантаження RAM, швидкість обертання кулера та багато іншого.

FPS Meter (Android) – FPS Meter показує ФПС (кількість кадрів в секунду) поверх всіх вікон в будь-якій грі або додатку. Це дозволяє заміряти дійсну продуктивність пристрою.GameBench (Android і iOS) – цей інструмент гарний тим, що може запускати на пристрої будь-яку гру і працювати у фоновому режимі, моніторити та реєструвати продуктивність і витрати батареї. А в цей час користувач спокійно грає.

Підводячи підсумки, можна сказати, що тестування продуктивності є досить важливою частиною перевірки програмного продукту, яка визначає його працездатність. Дане тестування має свої підвиди: навантажувальне, стресове, стабільності і конфігураційне, кожен з яких відповідає за перевірку продуктивності системи в певних умовах. Цей вид тестування допоможе переконатися, що система здатна швидко виконувати поставлені завдання.