Що таке СТРЕСС-тестування в програмному тестуванні?

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

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

  • 🔘 Визначення: Стрес-тестування вимірює стійкість та обробку помилок під навантаженням, набагато більшим, ніж будь-коли забезпечує виробничий трафік.
  • ☑️ Мета: Тест визначає точну точку відмови та перевіряє можливість відновлення після повернення навантаження до нормального рівня.
  • Сфера застосування: Розподілені, прикладні, транзакційні, системні та дослідницькі варіанти наголошують на різному рівні системи.
  • 🧪 Процес: Планування, написання сценарію, виконання, аналіз, а потім налаштування — зазвичай протягом трьох-чотирьох повних циклів, перш ніж будуть досягнуті контрольні показники.
  • 🛠️ інструменти: LoadRunner, Apache JMeter, StressTester та NeoЗавантаження генерації одночасних віртуальних користувачів та запис даних відповідей.
  • 📊 Метрики: Пропускна здатність, кількість сторінок за секунду, час звернення, час до першого байта та невдалі з'єднання кількісно визначають результат.

Стрес-тестування в тестуванні програмного забезпечення

Що таке стрес-тестування?

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

Під час стрес-тестування тестований додаток (AUT) піддається короткочасному навантаженню, щоб з'ясувати його стійкість. Найпоширенішим використанням стрес-тестування є визначення межі, за якої система, програмне забезпечення або апаратне забезпечення виходять з ладу. Воно також перевіряє, чи демонструє система ефективне управління помилками після перетину цієї межі.

In Розробка програмного забезпеченняСтрес-тестування часто вказується поруч із Випробування на витривалість, але ці два методи відрізняються: стрес-тестування застосовує аномально високе навантаження коротким імпульсом, щоб знайти точку розриву, тоді як тестування на витривалість (замочування) витримує помірне навантаження протягом кількох годин, щоб виявити поступову деградацію.

На скріншоті нижче показано великий блок даних, що копіюється з веб-сторінки.

Копіювання дуже великого блоку даних з веб-сторінки для навантаження на настільну програму

Тестований застосунок перевантажується, коли 5 ГБ даних копіюється з веб-сайту та вставляється в Блокнот. Тепер Блокнот перебуває під навантаженням і повертає повідомлення про помилку «Не відповідає», точно так само, як показано на наступному знімку екрана.

Блокнот показує повідомлення про помилку «Не відповідає» після вставки 5 ГБ даних.

Той самий принцип масштабується безпосередньо на серверні системи.

Необхідність стрес-тестування

Розглянемо наступні реальні приклади, де використання стрес-тестування стає очевидним:

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

Вкрай важливо проводити стрес-тестування, щоб врахувати такі аномальні сплески трафіку. Нездатність врахувати цей раптовий трафік може призвести до втрати доходу та репутації.

Стрес-тестування також надзвичайно цінне з наступних причин:

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

У наступному розділі викладено, що має довести успішний стрес-тест.

Цілі стрес-тестування

Метою стрес-тестування є аналіз поведінки системи після збою. Для успішного стрес-тестування система повинна відображати відповідне повідомлення про помилку, коли вона перебуває в екстремальних умовах.

Для проведення стрес-тестування іноді використовуються величезні набори даних, і ці дані можуть бути втрачені під час збою системи. Тестери повинні переконатися, що ці дані, пов'язані з безпекою, не втрачаються під час стрес-тестування.

Головна мета стрес-тестування — переконатися, що система відновлюється після збою, ця властивість називається відновлюваністю. Тестування відновлення потім детально перевіряє цю процедуру відновлення.

Тестування навантаження проти стрес-тестування

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

Графік, що порівнює профіль сталого навантаження під час тестування навантаження з профілем зростаючого навантаження під час тестування навантаження

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

Пов’язані профілі включають Спайк тестування (раптовий короткий спалах), Тестування обсягу (великі обсяги даних, а не багато користувачів) та Тестування масштабованості (простор для зростання).

Види стрес-тестування

Нижче наведено типи стрес-тестування, пояснені по одному.

Розподілене стрес-тестування

У розподілених клієнт-серверних системах тестування проводиться на всіх клієнтах сервера. Роль стрес-сервера полягає в розповсюдженні набору стрес-тестів серед усіх стрес-клієнтів та track стан кожного клієнта. Після того, як клієнт зв’язується із сервером, сервер додає ім’я клієнта та починає надсилати дані для тестування. На рисунку нижче показано, як стрес-сервер досягає деяких клієнтів, але не інших.

Розподілене стрес-тестування, де стрес-сервер досягає Клієнта1 та Клієнта2, але втрачає зв'язок з Клієнтом3 та Клієнтом4.

Тим часом клієнтські машини надсилають сигнал, або серцебиття, підтверджуючи, що вони все ще підключені до сервера. Якщо сервер не отримує жодного сигналу від клієнтської машини, цю машину потрібно додатково дослідити для налагодження. На рисунку сервер може підключитися до 2 клієнтів (Клієнт1 та Клієнт2), але він не може надсилати або отримувати сигнал від Клієнта 3 та Клієнта 4.

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

Стрес-тестування додатків

Це тестування зосереджено на пошуку дефектів, пов'язаних із блокуванням даних, проблемами мережі та вузькими місцями продуктивності в одному застосунку.

Транзакційне стрес-тестування

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

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

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

Дослідницьке стрес-тестування

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

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

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

Як провести стрес-тестування?

Процес стрес-тестування можна виконати у 5 основних кроків:

  • Крок 1) Планування стрес-тесту: Тут ви збираєте системні дані, аналізуєте систему та визначаєте цілі стрес-тестування.
  • Крок 2) Створіть сценарії автоматизації: На цьому етапі ви створюєте сценарії автоматизації стрес-тестування та генеруєте тестові дані для стресових сценаріїв.
  • Крок 3) Виконання сценарію: На цьому етапі ви запускаєте сценарії автоматизації стрес-тестування та зберігаєте результати стрес-тестування.
  • Крок 4) Аналіз результатів: На цьому етапі ви аналізуєте результати стрес-тесту та визначаєте вузькі місця.
  • Крок 5) Налаштування та оптимізація: На цьому етапі ви налаштовуєте систему, змінюєте конфігурації та оптимізуєте код з метою досягнення бажаного орієнтира.

Зрештою, ви знову запускаєте весь цикл, щоб визначити, чи налаштування дали бажані результати. Наприклад, нерідко потрібно 3-4 цикли процесу стрес-тестування, перш ніж будуть досягнуті цільові показники продуктивності, тому скрипти зазвичай підтримуються разом із регресія на.

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

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

LoadRunner

LoadRunner – це широко використовуваний інструмент для тестування навантаження, який зараз продається OpenText у версіях Professional, Enterprise та Cloud після переходу з HP на Micro Focus OpenTextРезультати навантажувальних тестів, отримані LoadRunner, розглядаються як еталонні.

JMeter

Apache JMeter це інструмент тестування з відкритим кодом. Це чистий Java застосунок для стрес-тестування та тестування продуктивності, призначений для охоплення таких типів тестів, як навантажувальне, функціональне та стрес-тестування. Поточні версії 5.6.x Apache JMeter вимагати Java 8 або пізніше, з Java 17 рекомендовано.

Стрес-тестер

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

NeoНавантаження

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

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

Метрики для стрес-тестування

Метрики допомагають оцінити продуктивність системи та зазвичай вивчаються в кінці стрес-тесту. Зазвичай використовувані метрики групуються у три родини.

Вимірювання масштабованості та продуктивності

  • Сторінок за секунду: Вимірює, скільки сторінок запитується за секунду.
  • Пропускна здатність: Базова метрика — розмір даних відповіді за секунду.
  • Раунди: Кількість разів, коли було заплановано тестові сценарії, порівняно з кількістю разів, коли клієнт їх виконав.

Відповідь на заявку

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

Невдачі

  • Невдалі з’єднання: Кількість невдалих з’єднань, відхилених клієнтом (слабкий сигнал).
  • Невдалі раунди: Кількість невдалих раундів.
  • Невдалі влучання: Кількість невдалих спроб системи (непрацюючі посилання або невидимі зображення).

У заключному розділі перераховано ситуації, які найчастіше виправдовують проведення стрес-тесту.

Приклади стрес-тестування

Стрес-тестування заслуговує на своє місце щоразу, коли очікується, що подія призведе до значного перевищення денного базового рівня трафіку:

  • Вебсайт електронної комерції, що оголошує про фестивальний розпродаж.
  • Новинний вебсайт під час важливої ​​події.
  • Рада з питань освіти публікує результати іспитів.
  • Сайти соціальних мереж, блоги та мобільні додатки під час вірусного моменту.

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

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

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

Спайкове тестування створює раптовий, дуже короткий сплеск навантаження на систему та вимірює, як швидко вона масштабується та відновлюється. Стрес-тестування поступово збільшує навантаження до збою, тому воно відповідає на питання, де знаходиться межа, а не на те, як швидко реагує система.

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

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

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

Так. Чернетки другого пілота JMeter плани тестування, скрипти k6 або Gatling, параметризовані генератори даних та кроки конвеєра CI з командної запрошення, написаної простою мовою. Розглядайте результат як перший чернетку: час обдумування, темп виконання та твердження все одно потребують перевірки тестером.

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

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

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