Види performance-тестів: load, stress, spike, soak
Зміст
«Перевір, чи витримає» — це не одне завдання, а щонайменше шість різних. Чи тримає система навантаження, яке ми очікуємо щодня? Що з нею станеться за межею очікуваного — або коли заберуть половину памʼяті? Чи переживе вона раптовий пік і, головне, чи повернеться після нього до норми? Чи не почне повільнішати сама собою на третю добу роботи? Скільки вона тримає взагалі? А скільки триматиме, коли користувачів стане вдесятеро більше? Кожне питання має власний вид тесту, власну форму навантаження і власний критерій «пройдено» — а прогін за принципом «просто побільше користувачів» відповідає рівно на одне з них. Зазвичай не на те, яке хвилює бізнес.
Слабке розуміння теми зводиться до переліку назв; сильне називає питання за кожною назвою і додає, що єдиної таксономії тут немає. З цього й почнемо.
Дві таксономії, і жодна з них не «правильна»
(performance testing) — це тип тестування, що визначає продуктивність компонента або системи. Силабус ISTQB CT-PT називає його збірним терміном: під ним живе будь-яке тестування, зосереджене на швидкості відгуку (responsiveness) системи під різними обсягами навантаження. Усі види нижче — його підвиди, а не альтернативи; цілі перф-тестування — у першій главі розділу.
Далі — розбіжність, про яку зазвичай мовчать. Розділ §1.2 силабуса CT-PT перелічує сім видів, шпаргалка Grafana k6 — шість, і списки не збігаються ні складом, ні назвами.
| ISTQB CT-PT §1.2 | Grafana k6 |
|---|---|
load testing | average-load test |
stress testing | stress test |
spike testing | spike test |
endurance testing | soak test |
scalability testing | — |
capacity testing | — |
concurrency testing | — |
| — | smoke test |
| — | breakpoint test |
Це не недогляд одного з джерел. Дока k6 говорить прямо: консенсусу не існує навіть щодо назв цих видів, а самі категорії відносні до випадку — «стрес-тест для одного застосунку є тестом середнього навантаження для іншого». Отже, «стрес-тест» без контексту конкретної системи нічого конкретного не означає.
Звідси два наслідки. Перший: називайте обидві таксономії й кажіть, що вони не збігаються — зводити їх до одного «істинного» списку помилка. Другий: стратегія сильно залежить від профілю організації («уникайте мислити в абсолютах»), і жоден окремий вид тесту не усуває всіх ризиків — щоб оцінити різні режими , види комбінують. Сьомий вид ISTQB, concurrency testing, тут не розбираємо: його дім — глава про метрики.
Load: чи тримає система те, що ми очікуємо
означує (load testing) як тип тестування продуктивності для оцінки поведінки під різними навантаженнями — зазвичай у діапазоні між очікуваними умовами низького, типового й пікового використання. Силабус розгортає: фокус на здатності витримувати зростальні рівні очікуваних реалістичних навантажень, що виникають із запитів , згенерованих контрольованою кількістю конкурентних користувачів або процесів.
Два слова тут несучі. Очікувані реалістичні — усе, що виходить за очікуваний діапазон, це вже не load, а stress. Контрольована кількість — навантаження задається, а не спостерігається: прогін, у якому ви не знаєте, скільки саме подали, під канонічне означення load-тесту не підпадає.
k6 називає той самий вид average-load test — оцінка того, як система працює за очікуваних нормальних умов, — і дає орієнтири, яких канон не дає взагалі: навантаження середнє продове, тривалість 5–60 хвилин, привід — регулярна перевірка, що система тримає продуктивність за середнього використання.
І головне обмеження виду, сформульоване каноном прямо: без кількість користувачів не є доброю мірою навантаження. «Ми прогнали 500 користувачів» без опису того, що ці 500 роблять, навантаження не задає — а отже, результат ні з чим не порівняти. Як будується профіль — предмет окремої глави розділу про модель навантаження.
Stress: за межею навантаження — і за межею ресурсів
Означення (stress testing) складене з двох незалежних частин, і другу пропускають найчастіше. Це тип тестування продуктивності, що оцінює систему або компонент:
- на межах або поза межами очікуваних чи специфікованих робочих навантажень;
- або зі зменшеною доступністю ресурсів — силабус називає їх поіменно: доступна обчислювальна ємність, доступна і памʼять.
Другу вісь можна тестувати, не додавши жодного : достатньо забрати памʼять або урізати пропускну здатність.
Режим відмови, який шукає цей вид, канон описує окремо: деградація стає неприйнятною вже в межах нормального, очікуваного, дозволеного діапазону, а типові причини — одного або кількох ресурсів і змінні фонові навантаження. Позамежний приклад інший: система падає або не відповідає на раптову велику кількість запитів. Тому мета стрес-тесту — не зламати систему, а побачити, як саме вона ламається.
k6 означує вид як оцінку роботи системи на своїх межах, коли навантаження перевищує очікуване середнє: навантаження високе, тривалість — ті самі 5–60 хвилин. Поруч стоїть вид, якого в ISTQB немає взагалі, — breakpoint: він поступово нарощує навантаження, щоб знайти межі ємності системи. Якщо питають «як знайти точку зламу», мовою інструментів це саме breakpoint.
Практична деталь: дока JMeter радить тримати вимкненим запис усіх відповідей (Functional Testing) під час стрес-тестування — інакше файл результатів швидко розростається, і продуктивність самого JMeter страждає. Типово і так вимкнений, тож ідеться про те, щоб не ввімкнути його заради зручності й забути. Вимірювальний інструмент починає псувати те, що міряє.
Spike: витримати пік — і повернутися
(spike testing) зосереджене на здатності системи правильно відповісти на раптові сплески пікових навантажень і потім повернутися до усталеного стану; глосарій формулює це ще прямолінійніше — через відновлення після сплеску.
Обидва канонічні формулювання містять два елементи, і другий пропускають регулярно: прогін, у якому система пережила пік, але лишилася в деградованому стані, вид вважає провальним.
Форма навантаження теж своя. Раптова зміна має власну назву серед канонічних форм профілю — Steps, миттєві зміни навантаження (наприклад, додавати 100 віртуальних користувачів кожні пʼять хвилин), на відміну від Ramp-ups — рівномірного зростання (скажімо, один віртуальний користувач за хвилину), з якого будують звичайний load-тест. k6 означує вид як валідацію виживання системи за раптових, коротких і масивних зростань активності: навантаження дуже високе, тривалість кілька хвилин, привід — сезонні події або часті піки трафіку.
Канонічний приклад ISTQB упізнає кожен: продаж квитків на великий спортивний захід. Система падає або не відповідає на раптову велику кількість запитів, і діагноз названо прямо — ємності обробити цю кількість користувачів недостатньо.
Soak: те, що ламається лише з часом
(endurance testing; в інструментів той самий вид зветься soak) зосереджене на стабільності системи протягом проміжку часу, специфічного для її операційного контексту. Глосарій додає другу вісь: під значним навантаженням протягом значного проміжку часу.
Предмет пошуку канон називає поіменно: цей тип тестування перевіряє, що немає проблем ємності ресурсів — витоків памʼяті, зʼєднань з базою даних, пулів потоків, — які згодом можуть деградувати продуктивність і/або спричинити відмови в точках зламу. Ширший перелік причин «деградації з часом» канон наводить окремо: витоки памʼяті, фрагментація диска, зростання мережевого навантаження, ріст файлового сховища й неочікуване зростання бази даних.
Чому цього не бачать інші види? Бо дефект проявляється не на високому навантаженні й не на короткому прогоні, а на звичайному навантаженні, витриманому довго. Саме тому k6 дає для soak навантаження середнє, а тривалість — довгу (години), з приводом «після змін перевірити систему під тривалим безперервним використанням».
Метрика цього виду — тренд, а не значення: дивитися треба на нахил графіка й споживання памʼяті, бо середнє за вісім годин може лишатися прийнятним, поки остання година вже нікуди не годиться. Пріоритет джерело формулює як питання ризику: одні системи більше ризикують тривалим використанням, і тоді soak має бути пріоритетним, інші — інтенсивним, і там першість за стрес-тестами.
Volume: коли змінна — не користувачі, а дані
Тут потрібна засторога, і вона важливіша за сам виклад. Канонічного джерела під термін «обсягове тестування» (volume testing) не існує, і це перевірено, а не припущено: у машинному зрізі ISTQB Glossary на 651 термін такого запису немає (решта семи видів присутні всі), у силабусі CT-PT — жодного входження. Єдине джерело, яке термін означує, — стаття Вікіпедії, тобто secondary, до того ж із власним банером про брак посилань і останньою правкою в серпні 2023 року. Тому далі — ужиткове означення, а не канон.
За цим джерелом — тестування застосунку на певній кількості даних, щоб перевірити продуктивність системи за такої кількості даних у базі. Змінна тут — обсяг збережених даних, а не кількість користувачів чи темп запитів: базу розширюють до потрібного розміру й тестують продуктивність уже на ній; другий випадок — файл обміну (.dat, .xml), для якого створюють зразок потрібного розміру. Показово, що навіть енциклопедія подає віднесення виду до як чужу думку — «is regarded by some as a type of capacity testing».
Канон ISTQB явище описує, але назви йому не дає: цілі ємності можуть також формулюватися щодо обсягів даних, які виникають із транзакцій, і в силабусі є приклад цього класу — деградація, коли користувачі запитують великі обсяги даних, з діагнозом «ємності обробити згенеровані обсяги даних недостатньо». Тому вимогу «система тримає базу на N мільйонів рядків» надійніше формулювати як ціль ємності з явним обсягом даних.
Scalability і capacity: «скільки тримаємо зараз» проти «наскільки виростемо»
Ці два види плутають частіше за решту, хоча різниця між ними в одному слові — часі.
Тестування ємності (capacity testing) визначає, скільки користувачів і/або транзакцій задана система підтримає — і при цьому все ще виконає заявлені цілі продуктивності. Умова несуча: максимальна кількість користувачів, за якої система ще відповідає за задані X мілісекунд, і максимальна, за якої вона просто не падає, — два різні числа, і ємністю канон називає перше. Тому питання «скільки ми тримаємо?» відповіді не має, поки не названо ціль. Саму ємність глосарій означує як ступінь, у якому максимальні межі параметра відповідають вимогам.
(scalability testing) дивиться в майбутнє: фокус — здатність системи відповідати майбутнім вимогам продуктивності, які можуть виходити за межі нинішніх, а мета — визначити здатність рости (більше користувачів, більші обсяги збережених даних) без порушення чинних специфікованих вимог і без відмов. Найцінніше тут те, що результат переживає прогін: щойно межі масштабованості відомі, порогові значення можна встановити й моніторити на проді, щоб отримати попередження про проблеми, які можуть ось-ось виникнути. Тест дає число — число стає порогом алерту.
Деталь, яка робить відповідь сильною: на здатність масштабуватися впливають усі три підхарактеристики — часова поведінка, і ємність, — тож «не масштабується» діагноз неповний, поки не названо, яка з трьох упирається першою. А в k6 окремого capacity-виду немає взагалі: найближчий родич — уже згаданий breakpoint, і різниця між ними в питанні («скільки тримає з дотриманням цілей» проти «де ламається»).
Baseline і перф-смоук: без чого прогін не має вердикту
(performance baseline) — набір метрик, які використовують для порівняння поточних і раніше досягнутих вимірів продуктивності. У каноні він стоїть серед , поряд із цілями перф-тесту й SLA, і дає змогу продемонструвати конкретні поліпшення продуктивності та/або підтвердити досягнення критеріїв приймання. Зворотний бік канон називає серед ризиків прогону, розпочатого без заздалегідь визначених метрик: без набору базових вимірів, що визначають прийнятну й неприйнятну продуктивність, фактичні результати прогону неможливо оцінити. Тобто «700 мс» — не результат; результат — «700 мс проти 480 мс тиждень тому, на тому самому середовищі й тих самих даних».
Деталь, яку легко проґавити: канон каже, що може бути потрібно спершу створити базовий вимір, використовуючи знеособлені дані з бази, де це можливо. Baseline не «береться з проду» — його готують, і саме тому він відтворюваний.
Дока k6 ставить порівняння з базовим виміром першим пунктом серед цілей регулярних прогонів, а поруч — окремими пунктами — розуміння варіацій метрик у часі (плаский чи змінний тренд) і виявлення нових релізів. Те, що це три різні цілі, важливо: baseline відповідає на «чи ми не погіршилися проти зафіксованої точки», тренд — на «куди ми рухаємося загалом». Що означає кожна метрика — тема глави про метрики.
Найдешевший інструмент розділу — перф-. k6 радить починати саме з нього: перед більшими прогонами валідувати, що скрипти працюють як очікується і що система нормально почувається з кількома користувачами. У шпаргалці це низьке навантаження, тривалість у секундах або хвилинах, привід — зміна відповідного коду; перевіряє він функціональну логіку, базові метрики й відхилення. Спосіб не втратити три години нічного прогону на скрипті, який зламався через переїзд .
Який вид відповідає на яке питання
Найшвидший спосіб обрати вид — почати не з назви, а з форми проблеми. Канон дає чотири , і кожен веде до свого набору гіпотез.
| Що видно | Типові причини за каноном | Куди дивитися |
|---|---|---|
| Повільно на будь-якому навантаженні | погана схема або реалізація БД, мережева затримка, фонові навантаження | не перф-тест: помітно вже у функціональному тестуванні |
| Повільно на середньому й високому | насичення одного або кількох ресурсів, змінні фонові навантаження | load, далі stress |
| Деградація з часом | витоки памʼяті, фрагментація диска, зростання мережевого навантаження, ріст файлового сховища, неочікуване зростання БД | soak / endurance |
| Погана обробка помилок під перевантаженням | недостатні пули ресурсів, замалі черги й стеки, надто швидкі таймаути | stress, spike |
Перший рядок канон коментує окремо: такі проблеми виявляються під час функціонального й юзабіліті-тестування, не лише перф-тестування. Четвертий — найпідступніший: час відповіді ще прийнятний, а обробка помилок уже деградує.
І засторога до інтерпретації. Графіку утилізації ресурсів не можна вірити, не спитавши, яке в нього вікно усереднення: сплеск високої утилізації може спричинити насичення, хоча усереднена по довгому інтервалу утилізація виглядає низькою. Задокументований випадок: інструменти показували утилізацію процесора не вище 80% при наявному насиченні — бо звітували пʼятихвилинними середніми, усередині яких утилізація на секунди сягала 100%.
Типові помилки
«Стрес-тест — це просто побільше навантаження». Виглядає як подвоєна кількість віртуальних користувачів, а насправді половина канонічного означення не про навантаження взагалі: вона про зменшену доступність ресурсів — обчислювальної ємності, пропускної здатності, памʼяті.
«Система пережила пік — сплесковий тест пройдено». Виглядає як зелений прогін, а насправді обидва канонічні формулювання вимагають ще й повернення до усталеного стану. Система, яка після піку лишилася повільною, тест провалила — тому фазу спадання не можна відрізати «щоб швидше».
«Soak — це той самий load, тільки довше й сильніше». Виглядає як логічне посилення, а насправді навантаження в soak — середнє: дефекти класу «деградація з часом» проявляються на звичайному навантаженні, витриманому довго.
«Ми тримаємо 5000 користувачів». Виглядає як число ємності, а насправді ємність за каноном — це скільки система підтримає і при цьому все ще виконає заявлені цілі продуктивності. Без названої цілі це просто точка, у якій ще не впало.
«700 мс — це нормально?» Виглядає як питання до тестувальника, а насправді це питання до базового виміру, якого немає: без метрик, що визначають прийнятну й неприйнятну продуктивність, результати прогону оцінити нічим. Канон називає це ризиком прогону без заздалегідь визначених метрик, а k6 ставить порівняння з базовим виміром першим пунктом серед цілей регулярних прогонів.
Підсумок
- Види — це різні питання, а не різні сили одного питання. Load — «чи тримаємо очікуване», stress — «що за межею і за браку ресурсів», spike — «чи переживемо пік і повернемось», soak — «чи не деградуємо з часом», capacity — «скільки тримаємо з дотриманням цілей», scalability — «наскільки виростемо».
- Єдиної таксономії немає, і це треба називати вголос. ISTQB дає сім видів, k6 — шість зі своїми назвами, а дока інструмента визнає брак консенсусу навіть щодо назв.
- У половини означень є друга половина, яку пропускають: у стресі — дефіцит ресурсів, у сплеску — повернення до усталеного стану, в ємності — «і при цьому виконує заявлені цілі».
- Числа інструментів — орієнтир, а не норма: стрес для одного застосунку є середнім навантаженням для іншого.
- Прогін без базового виміру вердикту не має: результат — це порівняння з зафіксованою точкою на тому самому середовищі й тих самих даних.
Можливі питання
«Чим load відрізняється від stress?» Перевіряють, чи бачите ви межу «очікуване проти позамежного» — і чи згадаєте другу вісь стресу, зменшену доступність ресурсів. Відповідь лише про «більше користувачів» читається як вивчений список.
«Що таке soak-тест і що саме він ловить?» Дивляться, чи назвете клас дефектів (витоки памʼяті, невіддані зʼєднання з БД, вичерпані пули потоків) і чи скажете, що навантаження в такому прогоні звичайне, а висновок роблять по тренду.
«Чим capacity відрізняється від scalability?» Класична пара на плутанину: перше — про «зараз і на цьому залізі», друге — про «потім, коли виростемо». А «скільки користувачів витримає система» — питання, на яке сильна відповідь починається зі зустрічного: яка ціль продуктивності? Без неї «витримає» не визначено.
«Що таке volume testing?» Питання на чесність: термін ужитковий, але канонічним його назвати не можна — в ISTQB такого терміна немає, а явище покривається цілями ємності щодо обсягів даних.
«Які види performance-тестів ви знаєте?» Слухають не довжину списку, а структуру: чи привʼязуєте кожну назву до питання і чи згадуєте, що таксономії різняться.
Джерела
Дві таксономії, і жодна з них не «правильна»
- ISTQB® CT-PT — Foundation Level Specialist Syllabus, Performance Testing v1.0 (2018) — §1.2: перф-тестування як збірний термін і перелік із семи видів, включно з
concurrency testing. - ISTQB Glossary — означення
performance testingяк типу тестування, що визначає продуктивність компонента або системи. - Grafana k6 — Load test types — перелік із шести видів, пряма заява про брак консенсусу щодо назв, залежність стратегії від профілю ризику й теза, що жоден окремий вид не усуває всіх ризиків.
Load: чи тримає система те, що ми очікуємо
- ISTQB® CT-PT — Foundation Level Specialist Syllabus, Performance Testing v1.0 (2018) — §1.2: фокус на очікуваних реалістичних навантаженнях і контрольованій кількості користувачів; §4.2.5: теза, що без операційних профілів кількість користувачів не є доброю мірою навантаження.
- ISTQB Glossary — означення
load testingчерез діапазон між очікуваними низьким, типовим і піковим використанням. - Grafana k6 — Load test types — назва
average-load testта орієнтири навантаження, тривалості й приводу для запуску.
Stress: за межею навантаження — і за межею ресурсів
- ISTQB® CT-PT — Foundation Level Specialist Syllabus, Performance Testing v1.0 (2018) — §1.2: дві осі стресу (навантаження за межею і зменшена доступність ресурсів) із переліком ресурсів; §1.5: режим відмови «деградація в межах очікуваного діапазону» і його причини.
- ISTQB Glossary — означення
stress testingчерез межі очікуваних навантажень або зменшену доступність ресурсів. - Grafana k6 — Load test types — означення й орієнтири стрес-тесту; окремий вид
breakpointяк поступове нарощування до межі ємності. - Apache JMeter — User's Manual: Elements of a Test Plan — порада вимикати запис усіх відповідей під час стрес-тестування, бо файл швидко розростається й страждає продуктивність самого JMeter.
Spike: витримати пік — і повернутися
- ISTQB® CT-PT — Foundation Level Specialist Syllabus, Performance Testing v1.0 (2018) — §1.2: сплеск як здатність відповісти на раптові пікові навантаження й повернутися до усталеного стану; §4.2.4: форми профілю
StepsіRamp-ups; §1.5: приклад із продажем квитків і діагноз «ємності бракує». - ISTQB Glossary — означення
spike testingчерез відновлення після раптових сплесків пікових навантажень. - Grafana k6 — Load test types — означення сплеску як виживання за раптових коротких масивних зростань активності, орієнтири навантаження й тривалості.
Soak: те, що ламається лише з часом
- ISTQB® CT-PT — Foundation Level Specialist Syllabus, Performance Testing v1.0 (2018) — §1.2: витривалість як стабільність в операційному контексті й перевірка на відсутність проблем ємності ресурсів (витоки памʼяті, зʼєднання з БД, пули потоків); §1.5: перелік причин деградації з часом.
- ISTQB Glossary — означення
endurance testingчерез значне навантаження протягом значного проміжку часу. - Grafana k6 — Load test types — назва
soak, орієнтири (середнє навантаження, тривалість у годинах) і пріоритет soak проти стресу за профілем ризику системи.
Volume: коли змінна — не користувачі, а дані
- Wikipedia — Volume testing — джерело класу
secondary, єдине, що термін означує: тестування на заданій кількості даних у базі або у файлі обміну, розширення бази до потрібного розміру, віднесення до тестування ємності подане як чужа думка. - ISTQB® CT-PT — Foundation Level Specialist Syllabus, Performance Testing v1.0 (2018) — канон описує явище без окремої назви: §1.2 — цілі ємності можуть формулюватися щодо обсягів даних; §1.5 — приклад деградації на великих обсягах і його діагноз.
Scalability і capacity: «скільки тримаємо зараз» проти «наскільки виростемо»
- ISTQB® CT-PT — Foundation Level Specialist Syllabus, Performance Testing v1.0 (2018) — §1.2: ємність як кількість користувачів і транзакцій із дотриманням заявлених цілей; масштабованість як здатність рости без порушення чинних вимог і межі масштабованості як пороги моніторингу на проді; §1.1: вплив усіх трьох підхарактеристик на здатність масштабуватися.
- ISTQB Glossary — означення
capacityяк ступеня, у якому максимальні межі параметра відповідають вимогам, іscalability testingяк тестування масштабованості продукту. - Grafana k6 — Load test types —
breakpointяк найближчий інструментальний родич: поступове нарощування навантаження до меж ємності.
Baseline і перф-смоук: без чого прогін не має вердикту
- ISTQB® CT-PT — Foundation Level Specialist Syllabus, Performance Testing v1.0 (2018) — §4.1.2: baseline як набір метрик для порівняння, елемент критеріїв приймання і створення базового виміру на знеособлених даних; §2.1: ризик прогону без базових вимірів.
- Grafana k6 — Automated performance testing — порівняння з базовим виміром як перша ціль регулярних прогонів, окремо від спостереження за трендом і виявлення регресій релізів.
- Grafana k6 — Load test types — порада починати зі смоук-тесту й орієнтири смоуку: низьке навантаження, секунди-хвилини, перевірка логіки, базових метрик і відхилень.
Який вид відповідає на яке питання
- ISTQB® CT-PT — Foundation Level Specialist Syllabus, Performance Testing v1.0 (2018) — §1.5: чотири режими відмови продуктивності з переліками типових причин і застереження, що «повільно завжди» виявляється не лише перф-тестуванням.
- Brendan Gregg — The USE Method — чому низька середня утилізація не виключає насичення: пʼятихвилинні середні ховають секундні піки до 100%.
Що таке тестування продуктивності і які його види ви знаєте?
Це не окрема процедура, а збірний тип тестування: під ним живе будь-яка перевірка того, як система реагує (responsiveness) на різні обсяги навантаження. Канонічний перелік силабуса ISTQB CT-PT налічує сім підвидів — load, stress, spike, endurance, scalability, capacity, concurrency. Шпаргалка Grafana k6 дає шість, частину зве інакше (average-load замість load, soak замість endurance) і додає власні smoke та breakpoint, яких у каноні немає. Тобто перелічити «правильний» список неможливо: спільної домовленості щодо назв цих видів не існує, і дока k6 говорить про це прямо. Сильна відповідь тому не міряється довжиною списку — вона привʼязує до кожної назви питання, на яке цей вид відповідає. «Load — чи тримаємо очікуване, stress — що буде за межею» звучить як розуміння; шість слів поспіль — як вивчений перелік.
Чим load-тест відрізняється від stress-тесту?
Межа проходить по слову «очікуване». Load працює всередині діапазону, який ми самі прогнозуємо, — від низького через типове до пікового використання; щойно навантаження виходить за цей діапазон, вид уже інший. Друга відмінність тонша, і саме вона зазвичай губиться: у означенні стресу є ще одна вісь, зовсім не про кількість користувачів, — робота за зменшеної доступності ресурсів, і канон називає їх поіменно: обчислювальна ємність, , памʼять. Тобто стрес можна поставити, не додавши жодного : досить забрати частину памʼяті або звузити канал. Різні й цілі: load показує, чи виконуємо ми обіцянку в нормальному режимі, а стрес — як саме система розсипається, коли виконати її неможливо. Відповідь у стилі «стрес — це коли навантаження побільше» читається як половина означення, бо це буквально його половина.
Що таке spike-тест і за якої умови він вважається пройденим?
Це перевірка реакції на раптовий сплеск пікового навантаження — і, що не менш важливо, на те, чи повернеться система до усталеного стану після нього. Обидва канонічні формулювання містять цю другу частину, і саме її пропускають: прогін, у якому пік пережили, а після спаду лишився вдвічі гіршим, вид вважає провальним. Практичний наслідок неочевидний, але жорсткий: фазу спадання не можна вирізати з профілю «щоб прогін ішов швидше», бо разом із нею зникає половина критерію. Форма навантаження теж своя — миттєві стрибки, а не плавне зростання. Класичний приклад із канону — старт продажу квитків на великий спортивний матч, коли система не відповідає на раптову хвилю запитів, а діагноз звучить як брак ємності обробити стільки користувачів.
Що ловить soak-тест і чому цього не бачать інші види?
Soak (у ISTQB — endurance) шукає дефекти, які проявляються лише з часом: невіддані зʼєднання до бази даних, вичерпані пули потоків, витік памʼяті. Ширший перелік причин деградації з часом додає до цього фрагментацію диска, розростання бази понад очікуване, збільшення файлового сховища й наростання мережевого трафіку. Інші види їх не бачать з простої причини: цей клас проблем не залежить від висоти навантаження, він залежить від тривалості. Тому навантаження в soak — звичайне, середнє продове, а довгий тут прогін: години, а не хвилини. І висновок роблять не по значенню, а по нахилу: середній час відповіді за вісім годин може виглядати цілком пристойно, тоді як остання година вже провальна. Якщо в графіку памʼять і час відповіді повзуть угору й не вирівнюються — це і є знахідка, навіть коли жоден поріг ще формально не пробито.
Навіщо перф-смоук, якщо все одно буде повний прогін?
Це найдешевший тест розділу і правильний перший крок: низьке навантаження, тривалість у секундах чи хвилинах, мета — переконатися, що скрипт робить те, що задумано, і що застосунок спокійно тримає кількох користувачів. Він дивиться на логіку самого сценарію, базові метрики та відхилення — а не на продуктивність під навантаженням. Цінність суто економічна: зламаний після переїзду скрипт краще виявити за тридцять секунд, ніж уранці над результатами тригодинного нічного прогону, де половина запитів віддавала 404. Привід для запуску — зміна відповідного коду, тож у він природно стоїть перед усім іншим. Дороге в перф-тестуванні не саме навантаження, а час до вердикту, і цей час береже.
Чим capacity відрізняється від scalability?
Різниця в часі, на який дивиться тест. Ємність — це про «зараз і на цьому залізі»: скільки користувачів або система підтримає, при цьому все ще виконуючи заявлені цілі продуктивності. Масштабованість — про майбутнє: чи зможемо ми вирости (більше користувачів, більші обсяги збережених даних), не порушивши чинних вимог і не почавши падати. Умова «і при цьому виконає цілі» в першому означенні несуча: максимум, на якому система ще вкладається у свої X мілісекунд, і максимум, на якому вона просто ще стоїть, — різні числа, і саме перше канон вважає ємністю. У масштабованості найцінніший побічний продукт: щойно межі відомі, вони перетворюються на пороги моніторингу на проді й дають попередження до інциденту. І ще одна деталь, яка додає ваги відповіді: масштабованість залежить одразу від трьох підхарактеристик — від часової поведінки, від і від ємності, — тому діагноз «не масштабується» лишається неповним, доки не сказано, котра з них упирається першою.
Замовник питає «скільки користувачів ми тримаємо?». Що ви відповісте?
Сильна відповідь починається зі зустрічного питання: за якої цілі продуктивності? Без названої цілі число не визначене, бо «система ще відповідає за 500 мс» і «система ще не впала» дають різні максимуми. Тому коректна форма відповіді — не одне число, а пара: стільки-то конкурентних користувачів на такому-то з утриманням заявленої цілі. Якщо цілі немає взагалі, це не питання до тестувальника, а прогалина у вимогах, і чесніше повернути її замовнику, ніж вигадати цифру. Тут же корисно уточнити, чи питання насправді про сьогодні (ємність), чи про плани зростання на рік (масштабованість) — бо це різні прогони з різними критеріями.
Чому «ми подали 500 віртуальних користувачів» ще не описує навантаження?
Бо кількість користувачів сама собою мірою навантаження не є — канон каже це прямо й повʼязує з операційними профілями. Пʼятсот сесій, у яких люди читають одну сторінку, і пʼятсот, у яких вони проганяють чекаут із записом у базу, створюють навантаження, що відрізняється на порядок. Наслідок практичний: результат такого прогону ні з чим не можна порівняти, бо неможливо повторити ті самі умови наступного разу. Тому в звіті поруч із числом користувачів мають стояти сценарії, їхні частки й темп — тобто профіль. Без нього два прогони на одній системі можуть розійтися вдвічі, і жоден із них не буде «неправильним».
Що таке baseline і чому без нього прогін не має вердикту?
— це зафіксований набір метрик, з яким порівнюють поточні результати. Канон відносить його до поруч із цілями перф-тесту й SLA, бо дозволяє показати конкретне поліпшення або підтвердити, що критерії досягнуто. Зворотний бік записаний серед : якщо прогін стартував без заздалегідь визначених метрик, які відділяють прийнятне від неприйнятного, оцінити його результати нічим. Тому «сімсот мілісекунд» — не результат; результатом воно стає у формі «сімсот проти чотирьохсот вісімдесяти минулого тижня, за незмінного стенда й того самого набору даних». Деталь, яку часто проґавлюють: базовий вимір не «беруть з проду», його готують — зокрема на знеособлених даних із бази, — і саме тому він відтворюваний. Поруч варто не плутати три різні цілі регулярних прогонів: порівняння з базовим виміром, спостереження за трендом метрик у часі й виловлювання конкретного релізу.
Що таке volume testing і чи є він канонічним видом?
Це питання на чесність, і правильна відповідь починається з визнання: канонічного означення немає. У такого терміна не знайти, у силабусі CT-PT він не зустрічається жодного разу, а єдине джерело, яке його означує, — стаття Вікіпедії, тобто вторинне джерело, до того ж із власним попередженням про брак посилань. Ужиткове значення таке: змінною тут виступає не кількість користувачів і не темп запитів, а розмір даних у сховищі — базу наповнюють до потрібного обсягу й міряють продуктивність уже на ній; окремий випадок — файл обміну потрібного розміру. Канон при цьому саме явище описує, але імені йому не дає: цілі ємності можуть формулюватися й щодо обсягів даних, а в прикладах є деградація на запитах великих обсягів із діагнозом «ємності обробити такі обсяги бракує». Практичний висновок: вимогу «система тримає базу на сто мільйонів рядків» надійніше оформити як ціль ємності з явно названим обсягом даних, ніж як «volume-тест», під який кожна команда розуміє своє.
Чим форма профілю Steps відрізняється від Ramp-ups і де кожна доречна?
Це дві канонічні форми зміни навантаження в часі, і вибір між ними задає, який саме вид ви насправді ставите. Ramp-ups — рівномірне наростання, скажімо по одному віртуальному користувачу за хвилину: система встигає прогрітися, пули розігнатися, кеші заповнитися, і саме на такій формі будують звичайний load-тест. Steps — миттєві зміни, наприклад плюс сто користувачів кожні пʼять хвилин: система отримує стрибок без часу на адаптацію, і це форма для сплеску. Помилка, яку легко зробити ненавмисно: назвати прогін сплесковим, а профіль зібрати з плавним ramp-up — тоді ви виміряли зовсім не те, бо весь сенс сплеску саме в раптовості. І навпаки, різкі сходинки в load-тесті дають артефакти прогріву, які потім читають як деградацію.
Що таке breakpoint-тест і як він співвідноситься зі stress і capacity?
Це вид зі словника інструментів, а не з ISTQB: поступове нарощування навантаження, доки не знайдеться межа ємності системи. Якщо на співбесіді питають «як знайти точку зламу», мовою k6 відповідь саме breakpoint. Від стресу він відрізняється тим, що стрес фіксує навантаження за межею очікуваного й дивиться на характер , а breakpoint шукає саму координату межі. Від ємності — питанням: capacity відповідає «скільки тримаємо з дотриманням заявлених цілей», breakpoint — «де ламається», а це, як правило, більше число. Корисно назвати обидві межі в одній відповіді: точка, після якої ми виходимо за ціль, і точка, після якої система перестає працювати, — різні, і бізнесу зазвичай потрібна перша.
Система повільна навіть під одним користувачем. Який вид тесту тут запускати?
Жодного — це не задача для перф-тестів. Канон виділяє такий режим окремо: повільно на будь-якому навантаженні, і типові причини лежать у площині реалізації — невдала схема бази чи запит до неї, мережева , чужі фонові процеси на середовищі. Такі проблеми видно вже під час функціонального й юзабіліті-тестування, тож ганяти під них навантажувальний прогін означає витратити день і отримати той самий висновок дорожче. Правильний хід — профілювання конкретного запиту й перевірка середовища, а перф-тест лишити для випадків, коли повільність зʼявляється саме з ростом навантаження. Уміння сказати «цей симптом не про мій вид тестів» на співбесіді цінується не менше, ніж знання видів.
Часу вистачає лише на один довгий прогін: soak чи stress?
Відповідь визначає профіль ризику самої системи, а не смак тестувальника. Якщо система працює тривалими безперервними сесіями — бекенд, який місяцями не перезапускають, фонові обробники, довгі користувацькі сесії, — більший ризик у деградації з часом, і пріоритет за soak. Якщо система більше ризикує інтенсивним використанням — розпродажі, рекламні кампанії, пікові години, — першість за стрес-тестами. Універсальної відповіді тут немає навмисно: канон інструментів радить не мислити в абсолютах саме тому, що жодним одним видом усі не закриваються. Сильно звучить відповідь, яка називає критерій вибору, а не вид: «дивлюсь, який режим відмови для цього продукту дорожчий».
Моніторинг показує утилізацію процесора не вище 80%, а система захлинається. Як таке можливо?
Перше, що треба спитати про будь-який графік утилізації, — яке в нього вікно усереднення. Задокументований випадок саме такий: інструменти звітували пʼятихвилинними середніми й не показували більш ніж 80%, тоді як усередині цих інтервалів утилізація на секунди сягала 100% і давала реальне . Середнє за пʼять хвилин фізично не може показати сплеск на дві секунди — воно його розмазує. Для перф-тестів наслідок простий: дрібніша гранулярність метрик або пряме спостереження за чергами й затримками, а не лише за відсотками завантаження. І дисципліна інтерпретації: «запас є» — це висновок, який має спиратися на відоме вікно усереднення, інакше він не доведений.
Чому один вид перф-тестів не закриває ризики продуктивності?
Бо кожен вид відповідає на власне питання й бачить власний режим відмови. Насичення ресурсу під зростальним навантаженням покаже load, а далі stress; деградацію з часом — тільки soak, бо на короткому прогоні витік памʼяті ще нічого не встиг зʼїсти; погану обробку помилок під перевантаженням — stress і spike, причому час відповіді там може бути ще прийнятним, а черги й вже сипатися. Тому дока інструментів прямо каже, що одним видом усіх ризиків продуктивності не зняти, а стратегія залежить від профілю ризику організації. Практично це означає набір, а не один прогін: смоук на кожну зміну коду, регулярний load із порівнянням до базового виміру, періодичні stress і spike та довгий soak перед великими релізами. І ще один нюанс, який відрізняє сильну відповідь: види ще й відносні — те, що для одного застосунку позамежний стрес, для іншого буденне середнє навантаження, тож без контексту конкретної системи назва виду майже нічого не означає.
Як ви побудуєте перф-стратегію для продукту з нуля?
Починати треба не з інструмента й не з видів, а з двох речей: цілей продуктивності й операційних профілів. Без цілі жоден прогін не має вердикту — немає межі між прийнятним і неприйнятним; без не описане, і результати не порівнюються між прогонами. Далі — базовий вимір: зафіксована точка на конкретному середовищі й конкретних даних, підготовлена заздалегідь, за потреби на знеособлених даних. Потім вибудовується піраміда за вартістю: перф-смоук на кожну відповідну зміну коду, регулярний load-прогін із порівнянням до базового виміру в пайплайні, stress і spike під ризики пікових подій, soak перед релізами, які чіпають довгоживучі компоненти. Питання ємності й масштабованості вирішуються окремими прогонами, а їхні результати не лишаються у звіті — вони переїжджають у пороги моніторингу на проді. І окремим рядком у стратегії має стояти домовленість про те, що вважається регресією: скільки відсотків погіршення проти базового виміру валять збірку, бо без цього числа порівняння перетворюється на дискусію.
Три ситуації, у яких вибір виду тесту вирішує все: розкладання розмитої вимоги «перевір, чи витримає» на конкретні прогони, розбір інциденту після «зеленого» сплескового тесту й читання нічного soak, де середнє виглядає пристойно, а тренд ні. Цифри в кейсах умовні — важлива логіка рішень, а не самі значення.
Кейс 1. Одна фраза в тікеті — шість різних прогонів
У бек-лозі зʼявляється тікет: «Перед релізом перевірити, що система витримає навантаження». Виконати його як є неможливо: незрозуміло ні що подавати, ні коли зупинятися, ні що вважати провалом. Перш ніж відкривати інструмент, фразу розкладають на питання, і кожне питання дає власний прогін.
| Питання, яке насправді ставить бізнес | Вид | Форма й тривалість | Що вважаємо провалом |
|---|---|---|---|
| Скрипт узагалі робочий, система жива? | перф-смоук | низьке навантаження, секунди-хвилини | сценарій не проходить або сиплються помилки на кількох користувачах |
| Тримаємо те, що очікуємо щодня? | load / average-load | рівне наростання до середнього продового, 5–60 хв | ціль продуктивності не витримана на очікуваному профілі |
| Що буде за межею або за браку ресурсів? | stress | навантаження вище очікуваного або урізані памʼять чи пропускна здатність | система ламається неконтрольовано: обвал замість передбачуваного сповільнення, зламана обробка помилок під перевантаженням |
| Переживемо раптовий пік і повернемось? | spike | миттєвий стрибок, пік кілька хвилин, обовʼязково фаза спаду | метрики не повернулися до усталених після спаду |
| Не зʼїде система за добу роботи? | soak / endurance | середнє навантаження, години | зростальний тренд часу відповіді чи памʼяті без виходу на плато |
| Скільки тримаємо з дотриманням цілей? | capacity | поступове нарощування з контролем цілі | немає провалу як такого: результат — число, яке стає порогом |
Що дивитися і чому:
- Провал у кожному рядку різний, і це головне. Один прогін не дає вердикту за всіма шістьма критеріями: профіль, зібраний під одне питання, для решти просто не створює умов — у ньому немає ні фази спаду, ні годин рівного навантаження. Тому «зробити один великий навантажувальний тест» — це відповісти на одне питання й видати відповідь за всі шість.
- Рядок про ємність не має слова «провалено». Capacity-прогін не проходить і не падає — він видає число. Але число має сенс лише разом із ціллю: максимум, на якому система ще вкладається у свої 500 мс, і максимум, на якому вона просто ще стоїть, — це два різні числа.
- Порядок у таблиці — це і є порядок запуску. коштує хвилини, load — до години, soak — ніч. Ганяти дорогі прогони до дешевих означає регулярно втрачати ніч через скрипт, що не встиг за новим шляхом .
- «Витримає» без не визначено. Пʼятсот користувачів, які читають головну, і пʼятсот, які проходять чекаут із записом у базу, — це різні навантаження. Тому в тікет треба повернути питання про профіль, а не вигадувати цифру.
Кейс 2. Сплеск «пройдено», а розпродаж утрачено
Реальна за формою історія. Перед сезонним розпродажем команда прогнала сплесковий тест: за десять секунд підняли навантаження до пʼятикратного від звичайного, потримали три хвилини, побачили, що помилок немає й в межах цілі, зупинили прогін і поставили в звіті «пройдено». У суботу о десятій ранку система пік пережила — і залишилася повільною до вечора.
Що показав розбір, крок за кроком:
- Прогін обірвали на піку. Профіль закінчувався верхньою полицею: фази спаду до початкового рівня в ньому не було взагалі, бо «далі й так усе зрозуміло». Саме там і живе половина критерію: вид вимагає не лише пережити сплеск, а й повернутися до усталеного стану.
- до бази не згорнувся. Під піком він розрісся до стелі, а після спаду залишився зайнятим, і кожен наступний звичайний запит чекав на вільне зʼєднання. На піку цього не видно: там усі чекають, і це очікувано.
- Автоскейлінг спрацював — після того, як усе скінчилося. Нові інстанси піднялися за чотири хвилини сорок секунд, тобто майже на півтори хвилини пізніше, ніж закінчився сплеск. Формально механізм працює, практично — не рятує, і ця цифра мала стати вимогою до інфраструктури, а не сюрпризом у суботу.
Що дивитися і чому:
- Фаза спадання — не формальність, а половина тесту. Якщо в профілі немає повернення до початкового рівня і хвоста спостереження після нього, ви поставили не сплесковий тест, а короткий стрес.
- Метрику після спаду міряють проти усталеного стану ДО піку. Тому перед сплеском потрібен рівний відрізок звичайного навантаження: без нього немає з чим порівнювати «повернулися чи ні».
- Плавне наростання замість стрибка знецінює прогін. Ramp-up дає механізмам адаптації фору, якої в реальності не буде: у розпродажу трафік приходить сходинкою, а не похилою.
Кейс 3. Нічний soak: середнє зелене, тренд червоний
Вісім годин середнього продового навантаження, ціль — 95-й часу відповіді не гірше 800 мс. Уранці зведений звіт показує 640 мс за прогін, і це в межах цілі. Але зведене число тут — найгірший спосіб дивитися на soak.
година p95, мс RSS процесу, МБ активних зʼєднань до БД
1 480 310 22
2 495 360 24
3 510 415 27
4 545 470 31
5 600 540 35
6 690 615 41
7 820 690 46
8 980 765 50
Зведене за весь прогін число — ті самі 640 мс, тобто формально «пройдено». Насправді прогін провальний: до восьмої години система вже вдвічі повільніша за початок, памʼять зросла в 2,5 раза й на плато не вийшла, а кількість зʼєднань до бази монотонно повзе вгору — класична картина того, що їх беруть і не віддають. Ще дві-три години такого прогону — і пул упреться в максимум, після чого запити почнуть чекати або відвалюватися. Тобто дефект тут не в тому, що якесь значення перевищило поріг, а в тому, що жодна з трьох кривих не вирівнялася.
Аби це не жило в голові у людини, порівняння з оформлюють як гейт у :
// baseline.json готують заздалегідь: незмінний стенд, той самий набір даних
import baseline from './baseline.json';
type RunSummary = { p95Ms: number; rssStartMb: number; rssEndMb: number };
const MAX_REGRESSION = 0.1; // 10% гірше за базовий вимір — уже регресія
const MAX_MEMORY_GROWTH = 0.2; // 20% росту RSS за прогін без виходу на плато
export function checkRun(run: RunSummary): string[] {
const problems: string[] = [];
const p95Limit = baseline.p95Ms * (1 + MAX_REGRESSION);
if (run.p95Ms > p95Limit) {
problems.push(`p95 ${run.p95Ms} мс проти базових ${baseline.p95Ms} мс`);
}
// нахил, а не значення: скільки памʼяті додалося за прогін
const growth = (run.rssEndMb - run.rssStartMb) / run.rssStartMb;
if (growth > MAX_MEMORY_GROWTH) {
problems.push(`RSS виріс на ${Math.round(growth * 100)}% і не вийшов на плато`);
}
return problems;
}
А перед тим, як віддавати ніч під довгий прогін, дешевий перф-смоук перевіряє, що сценарій узагалі живий: ті самі ендпоінти, тільки кілька запитів і секунди часу.
import { test, expect } from '@playwright/test';
const SCENARIO = ['/api/catalog', '/api/cart', '/api/checkout/quote'];
test('перф-смоук: усі ендпоінти сценарію живі перед довгим прогоном', async ({ request }) => {
for (const path of SCENARIO) {
const res = await request.get(`https://staging.example.com${path}`);
expect(res.status(), `ендпоінт ${path} відповів не 200`).toBe(200);
}
});
Що дивитися і чому:
- У soak метрика — нахил, а не значення. Зведене середнє за прогін структурно ховає деградацію: чим довший прогін, тим сильніше хороший початок компенсує поганий кінець. Тому дивляться погодинний зріз і питають, чи вийшла крива на плато.
- Три криві поруч читаються краще за одну. Час відповіді сам собою каже «стало гірше», а памʼять і зʼєднання підказують, чому саме: витік у процесі й невіддані зʼєднання до бази — різні дефекти з різними власниками.
- Гейт порівнює з базовим виміром, а не з абсолютним порогом. Питання «980 мс — це погано?» без зафіксованої точки відповіді не має; «980 мс проти базових 480 мс на незмінному стенді» — уже готовий баг-репорт.
- Допустимий відсоток має бути домовленістю, а не рішенням автора тесту. Число в константі — це і є те, що команда вважає регресією; поки воно не узгоджене, кожен червоний гейт перетворюється на дискусію замість дії.
- Смоук не міряє продуктивність. Його завдання інше: показати, що скрипт відповідає поточному API, а система тримає кількох користувачів. Плутати його з load-прогоном — типова помилка звітності: «смоук зелений» не означає «навантаження тримаємо».
Таксономія: чому єдиного списку немає
- Розумію, що performance testing — збірний тип тестування, а всі види нижче його підвиди, і памʼятаю обидва переліки: сім у силабусі ISTQB CT-PT проти шести у шпаргалці Grafana k6, з розбіжністю і в складі (
capacity,scalability,concurrencyпротиsmoke,breakpoint), і в назвах (loadпротиaverage-load,enduranceпротиsoak). - Можу пояснити, чому назва виду без контексту системи майже нічого не означає: позамежний стрес для одного застосунку — буденне середнє навантаження для іншого.
- Знаю, що одним видом усі не закриваються, тож набір підбирають під профіль організації та системи, а не «беруть найповніший».
Load і stress
- Знаю різницю load vs stress: перший живе всередині очікуваного діапазону (низьке, типове, пікове), другий починається там, де очікуване закінчується.
- Памʼятаю, що в load-тесті кількість користувачів задається, а не спостерігається, і що сама по собі ця цифра навантаження не описує — без два прогони ні з чим не порівняти.
- Знаю другу вісь стресу — зменшену доступність ресурсів (обчислювальна ємність, , памʼять): стресувати систему можна, не додавши жодного .
- Можу пояснити, що мета стрес-тесту — побачити характер , а не зламати систему; пошук самої координати межі в інструментах зветься
breakpointі в ISTQB відсутній.
Spike і soak
- Знаю, що сплесковий тест вважається пройденим лише за умови повернення до усталеного стану, тому фазу спадання не відрізають заради коротшого прогону.
- Розрізняю форми профілю:
Steps— миттєві стрибки навантаження (сплеск),Ramp-ups— рівномірне наростання (звичайний load); підміна форми підміняє вид тесту. - Знаю, що soak — це довго на середньому навантаженні, а не сильно, і який клас дефектів він ловить: невіддані зʼєднання до бази, вичерпані пули потоків, витік памʼяті, розростання сховища й самої БД.
- Розумію, що вердикт soak робиться по нахилу графіка, а не по середньому за прогін: пристойне середнє за вісім годин може ховати провальну останню годину.
Capacity, scalability і volume
- Знаю різницю capacity vs scalability: «скільки тримаємо зараз із дотриманням заявлених цілей» проти «наскільки виростемо, не порушивши чинних вимог».
- Памʼятаю, що ємність без названої цілі продуктивності не визначена: максимум «ще вкладаємось у ціль» і максимум «ще не впало» — різні числа.
- Можу пояснити, навіщо межі масштабованості потрібні після прогону — вони стають порогами моніторингу на проді, — і чому «не масштабується» неповний діагноз, поки не названо, що впирається першим: часова поведінка, чи ємність.
- Даю чесну відповідь про volume testing: канонічного означення в ISTQB немає, термін ужитковий, а саме явище коректніше оформити як ціль ємності з явно названим обсягом даних.
Baseline, смоук і читання результатів
- Розумію, чому число без не є результатом — без метрик, що відділяють прийнятне від неприйнятного, прогін нічим оцінювати, — і знаю, що baseline готують заздалегідь (за потреби на знеособлених даних) і порівнюють за незмінного стенда та того самого набору даних, а не «беруть з проду».
- Не плутаю три різні цілі регулярних прогонів: порівняння з базовим виміром, спостереження за трендом метрик у часі й виловлювання конкретного релізу.
- Можу пояснити цінність перф-: за секунди переконатися, що скрипт живий і система тримає кількох користувачів, перш ніж витрачати ніч на довгий прогін.
- Знаю чотири режими відмови й куди веде кожен: повільно завжди — не до перф-тестів; повільно на середньому й високому — load, далі stress; деградація з часом — soak; погана обробка помилок під перевантаженням — stress і spike.
- Памʼятаю про вікно усереднення метрик: усереднення по пʼять хвилин розмиває секундні піки до 100%, тож «CPU не вище 80%» ще не доводить, що запас є.
Квіз
Перед стартом
- Питань: 14
- Поріг «зараховано»: ≥70% правильних відповідей.
- Результат впливає на прогрес; завалені питання підуть у чергу повторення.
- Квіз впливає на компліт теми: тема стає «пройдено», лише коли прочитано теорію І квіз складено на ≥70%.
Питання
Чому не існує єдиного «правильного» переліку видів перф-тестів?