Performance testing: цілі та місце в QA-процесі
Зміст
Функціонально все зелене: форма зберігає, замовлення створюється, пройшла. А в понеділок о девʼятій ранку та сама форма думає сорок секунд, і жоден із заведених баг-репортів цього не передбачив. Загадки немає: перевіряли, чи система робить правильні речі, а зламалося те, як швидко і ціною яких ресурсів вона їх робить. Це окремий бік якості з окремими засобами перевірки — тому під нього виділено цілий розділ.
Ця глава — вхід у розділ. Вона не вчить писати скрипти навантаження: вона відповідає на питання, які стоять перед скриптом. Що саме ми міряємо, коли кажемо «продуктивність»; чим відрізняється від інженерії продуктивності; де перф-активності стоять у життєвому циклі; який словник треба мати, щоб розмова з розробником або девопсом не розсипалася на першій хвилині. Види тестів — у главі Види performance-тестів, метрики й — у главі Метрики.
Продуктивність — це характеристика якості, а не «щоб швидко»
Почнімо з означення, бо тут ховається половина непорозумінь. Продуктивність (performance efficiency) — ступінь, у якому компонент або система виконує свої функції з ефективним використанням ресурсів за заданих умов, пропускної здатності й часу. У продукту ISO 25010 вона стоїть як нефункціональна з трьома підхарактеристиками. Сама модель розбирається в розділі про основи тестування; тут беремо з неї рівно одну — і розкладаємо на три предмети виміру.
| Підхарактеристика | Що саме перевіряють |
|---|---|
| Часова поведінка (time behavior) | чи відповідає система на ввід у заданий час і за заданих умов; найпоширеніша ціль перф-тесту |
| Утилізація ресурсів (resource utilization) | скільки ресурсів на це витрачено; досліджують, якщо доступність ресурсів визнано ризиком |
| Ємність (capacity) | чи придатна архітектура на межах — за кількістю користувачів або обсягами даних |
Діапазон часової поведінки канон окреслює двома полюсами: від наскрізного системи на дію користувача — до кількості тактів процесора на конкретну задачу.
Ключове речення: усі три підхарактеристики впливають на здатність системи масштабуватися. «Система не масштабується» — не діагноз, а симптом однієї з трьох причин, і перше питання до такої заяви одне: якої саме. Поруч у глосарії стоять означення, які плутають найчастіше: ємність — ступінь, у якому максимальні межі параметра системи відповідають вимогам, масштабованість — ступінь, у якому систему можна підлаштувати під змінну ємність. Наслідок неприємний: вимога «має працювати швидко» покриває одну з трьох частин предмета, і система, яка відповідає за 200 мс, тримаючи процесор на 99%, формально її виконує — хоча запасу на зростання навантаження в неї вже немає.
Ціна повільності
Сайти, які швидко вантажаться й вчасно реагують на ввід, утримують користувачів краще за повільні, причому планка не там, де здається: користувачі порівнюють продукт не лише з конкурентами, а з найкращими сервісами, якими користуються щодня. Ціна не тільки грошова — дослідження показало, що стресова реакція на схожа на реакцію під час перегляду фільму жахів і сильніша за реакцію на чергу в касі. І окремо про мобільні: у них обмежені процесор і памʼять, тож зайвий код створює погані умови продуктивності саме там.
Що таке тестування продуктивності — і чим воно не є
Тестування продуктивності (performance testing) означене коротко: тип тестування, що визначає продуктивність компонента або системи. Термін збірний — під ним живе будь-яке тестування, зосереджене на швидкості відгуку (responsiveness) системи чи компонента під різними обсягами навантаження, і предмет не обмежений вебом: канон називає поіменно класичний клієнт-серверний, розподілений і вбудований контекст.
Форма роботи названа прямо: перф-тестування часто набуває форми експерименту, який дає змогу міряти й аналізувати конкретні параметри системи. Звідси й пʼять вимог, які канон ставить до самого тесту, — читайте їх як чеклист власного прогону.
| Принцип | Що вимагає |
|---|---|
| Узгодженість з очікуваннями | вирівняність з очікуваннями груп стейкхолдерів — користувачів, проєктувальників, експлуатації |
| Відтворюваність | повтор на незміненій системі дає статистично ідентичні результати в межах заданого допуску |
| Зрозумілість | результати зрозумілі й легко порівнянні з очікуваннями стейкхолдерів |
| Можливість виконання | тест іде на повній або частковій системі чи на середовищі, репрезентативному щодо продового |
| Економічність | тести доступні за ціною й здійсненні в межах терміну проєкту |
Друга вимога — та, об яку розбивається більшість домашніх спроб: прогін, який не можна повторити на незміненій системі й дістати той самий результат, тестом продуктивності за каноном не є.
Це й не одноразовий захід. Перф-тестування ітеративне за природою: кожен прогін дає інсайт, інформація з нього йде на оптимізацію, наступна ітерація показує наслідок змін — і так, поки цілі не досягнуто. Триває це на всіх рівнях тестування — компонентному, інтеграційному, системному, системно-інтеграційному та приймальному. Приємний побічний ефект: оцінка функціональної придатності та юзабіліті під навантаженням може виявити специфічні для навантаження проблеми, тобто прогін ловить і функціональні дефекти — аргумент за те, щоб не викидати перевірки відповідей із перф-сценарію заради «чистоти виміру».
Чого перф-тестування не дає — універсальної відповіді. Стратегія сильно залежить від профілю організації, а жоден окремий вид тесту не усуває всіх ризиків: щоб оцінити різні режими , види комбінують. Які саме — у главі про види тестів.
Testing чи engineering
Тестування продуктивності тісно інтегрується з юзабіліті-інженерією та інженерією продуктивності — але це сусідні дисципліни, а не синоніми.
Найважливіше твердження глави: статичні активності для продуктивності часто важливіші, ніж для функціональної придатності — бо стільки критичних дефектів продуктивності вноситься в архітектуру й проєктування. Друге джерело тих самих дефектів — вимоги, які не зафіксували цілей щодо часу відповіді, пропускної здатності системи чи , очікуваного навантаження й обмежень. Перелік статичних активностей канон дає готовим:
- рецензія вимог із фокусом на продуктивності;
- рецензія схем БД, , метаданих, і запитів;
- рецензія архітектури системи й мережі;
- рецензія критичних ділянок коду.
Жодна не потребує ні , ні окремого стенда — і саме тут тестувальник зазвичай дає найбільшу віддачу за витрачений час. А динамічне перф-тестування має починатися щойно система будується, а не наприкінці.
Місце в SDLC і shift-left
Канон вимагає, щоб аналіз починався рано й повторювався регулярно, а тестувальник уникав того, щоб покладатися виключно на перф-тестування наприкінці системного й системно-інтеграційного рівнів. Причина економічна: пізно знайдені дефекти продуктивності можуть бути надзвичайно дорогими й навіть призвести до скасування цілих проєктів. Це не «дорогий фікс» — це перепроєктування, на яке ніхто не закладав бюджет.
Ідеальна практика для послідовних моделей розробки сформульована одним реченням: включити критерії продуктивності до , визначених на самому початку проєкту. Далі кожна фаза має власну перевірку.
В ітеративних процесах розкладка інша, а правило те саме. Перф-тестування може відбуватися як частина першої ітерації або як ітерація, цілком присвячена продуктивності; в Agile командам належить вбудовувати статичне й динамічне перф-тестування в ранні ітерації, а не чекати останніх.
Окремо про CI, бо тут найчастіше плутають ціль. Головна мета перф-тестів у — переконатися, що зміна не погіршила продуктивність. Через короткий час, доступний у CI, ці тести можуть бути підмножиною ширших прогонів, які в інший час ганяє спеціалізована команда. Тобто «у нас перф у CI» і «у нас є перф-тестування» — різні заяви. Дока k6 додає з боку практики: не всі перф-тести придатні для CI/CD-, а запуск тільки з CI на зміни коду обмежує цілі перф-тестування — є ще cron-, хмарне планування й ручний запуск як пункт релізного чекліста. Сенс руху — зміна режиму: у багатьох організаціях продуктивність лишається невідчутною і реагують лише тоді, коли стається погане.
Коли проєкту (не) потрібне навантажувальне
Готового переліку «кому не треба» канон не дає — він дає інструмент: ризик. Ризики продуктивності ніколи не можна усунути повністю, певний ризик відмови на проді існуватиме завжди, а серед ключових цілей перф-тестування канон називає три: виявлення потенційних ризиків, пошук можливостей для поліпшення й визначення необхідних змін. Питання «нам потрібне навантажувальне?» перекладається так: які з цих трьох цілей для нас чогось варті.
Другий бік того самого рішення — числа. Канон вимагає: перф-тестування не слід починати, не зрозумівши спершу, які виміри й метрики потрібні, і перелічує шість наслідків, коли порадою нехтують:
- невідомо, чи прийнятні рівні продуктивності для операційних цілей;
- не визначені у вимірюваних термінах;
- може бути неможливо виявити тренди, що передбачають зниження продуктивності;
- фактичні результати неможливо оцінити порівнянням із базовим набором вимірів;
- результати оцінюються на основі субʼєктивної думки однієї чи кількох осіб;
- результати, які видав інструмент, просто не зрозумілі.
Чому чисел зазвичай немає, канон пояснює різко: перф-тестування часто позбавлене тест-, стейкхолдери горезвісно погано формулюють вимоги до продуктивності, а багато бізнес-аналітиків і власників продукту погано їх видобувають. Відсутність вимоги — радше норма, і робота починається саме з неї. Цілі задають стейкхолдери, причому користувацькі (задоволеність, бізнес-цілі) канон радить розводити з технічними (масштабування, умови деградації). Названі й три питання, з яких починають розмову: які виконуватимуться в тесті і який середній час відповіді очікується, які системні метрики збиратимуться і які значення очікуються, яких поліпшень очікують проти попередніх циклів.
Далі «має бути швидко» перетворюється на число. Форму дає (service level objective, SLO): вона мусить вказувати, як її міряють і за яких умов вона чинна — канонічний приклад звучить як «99% (усереднено за 1 хвилину) викликів Get RPC завершаться менш ніж за 100 мс, виміряно на всіх бекенд-серверах». Машинною ціль робить поріг (threshold): пороги якраз і кодифікують SLO — «95% запитів мають час відповіді нижче 200 мс», «менш ніж 1% запитів повертають помилку». Повний розбір SLI, SLO, SLA і — у главі про вимоги до продуктивності.
Той самий принцип працює у зворотний бік, коли тести вже прогнали. Канон дає негативний приклад дослівно: сказати «так, клієнти все ще можуть чекати довго під час оформлення» — не допомагає, бо не дає уявлення ні про зниження ризику, ні про залишковий рівень. Треба дати ясну картину частки клієнтів, які, ймовірно, зазнають затримок, рівних або більших за певні пороги.
Базовий словник: навантаження, віртуальний користувач, транзакція, сценарій
Чотири слова, без яких не читається жоден перф-звіт.
Навантаження і (load generation). Генерація навантаження — процес симуляції визначеного набору активностей на заданому навантаженні, які подаються компоненту або системі. Від функціональних кейсів навантаження відрізняється трьома речами: багато вводів користувачів, а не один; генерація може вимагати виділеного заліза й інструментів; вона залежить від відсутності функціональних дефектів у системі. Способів генерації канон називає чотири — через UI, натовпом реальних тестувальників, через API і захопленням протоколу; вибір між ними — компроміс «репрезентативність проти масштабу», а не суперечка про інструменти.
Транзакція (transaction) — одиниця роботи, яку рахують і міряють. Через неї означена (system ): кількість транзакцій заданого типу за одиницю часу — замовлень за годину, HTTP-запитів за секунду. Це не та транзакція, що в базі даних: там ідеться про атомарність групи команд, тут — про бізнес-операцію, час і кількість якої ми звітуємо. Інструменти дають готові лічильники таких одиниць (у k6 запити рахує метрика http_reqs).
(virtual user, VU) — симуляція активностей, що виконуються згідно з користувача. Це не людина і не браузер: конкурентність зазвичай моделюють в , задаючи кількість віртуальних користувачів. У JMeter один такий користувач — це потік: кожен виконує план тесту цілком і незалежно від інших, а окремі групи потоків семплюють різні функції. Межа, яку інструмент називає прямо: k6 не гарантує, що конкретний VU виконає конкретну ітерацію, тож дані привʼязують до VU, а не до номера ітерації.
Сценарій — це і є (load profile): канон каже дослівно, що агрегування операційних профілів дає профіль навантаження, який зазвичай називають сценарієм. Операційний профіль (operational profile) — фактичний або передбачений патерн використання: що робить один тип користувача і наскільки інтенсивно; профіль навантаження додає кількість екземплярів і розподіл у часі. В інструментах так само: у k6 в одному скрипті оголошують кілька сценаріїв, кожен зі своїм патерном планування віртуальних користувачів, і працюють вони паралельно.
Тепер головне, заради чого словник і потрібен. Навантаження задає системи, а не кількість користувачів. Кількість одночасних користувачів уживають замість неї часто — бо це число легше знайти й бо саме так навантаження задають інструменти, — але без визначення операційних профілів кількість користувачів не є доброю мірою навантаження. Арифметика з канону: 500 користувачів із короткими запитами щохвилини — це 30 000 запитів за годину; ті самі 500 із тими самими запитами раз на годину — 500 запитів. Різниця у 60 разів і щонайменше 60-кратна різниця у вимогах до заліза.
Два застереження на додачу. Перше: навіть «запитів за секунду» неявно агрегує дані за вікном виміру — система, що віддає 200 запитів/с у парні секунди і 0 в решті, має те саме середнє, що й система зі сталими 100 запитів/с, але миттєве навантаження вдвічі більше. Друге: форму навантаження варто тримати простою — наростання, плато, спадання; «американські гірки» марнують ресурси й ускладнюють ізоляцію проблеми. Мережева частина часу відповіді — у главі Життєвий цикл запиту.
Типові помилки
- «Час відповіді в нормі — значить, прогін пройдено». Насправді канон описує окремий (performance failure mode), де час відповіді прийнятний, а на високих і позамежних навантаженнях деградує обробка помилок — через недостатні пули ресурсів, замалі черги й стеки та надто швидкі . Дивитися треба й на те, що система робить із запитами, яких не витягнула.
- «Утилізація 70% — запас іще є». Насправді висока утилізація вже може бути проблемою, бо вимір за довгий період ховає короткі сплески до 100%. Задокументований випадок: моніторинг показував не вище 80%, бо звітував пʼятихвилинними середніми, усередині яких утилізація на секунди сягала 100%. Перше питання до графіка — яке в нього вікно усереднення. І окремо: будь-який ненульовий рівень (saturation) уже може бути проблемою, тобто приводом для розслідування.
- «Повільно — отже, треба навантажувальне». Насправді є режим відмови, коли відповідь неприйнятна незалежно від навантаження — через погану схему чи реалізацію БД, мережеву затримку або фонові навантаження. Канон каже прямо: такі проблеми можуть виявитися під час функціонального й юзабіліті-тестування, не лише перф-тестування.
- «Відкрили тридцять браузерів автотестами — це навантаження». Насправді генерація через UI годиться, якщо треба представити невелику кількість користувачів і є потрібна кількість клієнтів: для вона може бути найрепрезентативнішою, але тримається на стабільності UI, а часті зміни бʼють по відтворюваності й вартості супроводу. Для великих кількостей взаємодію захоплюють на рівні протоколу, а конкурентність інструмент моделює потоками, не вкладками браузера.
Підсумок
- Продуктивність — характеристика якості з трьох частин: часова поведінка, утилізація ресурсів і ємність. «Має бути швидко» покриває одну з них, а всі три разом визначають, чи система масштабується.
- Тестування продуктивності — експеримент із вимогою відтворюваності. Прогін, який не повторюється на незміненій системі з тим самим результатом, вердикту не дає.
- Критичні дефекти продуктивності вносяться в архітектуру, проєктування і вимоги — тому статичні активності тут часто важать більше, ніж для функціональної придатності, а динамічні прогони починають, щойно є що навантажувати.
- Рішення «чи потрібне навантажувальне» ухвалюють за ризиком, а не за розміром проєкту, і починають не з інструмента, а з числа: без вимоги у вимірюваних термінах результат оцінюється субʼєктивною думкою.
- Навантаження задає пропускна здатність системи, а не кількість користувачів. Ті самі 500 користувачів можуть означати 500 або 30 000 запитів за годину — різницю задає операційний профіль.
Можливі питання
- «Що таке performance testing і навіщо воно, якщо функціонально все працює?» Чекають розведення функціонального й нефункціонального боку якості та згадку трьох підхарактеристик. Слабка відповідь зупиняється на «перевіряємо, чи швидко».
- «Чим тестування продуктивності відрізняється від інженерії продуктивності?» Перевіряють, чи розуміє кандидат, що критичні дефекти цього класу народжуються в архітектурі й вимогах, а не в коді останнього спринту. Вдалий хід — назвати статичні активності, які QA робить без генератора навантаження.
- «На якому етапі проєкту починається перф-тестування?» Очікувана відповідь — на етапі концепції й вимог, із критеріями продуктивності у критеріях приймання, а не «після системного тестування». Плюс балів за уточнення, що в CI живе підмножина.
- «Нашому проєкту потрібне навантажувальне тестування?» Питання-пастка: перевіряють, чи почне кандидат із розміру команди й трафіку замість ризику. Сильна відповідь ставить зустрічні питання — які цілі й числа вже є, які транзакції критичні, що буде з бізнесом, якщо вони деградують.
- «Замовник каже: має працювати швидко. Ваші дії?» Дивляться на вміння перетворити побажання на вимогу: метрика, поріг, перцентиль, навантаження, точка виміру, умови чинності.
- «Чи означає 1000 віртуальних користувачів тисячу реальних?» Перевіряють словник і чесність: VU — симуляція за операційним профілем, потік виконання інструмента, а навантаження визначає пропускна здатність системи.
Джерела
Продуктивність — це характеристика якості, а не «щоб швидко»
- ISTQB® CT-PT — Foundation Level Specialist Syllabus, Performance Testing v1.0 (2018) — продуктивність як нефункціональна характеристика ISO 25010, три підхарактеристики, їхній вплив на масштабованість і діапазон виміру часової поведінки.
- ISTQB Glossary — означення
performance efficiency,capacityіscalability, які розводять три сусідні поняття. - web.dev — Why does speed matter? — утримання користувачів, порівняння з найкращими щоденними сервісами, стресова реакція на затримки, обмежені ресурси мобільних пристроїв.
Що таке тестування продуктивності — і чим воно не є
- ISTQB® CT-PT — Foundation Level Specialist Syllabus, Performance Testing v1.0 (2018) — збірний предмет і контексти застосування, пʼять вимог до тесту, форма експерименту, ітеративність і всі рівні тестування, статичні активності та їхня вага, дефекти під навантаженням.
- ISTQB Glossary — означення
performance testingяк типу тестування, що визначає продуктивність компонента або системи. - Grafana k6 — Load test types — стратегія залежить від профілю ризику організації, і жоден окремий вид тесту не усуває всіх ризиків.
- ISTQB® CT-PT — Foundation Level Specialist Syllabus, Performance Testing v1.0 (2018) — вимога починати аналіз ризиків рано й повторювати регулярно, ціна пізніх дефектів, розкладка по фазах послідовної моделі, ітерації в Agile, мета й обсяг перф-тестів у CI.
- Grafana k6 — Automated performance testing — межі підходу «тільки CI/CD», альтернативні способи запуску та перехід від реактивного режиму до проактивного.
Коли проєкту (не) потрібне навантажувальне
- ISTQB® CT-PT — Foundation Level Specialist Syllabus, Performance Testing v1.0 (2018) — ризик як підстава рішення й неусувний , три ключові цілі перф-тестування, шість наслідків «тестування без чисел», відсутність тест-оракула, хто задає цілі й три питання до стейкхолдерів, вимога описувати залишковий ризик часткою користувачів і порогом.
- Google SRE Book — Chapter 4. Service Level Objectives — SLO мусить називати спосіб виміру й умови чинності; канонічний приклад формулювання цілі.
- Grafana k6 — Thresholds — пороги як кодифікація SLO і приклади формулювань pass/fail.
Базовий словник: навантаження, віртуальний користувач, транзакція, сценарій
- ISTQB® CT-PT — Foundation Level Specialist Syllabus, Performance Testing v1.0 (2018) — навантаження проти тестових даних і чотири способи генерації, пропускна здатність системи через транзакції, конкурентність як кількість віртуальних користувачів, сценарій як агрегований профіль навантаження, арифметика «ті самі 500 користувачів — різниця в 60 разів».
- ISTQB Glossary — означення
load generation,virtual user,concurrencyіload profile. - Apache JMeter — головна сторінка проєкту — конкурентність змодельована потоками: одночасне семплювання багатьма потоками й окремими групами потоків для різних функцій.
- Apache JMeter — User's Manual: Elements of a Test Plan — один віртуальний користувач як потік, що виконує план тесту цілком і незалежно від інших.
- Grafana k6 — Executors — інструмент не гарантує, що конкретний VU виконає конкретну ітерацію.
- Grafana k6 — Metrics — готовий лічильник запитів
http_reqsяк інструментальна форма підрахунку транзакцій. - Grafana k6 — Scenarios — кілька сценаріїв в одному скрипті, кожен зі своїм патерном планування віртуальних користувачів, працюють паралельно.
- Google SRE Book — Chapter 4. Service Level Objectives — «запитів за секунду» неявно агрегує за вікном виміру: приклад 200/0 проти сталих 100.
- Grafana k6 — Load test types — тримайтеся простих патернів навантаження й уникайте «американських гірок» заради порівнюваності результатів.
Що таке тестування продуктивності і навіщо воно, якщо функціонально все зелене?
Це тип тестування, завдання якого — визначити продуктивність компонента або системи, тобто перевірити не «що система робить», а якою швидкістю й ціною в ресурсах вона це робить. Функціональні перевірки відповідають на питання коректності: замовлення створилось, лист пішов, поле збереглося. Продуктивність — окремий, нефункціональний бік якості з моделі ISO 25010, і зелена про нього не каже нічого. Термін збірний: під ним живе будь-яка перевірка швидкості відгуку (responsiveness) системи під різними обсягами навантаження, і предмет не обмежений вебом — так само працює в класичних клієнт-серверних, розподілених і вбудованих системах. Практичний наслідок: форма, яка зберігає запис за 200 мс на порожній базі й за сорок секунд у пікову годину, функціонально справна в обох випадках — зламалася саме продуктивність, і ловить це окремий клас перевірок.
З яких частин складається продуктивність як характеристика якості?
З трьох підхарактеристик, і плутати їх невигідно. Часова поведінка (time behavior) — чи вкладається система у відведений за обумовлених умов; на неї націлена більшість перф-тестів. (resource utilization) — скільки ресурсів на цю відповідь витрачено; її досліджують, коли доступність ресурсів визнали . Ємність (capacity) — чи витримує архітектура межі за кількістю користувачів або обсягами даних. Розмах першої з них навмисно широкий: від наскрізного часу відповіді на дію користувача до кількості процесорних тактів на конкретну задачу. Разом усі три визначають, чи здатна система масштабуватися. Звідси й головний практичний висновок: вимога «має бути швидко» описує лише одну третину предмета, і сервіс, який віддає відповідь за 200 мс на процесорі, завантаженому на 99%, формально її задовольняє — хоча запасу під зростання навантаження там уже немає.
Чим ємність відрізняється від масштабованості?
Ємність — це наявна стеля: ступінь, у якому максимальні межі параметра системи відповідають вимогам (скільки одночасних сесій, який обсяг даних, скільки замовлень на годину). Масштабованість — це здатність ту стелю рухати: ступінь, у якому систему можна підлаштувати під змінну ємність. Тобто одне про поточну межу, друге — про можливість її змінити, і система з високою ємністю може бути погано масштабованою (потужна, але прибити цвяхами до одного сервера). Тому фраза «система не масштабується» — це симптом, а не діагноз: масштабованість тримається на всіх трьох підхарактеристиках, і перше зустрічне питання завжди одне — яка саме з них упирається: час відповіді, ресурси чи межа параметра.
Що таке віртуальний користувач і чи означає 1000 VU тисячу реальних людей?
Ні, і це один із найчастіших ляпів у звітах. (virtual user, VU) — це симуляція активностей, що виконуються згідно з користувача; не людина, не браузер і не сесія реального клієнта. Конкурентність в інструментах навантаження зазвичай моделюють саме кількістю VU — тому число й потрапляє в розмову замість справжньої міри навантаження. Технічно за VU стоїть потік виконання інструмента: у JMeter один такий користувач — це потік, який проганяє план тесту цілком і незалежно від інших, а різні групи потоків семплюють різні функції. Є й межі, про які інструменти попереджають самі: у k6 немає гарантії, що саме цей VU візьме саме цю ітерацію, — тому дані в скрипті розкладають по віртуальних користувачах, а не по номерах ітерацій. Сильна відповідь на співбесіді додає головне: 1000 VU не описує навантаження, поки не сказано, що ці користувачі роблять і як часто.
Що таке транзакція в перф-тестуванні і як через неї рахують пропускну здатність?
(transaction) тут — одиниця роботи, яку рахують і міряють: оформлене замовлення, платіж, HTTP-запит. Саме через неї означена (system ): скільки транзакцій заданого типу система витягує за одиницю часу — замовлень за годину, запитів за секунду. Головна пастка — тезка з бази даних: там слово означає атомарність групи команд, а в перф-звіті це бізнес-операція, тривалість і кількість якої ми доповідаємо. Лічильники таких одиниць інструменти дають готовими — наприклад, кількість запитів у k6 видно в метриці http_reqs. Практичний наслідок: перш ніж міряти, команда має домовитися, що саме вважається транзакцією в цьому продукті — інакше «1000 транзакцій за хвилину» у звіті й у голові замовника означатимуть різні речі.
Чим операційний профіль відрізняється від сценарію?
Операційний профіль (operational profile) описує один тип користувача: фактичний або передбачений патерн використання — що людина робить і наскільки інтенсивно. (load profile) додає масштаб: скільки таких екземплярів і як вони розподілені в часі. Агрегування операційних профілів і дає профіль навантаження, який зазвичай називають сценарієм — тобто «сценарій» у перф-контексті це не крок-за-кроком тест-кейс, а розкладка «хто, скільки і коли». Ту саму ієрархію видно в інструментах: k6 дозволяє описати в одному скрипті кілька сценаріїв, кожному задати власний патерн планування віртуальних користувачів і пустити їх одночасно. На співбесіді ця пара розводить кандидата, який просто крутив ручки в інструменті, від того, хто розуміє, звідки беруться цифри на вході.
Чому кількість одночасних користувачів — погана міра навантаження?
Бо навантаження задає системи, а не кількість голів. Число користувачів беруть тому, що його легше дістати й що інструменти приймають на вхід саме його — але без визначених операційних профілів воно навантаження не описує. Арифметика з канону наочна: 500 користувачів, кожен з яких робить короткий запит щохвилини, дають 30 000 запитів за годину; ті самі 500 користувачів із тим самим запитом раз на годину дають 500. Різниця в шістдесят разів, і щонайменше така сама різниця у вимогах до заліза. Практичний наслідок: рядок у ТЗ «має тримати 500 користувачів» вимогою не є, поки до нього не дописали профіль. І окремо варто памʼятати, що навіть «запитів за секунду» неявно усереднює за вікном виміру: система, що видає 200 запитів у парні секунди й нуль у решті, має те саме середнє, що й стала сотня, але миттєве навантаження вдвічі більше.
Що таке відтворюваність перф-тесту і чому без неї прогін не дає вердикту?
Відтворюваність — одна з пʼяти вимог, які канон ставить до перф-тесту: повтор на незміненій системі має давати статистично ідентичні результати в межах заданого . Прогін, який цього не дає, тестом продуктивності за каноном не є — це спостереження, з якого не можна зробити вердикт, бо будь-яка різниця між прогонами однаково добре пояснюється зміною коду й випадковістю. Разом із нею канон називає ще чотири: узгодженість з очікуваннями стейкхолдерів (користувачів, проєктувальників, експлуатації), зрозумілість і легка порівнюваність результатів із цими очікуваннями, здійсненність (прогін на повній чи частковій системі або на середовищі, репрезентативному щодо продового) і економічність у межах бюджету та термінів проєкту. Форму роботи канон називає прямо: перф-тестування часто набуває форми експерименту, який дає змогу міряти й аналізувати конкретні параметри системи, — а експеримент без відтворюваності вердикту не дає.
Чи є перф-тестування разовим заходом і на яких рівнях воно живе?
Разовим воно не буває: перф-тестування ітеративне за природою — кожен прогін дає інсайт, той іде в оптимізацію, а наступний цикл показує, що зі змін вийшло, і коло повторюється, доки цілі не досягнуті. Живе воно на всіх рівнях тестування: компонентному, інтеграційному, системному, системно-інтеграційному та приймальному, тобто це не «етап наприкінці», а активність, яка супроводжує збирання системи. Є й приємний побічний ефект: оцінка функціональної придатності та юзабіліті під навантаженням може виявити проблеми, специфічні саме для навантаження, тому перф-прогін цілком здатен принести й функціональні дефекти. Практичний висновок звідси один: не варто викидати перевірки відповідей із перф-сценарію заради «чистоти виміру» — так частина знахідок просто не фіксується, а заразом втрачається й упевненість, що система під навантаженням узагалі віддавала правильні дані.
На якому етапі проєкту починається перф-тестування?
З концепції й вимог, а не після системного тестування. Канон вимагає починати аналіз рано й повторювати його регулярно, а тестувальнику — не покладатися виключно на прогони наприкінці системного й системно-інтеграційного рівнів. Причина економічна: пізно знайдений дефект продуктивності може виявитися надзвичайно дорогим і навіть призвести до скасування проєкту, бо лікується він не патчем, а перепроєктуванням, на яке бюджету ніхто не закладав. Для послідовних моделей ідеальна практика формулюється одним реченням: критерії продуктивності мають потрапити до , визначених на самому початку проєкту. В ітеративних процесах розкладка інша, а правило те саме: перф-роботи можуть іти як частина першої ітерації або як окрема ітерація, цілком присвячена продуктивності, і в Agile статичні та динамічні активності вбудовують у ранні ітерації. Динамічні прогони стартують, щойно зʼявляється що навантажувати, а не коли «все готово».
Чим тестування продуктивності відрізняється від інженерії продуктивності?
Канон ставить їх поруч, але не ототожнює: тісно інтегроване з інженерією продуктивності та юзабіліті-інженерією — це сусідні дисципліни, а не синоніми. Тестування визначає продуктивність компонента або системи, а гарна інженерія продуктивності допомагає уникнути пізнього виявлення критичних дефектів. Ключове твердження, заради якого це питання й ставлять: критичні дефекти продуктивності здебільшого вносяться в архітектуру й проєктування, а другим їх джерелом є вимоги, у яких не зафіксували цілей щодо часу відповіді, пропускної здатності системи, утилізації ресурсів, очікуваного навантаження й обмежень. Саме тому статичні активності для продуктивності часто важать більше, ніж для функціональної придатності. Що QA може зробити без жодного : рецензувати вимоги з фокусом на продуктивності; рецензувати схеми БД, , метадані, й запити; рецензувати архітектуру системи й мережі; рецензувати критичні ділянки коду. Жодна з цих активностей не потребує ні стенда, ні ліцензії на інструмент.
Яка головна мета перф-тестів у CI і чи достатньо їх самих?
Головна мета перф-тестів у одна — переконатися, що зміна не погіршила продуктивність; це роль регресійна, а не дослідницька. Оскільки вікно в пайплайні коротке, до нього зазвичай потрапляє лише підмножина ширшого набору тестів, який спеціалізована команда ганяє в інший час. Тому фраза «перф у нас у пайплайні» і фраза «у нас налагоджене перф-тестування» описують різні обсяги роботи: перша каже лише про захист від деградації на кожній зміні. Практика додає обмеження з іншого боку: не всі перф-тести взагалі придатні для CI/CD-, а запуск виключно на зміну коду звужує цілі перф-тестування — лишаються cron-, планування прогонів у хмарі й ручний запуск як пункт релізного чекліста. Сенс усього руху — змінити режим роботи команди: у багатьох організаціях продуктивність лишається невідчутною, і реагують на неї лише тоді, коли вже сталося погане.
«Нашому проєкту потрібне навантажувальне тестування?» — як відповісти?
Це питання-пастка: слабка відповідь починається з розміру команди й обсягу трафіку, сильна — з ризику. Готового переліку «кому не треба» не існує, зате є критерій: ризики продуктивності неможливо усунути повністю, певний шанс на проді лишається завжди, а ключових цілей перф-тестування три — виявити потенційні ризики, знайти можливості для поліпшення й визначити необхідні зміни. Отже питання перекладається так: чи варта для нас чогось хоч одна з цих трьох цілей. Далі йдуть зустрічні питання до замовника: які транзакції справді критичні, які числа щодо них уже існують, що станеться з бізнесом, якщо саме вони почнуть деградувати. Відповідь «ні» теж легітимна — але як висновок з оцінки ризику, а не як «нас поки мало».
Замовник каже «має працювати швидко». Ваші дії?
Перетворити побажання на вимірювану вимогу, бо в такому вигляді воно не перевіряється й вердикту не дає. Розмова починається з трьох питань до стейкхолдерів: які саме транзакції потраплять у тест і якого середнього часу відповіді від них чекають; які системні метрики збираємо й що вважаємо нормальним значенням; наскільки має покращитися картина проти попереднього циклу. Далі число вбирається у форму (service level objective, SLO), і головна вимога до неї — назвати спосіб виміру та умови, за яких ціль лишається чинною; канонічний приклад виглядає приблизно так: «99% викликів Get RPC, усереднено за одну хвилину, завершуються швидше за 100 мс, і вимір робиться на всіх бекенд-серверах». Машинною цю ціль робить поріг (threshold) в інструменті: «95% запитів швидші за 200 мс», «частка помилкових відповідей менша за 1%». Окремо варто розвести цілі користувацькі (задоволеність, бізнес-результат) і технічні (масштабування, умови деградації) — вони належать різним співрозмовникам і перевіряються по-різному.
Що станеться, якщо почати перф-тестування, не визначивши метрик?
Канон ставить це прямою умовою: спершу треба зрозуміти, які саме виміри й метрики знадобляться, і лише потім починати, — а далі перелічує шість наслідків нехтування порадою. Невідомо, чи прийнятні досягнуті рівні продуктивності для операційних цілей. Вимоги не сформульовані у вимірюваних термінах, тож не існує самого предмета перевірки. Неможливо помітити тренди, які передвіщають зниження продуктивності. Фактичні результати нема з чим порівняти, бо немає базового набору вимірів. Оцінка зводиться до субʼєктивної думки однієї-двох осіб. І нарешті — цифри, які видав інструмент, просто ніхто не розуміє. Причини, чому чисел зазвичай немає, канон називає без сентиментів: тест- в перф-тестуванні часто просто немає, стейкхолдери мають кепську славу щодо формулювання таких вимог, а чимало бізнес-аналітиків і власників продукту не вміють витягнути їх із замовника. Тобто відсутність вимоги — це норма, і робота QA починається саме з неї, а не з вибору інструмента.
Час відповіді в межах цілі. Чи означає це, що прогін пройдено?
Ні, і це класична пастка. Канон описує окремий , де час відповіді лишається прийнятним, а на високих і позамежних навантаженнях деградує саме обробка помилок — через недостатні пули ресурсів, замалі черги та стеки й надто агресивні . Інакше кажучи, система вчасно відповідає тим, кого обслужила, і при цьому негарно поводиться з тими, кого не витягнула: втрачає запити, віддає невиразні пʼятисоті, рве зʼєднання. Тому дивитися треба не лише на час, а й на те, що сталося із запитами, які не пройшли, — , їхній тип, поведінку черг. Друга половина того самого сюжету — ресурси: 200 мс при процесорі на 99% формально проходять ціль, але запасу під наступного користувача там немає.
Графік показує, що утилізація CPU не піднімалася вище 80%. Чи є запас?
Поки не відоме вікно усереднення графіка — сказати не можна. Задокументований випадок рівно про це: моніторинг звітував пʼятихвилинними середніми й показував не більше 80%, а всередині кожного вікна утилізація на секунди сягала стелі. Довге вікно завжди згладжує сплески, тож перше питання до будь-якого графіка утилізації — за яким інтервалом він усереднює, і лише друге — яке там число. Той самий ефект уже описаний для навантаження: 200 запитів у парні секунди й нуль у решті дають те саме середнє, що й стала сотня, при вдвічі більшому миттєвому піку. І окремий сигнал, який часто ігнорують: будь-який ненульовий рівень (saturation) — вже привід для розслідування, навіть коли утилізація виглядає скромно.
Продукт «повільний». Це автоматично задача для навантажувального тестування?
Не обовʼязково — спершу треба зʼясувати, чи залежить повільність від навантаження взагалі. Існує режим відмови, коли час відповіді неприйнятний незалежно від кількості користувачів: погана схема або реалізація бази даних, мережева , сторонні фонові навантаження на тому ж залізі. Канон прямо каже, що такі проблеми цілком можуть виявитися під час функціонального й юзабіліті-тестування, а не лише перф-тестування. Практичний хід простий: відтворити скаргу на одному користувачі в тихий час; якщо повільно й там — генератор навантаження нічого нового не покаже, і працюють інші інструменти: рецензія запитів і схеми БД, профілювання, перевірка мережевого шляху. Навантажувальний прогін потрібен тоді, коли час відповіді псується саме зі зростанням навантаження — тобто коли є що масштабувати по осі X.
Ми запустили 50 браузерів через Playwright паралельно. Це навантажувальне тестування?
Це через UI — легітимний спосіб, але з вузькою нішею: він годиться, коли треба представити невелику кількість користувачів і є потрібна кількість клієнтських машин. Для наскрізних сценаріїв така генерація буває найрепрезентативнішою, бо в неї входить реальна робота браузера, — але тримається вона на стабільності UI, а часті зміни інтерфейсу бʼють по відтворюваності результатів і по вартості супроводу. Для великих кількостей користувачів взаємодію захоплюють на рівні протоколу, а конкурентність моделює сам інструмент своїми потоками, а не вкладками браузера. Загалом канон називає чотири способи згенерувати навантаження: інтерфейсом, силами живих тестувальників, через API і захопленням трафіку на рівні протоколу. Вибирають між ними за компромісом — наскільки правдоподібно проти того, скільки взагалі вдасться подати, — а не за симпатією до фреймворка. І окремо: навантаження відрізняється від звичайних трьома речами — це багато вводів замість одного, воно може вимагати виділеного заліза й інструментів, і воно залежить від того, що функціональних дефектів у системі немає.
Як звітувати результат перф-тестування стейкхолдерам?
Числом із порогом, а не враженням. Канон дає негативний приклад дослівно: сказати «так, клієнти все ще можуть довго чекати під час оформлення» — не допомагає, бо така фраза не показує ні того, скільки ризику знято, ні того, скільки лишилося. Замість неї потрібна виразна картина: яка частка клієнтів, найімовірніше, чекатиме стільки ж або довше за названий поріг. Тобто структура звіту та сама, що й структура вимоги: метрика, поріг, умови виміру, отримане значення. Друга обовʼязкова частина — : повністю усунути ризики продуктивності неможливо, тому чесний звіт називає рівень, що лишився, а не обіцяє його відсутність. Форму навантаження теж варто тримати простою — наростання, плато, спадання: «американські гірки» марнують ресурси й ускладнюють ізоляцію проблеми, а результати важливо мати такими, які можна порівняти й проінтерпретувати.
Три ситуації, у яких вирішується доля перф-активностей ще до першого прогону: як побажання «має бути швидко» перетворити на число з порогом, як із кількості користувачів дістати справжнє навантаження і як розібрати скаргу «гальмує» так, щоб не витратити тиждень на там, де він нічого не покаже.
Кейс 1. «Має працювати швидко» перетворюємо на вимогу
Вхідні: у беклозі висить рядок «сторінка каталогу має вантажитися швидко». Прогнати проти нього нічого не можна — тут немає ні метрики, ні порога, ні умов виміру. Розмову зі стейкхолдером починають із трьох питань: які ганяємо в тесті і який вважається нормою; які системні метрики збираємо і які значення очікуємо; яких поліпшень чекають проти попереднього циклу.
Далі відповіді складають у вимірювану форму. (service level objective, SLO) мусить сказати не лише число, а й як його міряють і за яких умов вона чинна:
| Що почули | Чого бракує | На що перетворюємо |
|---|---|---|
| «Каталог має вантажитися швидко» | метрики, порога, точки виміру | 95% запитів GET /catalog завершуються швидше за 800 мс, вимір на боці API, при 300 замовленнях за годину |
| «Помилок майже не має бути» | числа й вікна усереднення | частка невдалих відповідей менша за 1%, усереднено за 5 хвилин прогону |
| «Має тримати 500 користувачів» | операційного профілю | 500 користувачів за профілем «один пошук на хвилину» — тобто 30 000 запитів за годину |
Останній рядок — окремий сюжет, до нього повернемось у другому кейсі. А коли числа є, вони стають машинними: інструмент кодифікує SLO порогом і сам виносить вердикт.
// k6: пороги — це SLO, записане так, щоб прогін сам червонів
export const options = {
thresholds: {
http_req_duration: ['p(95)<800'], // 95% запитів швидші за 800 мс
http_req_failed: ['rate<0.01'], // частка невдалих — менша за 1%
},
};
Що дивитися і чому:
- Порогів без умов виміру не буває. «Час відповіді 800 мс» нічого не варте, якщо не сказано, на якому навантаженні й у якій точці міряли: на клієнті з мобільною мережею й на боці API це різні числа для однієї системи.
- замість середнього — не формальність. Ціль формулюють як частку запитів, які вкладаються в поріг, бо саме так потім звітують : скільки клієнтів імовірно зіткнеться із , рівною або більшою за поріг.
- Розводьте користувацькі цілі й технічні. «Клієнт не кидає оформлення» і «сервіс тримає горизонтальне масштабування без деградації» — вимоги різних співрозмовників; змішані в одному рядку, вони не перевіряються жодним прогоном.
- Немає вимоги — це нормальний стан, а не блокер. Перф-тестування часто живе без тест-, а стейкхолдери погано формулюють такі вимоги. Робота QA тут починається саме з видобування чисел, і це і є перший внесок у якість.
Кейс 2. Арифметика профілю: чому «500 користувачів» не є навантаженням
Замовник просить «перевірити на 500 одночасних користувачах». Число виглядає як вимога, але навантаження воно не описує — бо навантаження задає , а не кількість голів. Порахуємо два з тією самою кількістю користувачів.
| Операційний профіль | Користувачів | Дій на користувача | Запитів за годину |
|---|---|---|---|
| Оператор колл-центру: пошук клієнта щохвилини | 500 | 60 за годину | 30 000 |
| Менеджер, який відкриває звіт раз на годину | 500 | 1 за годину | 500 |
Різниця — шістдесятикратна, і щонайменше така сама різниця у вимогах до заліза. Обидва рядки чесно називаються «500 користувачів», а системи під них потрібні різні.
Порядок дій, який знімає це питання:
- Зібрати операційні профілі — що робить кожен тип користувача і наскільки інтенсивно. Джерело: аналітика проду, логи, розмова з власником продукту.
- Агрегувати їх у (він же сценарій): скільки екземплярів кожного типу і як вони розподілені в часі.
- Перерахувати профіль у транзакції за одиницю часу — саме це число потім порівнюють із порогом і саме воно потрапляє у звіт.
- Задати форму навантаження: наростання, плато, спадання. Складні «американські гірки» марнують ресурси й ускладнюють ізоляцію проблеми.
Що дивитися і чому:
- Кількість користувачів залишиться на вході інструмента — і це нормально. Конкурентність в інструментах моделюють саме кількістю ; профіль потрібен для того, щоб це число щось означало, а не для того, щоб від нього відмовитись.
- «Запитів за секунду» теж усереднює. Система, що видає 200 запитів у парні секунди й нуль у решті, має те саме середнє, що й стала сотня, при вдвічі більшому миттєвому піку. Тому у звіті поруч із середнім має стояти вікно, за яким його рахували.
- Транзакцію треба назвати вголос. «1000 транзакцій за хвилину» без домовленості, що є транзакцією в цьому продукті, читається по-різному в QA і в бізнесу: оформлене замовлення й один HTTP-запит відрізняються на порядок.
- Одиниця виміру не збігається з транзакцією БД. Тут це бізнес-операція, час і кількість якої звітують; атомарність групи SQL-команд до цього обліку відношення не має.
Кейс 3. Тікет «форма гальмує в понеділок вранці»
Прийшла скарга: у понеділок о девʼятій збереження заявки думає до сорока секунд, решту тижня — секунда. Спокуса замовити навантажувальний прогін виникає одразу, але спершу треба відсіяти версії, які генератором не перевіряються.
| Версія | Чим перевіряють | Чим закінчується |
|---|---|---|
| Повільно завжди, просто в понеділок помітили | один користувач у тиху годину, той самий сценарій | якщо повільно й так — навантаження ні до чого: далі рецензія запиту й схеми БД, профілювання |
| Фонове навантаження на тому ж залізі | розклад бекапів, ETL, крон-задач у вікні 09:00 | проблема середовища, а не коду: перф-прогін лише підтвердить симптом |
| Реальний пік користувачів | операційний профіль понеділка з аналітики | ось тут динамічний прогін доречний і відтворить деградацію |
| Деградує обробка помилок, а не час відповіді | частка невдалих запитів, таймаути, довжина черг | окремий режим відмови: середній час виглядає пристойно, а частина клієнтів не обслужена |
Ключове рішення ухвалюється в першому рядку. Якщо відповідь неприйнятна незалежно від навантаження — через криву схему БД, мережеву затримку або фоновий процес, — генератор навантаження нового не покаже, і працюють статичні активності: рецензія запитів, , схеми даних, архітектури мережі. Канон окремо каже, що такі проблеми можуть виявитися під час функціонального й юзабіліті-тестування, а не лише перф-тестування — тобто ще до появи стенда.
Що дивитися і чому:
- «Відкрили тридцять вкладок автотестами» — не заміна прогону. Генерація через UI годиться, коли треба представити невелику кількість користувачів і є де взяти стільки клієнтських машин; вона найрепрезентативніша для наскрізних сценаріїв, але тримається на стабільності UI й дорого коштує в супроводі. Для тисяч користувачів взаємодію захоплюють на рівні протоколу.
- Графік утилізації читають з кінця — з вікна усереднення. Панель, яка показує «не більше 80%», може усереднювати за пʼять хвилин і ховати секундні сплески до стелі. Задокументований випадок саме такий, і без цього питання висновок «запас є» безпідставний.
- Прогін має лишатися відтворюваним. Повтор на незміненій системі має давати статистично ідентичний результат у межах — інакше різницю між «до» і «після» однаково добре пояснює і фікс, і випадковість. На практиці це фіксований стан даних, ізольоване середовище й той самий профіль у кожному прогоні.
- Функціональні перевірки зі сценарію не викидають. Оцінка функціональної придатності під навантаженням може виявити проблеми, специфічні саме для навантаження, тож сценарій без на відповіді втрачає частину знахідок і не доводить, що система під піком віддавала правильні дані.
Продуктивність як характеристика якості
- Розумію, що продуктивність (performance efficiency) — нефункціональна з ISO 25010, а не синонім слова «швидко».
- Назву три підхарактеристики — часова поведінка, , ємність — і скажу, що саме міряє кожна.
- Знаю різницю між ємністю (де в системи наявна стеля щодо вимоги) і масштабованістю (чи можна ту стелю рухати), тому «система не масштабується» для мене симптом, а не діагноз.
Що таке перф-тестування і чим воно не є
- Знаю означення: тип тестування, який визначає продуктивність компонента чи системи; термін збірний, а предмет не обмежений вебом.
- Назву пʼять вимог, які канон ставить до перф-тесту й поясню, чому без відтворюваності (повтор на незміненій системі — статистично ідентичний результат у межах ) прогін вердикту не дає.
- Розумію, що перф-тестування ітеративне й живе на всіх рівнях — від компонентного до приймального, а прогін під навантаженням може принести ще й функціональні дефекти.
Місце в життєвому циклі
- Можу пояснити, чому статичні активності для продуктивності часто важать більше, ніж для функціональної придатності: критичні дефекти вносяться в архітектуру, проєктування й вимоги.
- Назву перелік статичних активностей: рецензія вимог, схем БД і запитів, архітектури системи й мережі, критичних ділянок коду.
- Знаю ідеал для послідовних моделей — критерії продуктивності всередині , визначених на старті проєкту; в Agile це ранні ітерації, а не останні.
- Розумію роль перф-тестів у CI (довести, що зміна не погіршила продуктивність) і що це підмножина ширших прогонів, а не все перф-тестування.
Ризик, цілі й числа
- Назву три ключові цілі перф-тестування — виявити потенційні , знайти можливості для поліпшення, визначити необхідні зміни — і поясню, чому питання «чи потрібне навантажувальне» вирішує оцінка ризику, а не кількість людей у команді й обсяг трафіку.
- Знаю шість наслідків старту без визначених вимірів і метрик, а також чому вимог зазвичай немає: перф-тестування часто без тест-, а стейкхолдери погано їх формулюють.
- Знаю, що SLO мусить називати спосіб виміру й умови чинності, а поріг (threshold) — його машинна форма з вердиктом pass/fail.
- Можу звітувати часткою користувачів і порогом, а не фразою «іноді ще довго чекають»; памʼятаю, що пізно знайдений дефект коштує перепроєктування, а не патча.
Базовий словник навантаження
- Знаю різницю між (що робить один тип користувача) і , він же сценарій (скільки екземплярів і як розподілені в часі).
- Можу пояснити, що — симуляція за операційним профілем і потік інструмента, а не людина й не вкладка браузера.
- Знаю, що тут — бізнес-одиниця роботи, через яку означена , і це не транзакція бази даних.
- Назву чотири способи (UI, натовп тестувальників, API, захоплення протоколу) і поясню на числах, чому кількість користувачів без профілю не є мірою: ті самі 500 користувачів дають 500 або 30 000 запитів за годину.
Типові пастки
- Не приймаю «час відповіді в нормі» за пройдений прогін: існує режим , де деградує саме обробка помилок на високих навантаженнях, а перше питання до графіка утилізації — вікно усереднення, бо пʼятихвилинні середні ховають секундні сплески до стелі.
- Розумію, що «повільно» може взагалі не залежати від навантаження — тоді генератор нічого не додасть, працюють рецензії, профілювання й перевірка мережевого шляху.
Квіз
Перед стартом
- Питань: 15
- Поріг «зараховано»: ≥70% правильних відповідей.
- Результат впливає на прогрес; завалені питання підуть у чергу повторення.
- Квіз впливає на компліт теми: тема стає «пройдено», лише коли прочитано теорію І квіз складено на ≥70%.
Питання
Як канон означує продуктивність (performance efficiency)?
