Тест-кейси й чеклисти: рівень деталізації
Зміст
Техніки попередніх глав відповідають на питання «що перевіряти»: класи еквівалентності і граничні значення дають список перевірок, таблиці рішень — комбінації правил. Але між списком перевірок і робочою (test suite) є ще крок: записати їх так, щоб через пів року кейси можна було виконати й зрозуміти. Саме тут народжуються сюїти-цвинтарі: сотні кейсів, серед яких чимало застарілих і дублів, а падіння будь-якого нічого не каже без археологічних розкопок.
На співбесіді тема звучить як «наскільки детально писати тест-кейси?» і «що таке хороший тест-кейс?». Пастка в тому, що відповідь «якомога детальніше» звучить старанно, а насправді видає нерозуміння: деталізація має ціну, і її рівень — інженерне рішення під контекст. Ця глава — повний виклад теми на сайті; структуру полів кейсу розбирає розділ «Основи тестування», тут мова про якість запису.
Атомарність: одна перевірка — один інваріант
Почнімо з означення. Тест-кейс (test case) — це набір , вхідних даних, дій (where applicable), очікуваних результатів і постумов, виведений з . Дві деталі несучі. Перша: модальність where applicable стоїть саме при діях — кейс без розписаних кроків усе одно кейс, тож кількість кроків його не визначає. Друга: вхід кейса — тестова умова (test condition), «аспект обʼєкта, який можна перевірити», а не вимога напряму.
Звідси практичне правило: атомарний кейс перевіряє рівно одне твердження про поведінку системи — один інваріант. «Порожній email блокує сабміт форми» — інваріант. «Форма реєстрації працює коректно» — не інваріант, а тема на десяток кейсів.
Чому це принципово. Результат виконання кейсу — один статус (зазвичай passed або failed). Якщо кейс перевіряє одну річ, статус читається без відкривання кейсу. Якщо ж кейс на 12 кроків перевіряє шість речей і падає на третьому, про решту три перевірки ви не знаєте нічого: вони не failed — вони не виконані. Один статус на шість інваріантів — втрата інформації, яку потім відновлюють руками.
Атомарність (atomicity) дає й інші дивіденди:
- Вибіркові прогони. збирають з атомарних кейсів під конкретний ; кейс-комбайн або тягне зайве, або лишає діру.
- Чесна статистика. «5 failed з 200» щось означає, лише коли кейси співмірні за обсягом перевірок.
- Пряма трасованість. Атомарний кейс лягає на одну тестову умову з ланцюжка «тестова основа → умова → кейс» (перша глава розділу) — це фундамент покриття вимог.
Найближче джерельне формулювання правила — вимога неповторюваності: жодні два кейси не описують ті самі характеристики , і водночас набір мусить покрити всі її характеристики, не виходячи за межі.
Важливе уточнення: атомарність міряється перевіркою, а не кількістю кроків. Щоб перевірити «архівований проєкт не зʼявляється в пошуку», треба створити проєкт, наповнити його, заархівувати — і лише тоді перевірити: кроків багато, інваріант один, кейс атомарний. Плутати «одна перевірка» з «один крок» — протилежна хвороба: мікроскопічні кейси, де підготовка розмазана по сюїті.
В автоматизації різниця видно неозброєним оком:
// Антипатерн: тест-комбайн — падіння на кроці 3 ховає решту перевірок
test('форма реєстрації працює', async ({ page }) => {
// ...12 кроків, 6 expect-ів упереміш
});
// Атомарно: один інваріант, зрозуміла назва, чистий репорт
test('порожній email блокує сабміт і показує помилку', async ({ page }) => {
await page.goto('/signup');
await page.getByRole('button', { name: 'Зареєструватися' }).click();
await expect(page.getByText('Вкажіть email')).toBeVisible();
});
Виняток, який варто знати: наскрізні бізнес-сценарії (замовлення від кошика до листа-підтвердження) навмисно проходять ланцюжок і перевіряють кілька точок по дорозі — інший жанр з іншою метою, розібраний у главі про сценарії використання й критерії приймання. Це свідомий вибір для критичних флоу, а не дефолтний спосіб писати кейси.
Назва описує перевірку
Наша практика (не канон). Далі — правило найменування, якого ми тримаємося в командах; окремого стандарту під нього немає, тож і блоку джерел у цього підрозділу немає.
Назва кейсу — найчастіше читаний його рядок: у списку сюїти, у звіті прогону, у повідомленні про падіння. Тому вона має відповідати на одне питання: «що саме зламалося, якщо цей кейс упав?» Назва описує інваріант, що перевіряється, — не дію, не навігацію, не назву екрана.
| Погана назва | Хороша назва | Що виправлено |
|---|---|---|
| Перевірка логіну | Логін з валідним паролем відкриває дашборд | «Перевірка» — шум; названо очікувану поведінку |
| Тест поля email | Email без символу @ показує помилку валідації | Названо конкретний інваріант, а не обʼєкт |
| Відкрити кошик і видалити товар | Видалення останнього товару показує порожній кошик | Дія переїхала в кроки; у назві — результат |
| Негативний кейс 3 | Пароль коротший за 8 символів відхиляється | Назву можна прочитати, не відкриваючи кейс |
Фільтр самоперевірки: уявіть звіт прогону, де впало пʼять кейсів, і прочитайте лише назви. Читається як перелік зламаних поведінок — назви робочі. Читається як «Тест 12, Кошик, Перевірка форми» — на кожне падіння доведеться відкривати кейс, тобто назва своєї роботи не виконує. Дії та маршрут («відкрити», «натиснути») живуть у кроках; групування за екранами й фічами — у структурі сюїти, а не в назві.
Рівень деталізації: детальний кейс, high-level, чеклист
Той самий інваріант можна записати трьома способами, і два з них означені в дослівно. Низькорівневий (low-level) кейс — кейс із конкретними значеннями передумов, вхідних даних, очікуваних результатів, постумов і з детальним описом дій. Високорівневий (high-level) — той самий склад, але значення абстрактні. Ключове: різниця не в довжині опису, а в наявності конкретики.
Щабель вище — чеклист. Чеклист-тестування (checklist-based testing) — це техніка, у якій тести проєктують, реалізують і виконують, щоб покрити тестові умови з чеклиста, а сам чеклист будується на досвіді, знанні того, що важливо користувачеві, і розумінні, чому й як ПЗ ламається. Форма пунктів теж описана: їх часто формулюють питанням, і кожен має перевірятися окремо й безпосередньо. Названо й те, чого в чеклисті бути не повинно: автоматично перевірюваного, того, що краще працює як /виходу, і надто загального — саме сюди потрапляє класичне «перевірити, що все працює».
| Формат | Що фіксує | Хто може виконати | Ціна підтримки |
|---|---|---|---|
| Низькорівневий кейс | Конкретні значення й детальний опис дій | Зокрема виконавець без знання продукту | Висока: кожне значення й крок тримають актуальними |
| Високорівневий кейс | Той самий склад, але абстрактно | Той, хто знає продукт | Помірна: переживає косметичні зміни |
| Чеклист | Тестові умови пунктом-питанням | Досвідчений у продукті | Мінімальна, але має власне старіння |
Це не шкала «погано — краще», а компроміс, названий у джерелі прямо: за відсутності детальних кейсів чеклист дає орієнтири й певний ступінь узгодженості, а якщо чеклисти високорівневі, «some variability in the actual testing is likely to occur» — звідси «потенційно більше покриття ціною меншої повторюваності». Це один вибір, а не дві незалежні властивості: хто виконує високорівневу перевірку, той сам добирає конкретні значення, тому результат залежить від виконавця. Не дефект формату, а його ціна.
Що пункт чеклиста може бути принципом, а не кроком, видно з готового прикладу в силабусі: 10 евристик Нільсена для usability. Сам автор називає їх широкими емпіричними правилами, а не конкретними гайдлайнами — пункт задає, що має бути правдою, а не як туди дійти.
Отже, осей вибору чотири: хто виконує, чи потрібна точна повторюваність (аудиторський слід, передача перевірки іншому, розбір інциденту), як швидко змінюються UI й флоу, і чи піде кейс в автоматизацію — там конкретика однаково переїде в код і тестові дані. Зріла сюїта — мікс: низькорівневі кейси для критичного, високорівневі для основної маси, чеклисти для й дослідницьких проходів. Погана ознака — не «у нас є чеклисти», а «у нас один рівень деталізації для всього, бо так заведено». Сам чеклист як техніку розбирає глава про досвідні техніки.
Незалежність кейсів
Незалежність кейсів (test independence) означає просту річ: кейс можна виконати окремо від решти, у будь-якому порядку, і результат не зміниться — кожен кейс сам описує свої передумови, а не успадковує стан від попереднього. Не плутайте з атомарністю — та про кількість перевірок усередині кейсу, ця про звʼязки назовні.
Класичний антипатерн — прихований ланцюжок: кейс 1 створює користувача, кейс 3 редагує його профіль, кейс 7 видаляє. Поки сюїту ганяють цілком і по порядку, все зелене. Проблеми починаються за межами цього сценарію: вибіркова регресія неможлива (кейс 7 окремо не запустиш), падіння кейсу 1 каскадом валить 3 і 7 — у звіті три падіння замість одного реального, а паралельний запуск ламає все мовчки. Порядок виконання став передумовою, якої ніде не записано.
Ціна залежності визнана й на рівні планування: якщо кейс з вищим пріоритетом залежить від кейсу з нижчим, першим мусить виконатися менш пріоритетний. Ланцюжок забирає у вас право пріоритезувати прогін — розклад диктують звʼязки, а не ризик.
Автоматизація ту саму вимогу формулює жорсткіше. Дока Playwright ставить ізоляцію базовим правилом: кожен тест має бути повністю ізольований від інших — із власними localStorage, sessionStorage, даними й кукі; ізоляція покращує відтворюваність, спрощує дебаг і запобігає каскадним падінням. Названо й три конкретні наслідки: падіння не переноситься на сусідів, один тест можна ганяти скільки завгодно, і не треба думати про порядок у паралельному прогоні та . Стратегій ізоляції дві — починати з нуля або прибирати між тестами; друга ненадійна, бо про легко забути, а дещо (відвідані посилання) прибрати взагалі неможливо.
Класика тестових патернів додає діагностику: тести, що взаємодіють між собою, зазвичай спричинені спільною , у якій один залежить від результату іншого, і маркер цієї причини впізнаваний — тест сам по собі зелений, а в сюїті падає, щойно поруч додали чи прибрали інший. Ліки там само: свіжа фікстура на кожен тест.
У ручних сюїтах TMS (test management system) такої огорожі немає — незалежність тримається на дисципліні автора. Правило те саме: усе, що кейсу потрібно, стоїть у його передумовах, і передумови мають бути відтворюваними. «Існує активний користувач із підпискою» — так; «виконано кейс TC-101» — ні. В автоматизації це означає готувати стан найкоротшим шляхом:
// Передумову створюємо самі через API — кейс самодостатній
test('архівування проєкту ховає його зі списку', async ({ page, request }) => {
const res = await request.post('/api/projects', { data: { name: 'tmp-archive' } });
const { id } = await res.json();
await page.goto(`/projects/${id}`);
await page.getByRole('button', { name: 'Архівувати' }).click();
await page.goto('/projects');
await expect(page.getByText('tmp-archive')).toBeHidden();
});
Підтримуваність: дублювання, старіння, ревʼю
Сюїта — продукт із власним життєвим циклом, і зазвичай деградує вона швидше за код: кейси описують інтерфейс, а інтерфейс у більшості продуктів змінюється частіше за внутрішню логіку. Три хвороби вбивають сюїти.
Дублювання. Та сама перевірка живе у трьох сюїтах під різними назвами — одну написали до фічі, другу під регресію, третю після бага. Будь-яка зміна поведінки править три кейси, і рано чи пізно вони розійдуться: один passed, інший failed на тій самій збірці. Джерельний критерій прямий — жодні два кейси не описують ті самі характеристики історії. Корінь зазвичай у письмі «від екрана», а не від тестової умови; ліки — трасування до вимог, де дублікат видно як другий кейс на тій самій умові.
Старіння. Найчіткіше воно описане для чеклистів: пункти поступово втрачають ефективність, бо розробники вчаться не робити тих самих помилок; нові доводиться додавати під нововиявлені дефекти високої серйозності; тому чеклисти регулярно оновлюють за аналізом дефектів, стежачи, щоб перелік не розростався. Сюїта кейсів зношується з тієї ж причини плюс власної: кейс посилається на кнопку, якої немає два релізи. «Failed через застарілий кейс» привчає команду, що failed це нормально, і серед звичного шуму губиться реальна регресія. Робоче правило: такий кейс лагодять із тим самим пріоритетом, що й дефект продукту.
Відсутність ревʼю. Кейси — такий самий артефакт, як код, і чеклист працює тут як техніка статичного тестування: ревʼю за чеклистом (checklist-based reviewing) названо поруч зі сценарним. Власний чеклист ревʼю кейсу збирається з усього, про що йшлося вище: назва описує перевірку; очікуваний результат має критерій; кейс атомарний і незалежний; не дублює наявний. Прямої вимоги «переглядати кейси» силабус не дає — зате тримає їх під керуванням конфігурацією: тестові умови, кейси й скрипти є нарівні з планами й звітами.
Окремий важіль — виносити спільне. Повторюваний флоу «створити користувача з підпискою» має жити в одному місці (спільна передумова чи параметризований кейс у TMS, фікстура або хелпер у коді), а не бути скопійованим у сорок кейсів. Але без фанатизму: дока Playwright прямо дозволяє трохи дублювання в простих тестах, якщо так вони зрозуміліші й легші в підтримці.
Антипатерни
Наша практика (не канон). Перелік нижче зібраний із того, що ми найчастіше бачили в живих сюїтах; окремого канонічного каталогу антипатернів тест-кейса джерела не дають, тож блоку джерел у цього підрозділу немає.
- Кейс-комбайн. 30 кроків, 10 перевірок. Падає на сьомому — про решту нічого не відомо, звіт бреше.
- «Перевірити, що все працює коректно». Очікуваний результат без критерію — не : два виконавці поставлять різні статуси на тому самому екрані.
- Назва про дорогу, а не про перевірку. «Відкрити налаштування профілю» — це крок. Що має бути правдою, коли ви туди дійшли?
- Ланцюжок залежних кейсів. Порядок виконання — прихована передумова; вибіркові прогони й паралельність померли.
- Крихкі дані в кроках. Дата «31.12.2026», користувач
test123, якого хтось видалив: кейс протухає без жодної зміни продукту. Дані описують властивістю («дата в майбутньому», «користувач без замовлень»), а конкретику тримають у тестових даних. - Клони замість параметризації. Дванадцять кейсів, що різняться одним значенням поля, — це один кейс із таблицею значень; інакше кожна зміна флоу множиться на дванадцять.
- Сирітський кейс. Не привʼязаний до жодної вимоги чи тестової умови: незрозуміло, навіщо він і чи можна його видалити. Сирітські кейси зазвичай і складають баласт старих сюїт.
Типові помилки
- Виглядає як «що детальніше розписано, то професійніша робота», а насправді кожне конкретне значення й крок доведеться тримати актуальним: надлишкова деталізація додає не якості, а боргу підтримки.
- Виглядає як «чеклист — незрілий артефакт, справжні QA пишуть повні кейси», а насправді чеклист-тестування описане як повноцінна техніка з власною формою пунктів і власним компромісом. Незрілість — не формат, а невідповідність формату контексту.
- Виглядає як «атомарність — це один крок на кейс», а насправді вона міряється інваріантами: підготовчих дій може бути десять, перевірка одна, і кейс атомарний.
- Виглядає як «залежні кейси економлять час на сетапі», а насправді економія обмінюється на каскадні падіння й на втрату права пріоритезувати: менш пріоритетний кейс тепер мусить іти першим.
- Виглядає як «сюїта написана — робота зроблена», а насправді перевірки зношуються: пункти втрачають ефективність, кроки посилаються на зниклі елементи, і без перегляду сюїта за рік стає шумом, якому ніхто не вірить.
Підсумок
- Один кейс — один інваріант. Атомарність міряється перевіркою, а не кроками: дії в означенні кейса стоять з модальністю «де застосовно».
- Назва кейсу відповідає на питання «що зламалося, якщо він упав»; дії та навігація живуть у кроках.
- Різниця high-level і low-level — у конкретності значень, а не в довжині опису; чеклист платить повторюваністю за й свободу виконавця.
- Незалежний кейс сам описує відтворювані передумови; залежність дає каскадні падіння й змушує виконувати менш пріоритетне першим.
- Сюїта — продукт: дублікати ловляться неповторюваністю й , перевірки зношуються й потребують регулярного перегляду, а кейси живуть під керуванням конфігурацією.
Можливі питання
- «Наскільки детально треба писати тест-кейси?» Слабка відповідь — «якомога детальніше». Сильна називає осі вибору: хто виконує, чи потрібна повторюваність, як швидко змінюється продукт, чи піде кейс в автоматизацію. Перевіряють, чи бачите ви деталізацію як рішення з ціною.
- «Чеклист чи тест-кейс — що краще?» Очікують «залежить» із критеріями і розуміння компромісу «більше покриття — менше повторюваності». Бонус — що зріла сюїта поєднує обидва формати.
- «Що таке хороший тест-кейс?» Дивляться, чи назвете ознаки якості (атомарність, назва за перевіркою, незалежність, очікуваний результат із критерієм), а не перелік полів.
- «У вас 800 кейсів, регресія займає тиждень. Ваші дії?» Перевіряють мислення про сюїту як продукт: ревізія застарілого й сирітського, злиття дублікатів через трасування, параметризація клонів, пріоритезація за ризиком.
- «Чому кейси не повинні залежати один від одного?» Очікують конкретні наслідки: неможливість вибіркових прогонів, каскадні падіння, порядок як прихована передумова — а не абстрактне «так правильно».
- «Кейс упав, бо застарів. Що робите?» Сильна відповідь — про гігієну: полагодити або видалити одразу, бо звичний failed знецінює сигнал усієї сюїти.
Джерела
Атомарність: одна перевірка — один інваріант
- ISTQB Glossary — означення тест-кейса (передумови, входи, дії
where applicable, очікувані результати, постумови, виведені з тестових умов) і тестової умови. - ISTQB Certified Tester Foundation Level Syllabus v4.0 (копія astqb.org) — §4.5.3: неповторюваність «no two test cases should describe the same characteristics of the user story» і покриття всіх характеристик історії без виходу за неї.
Рівень деталізації: детальний кейс, high-level, чеклист
- ISTQB Glossary — дослівні означення обох сторін пари:
high-level test caseчерез абстрактні передумови, дані, результати й постумови,low-level test case— через конкретні значення й детальний опис дій. - ISTQB Certified Tester Foundation Level Syllabus v4.0 (копія astqb.org) — §4.4.3: техніка цілком — покриття тестових умов із чеклиста і три джерела наповнення, форма пункту, три заборони на вміст, компроміс «potentially greater coverage but less repeatability» і 10 евристик Нільсена як готовий приклад чеклиста.
- Jakob Nielsen — 10 Usability Heuristics for User Interface Design — автор називає евристики широкими емпіричними правилами, а не конкретними гайдлайнами.
- Playwright — Best Practices — вимога повної ізоляції кожного тесту (власні localStorage, sessionStorage, дані, кукі) і три вигоди: відтворюваність, простіший дебаг, відсутність каскадних падінь.
- Playwright — Test Isolation (browser contexts) — три наслідки ізоляції і дві стратегії: починати з нуля або прибирати між тестами, причому дещо прибрати неможливо.
- xUnit Test Patterns — Erratic Test — причина взаємодії тестів (спільна фікстура) і маркер: тест зелений соло й червоний у сюїті після додавання чи вилучення сусіда.
- xUnit Test Patterns — Fresh Fixture — свіжа фікстура на кожен тест запобігає нестабільним тестам.
- ISTQB Certified Tester Foundation Level Syllabus v4.0 (копія astqb.org) — ціна залежності для розкладу: якщо пріоритетніший кейс залежить від менш пріоритетного, першим мусить виконатися менш пріоритетний.
Підтримуваність: дублювання, старіння, ревʼю
- ISTQB Certified Tester Foundation Level Syllabus v4.0 (копія astqb.org) — §4.4.3: механізм старіння чеклистів, вимога регулярно оновлювати їх за аналізом дефектів і застереження не давати переліку розростатися; §4.5.3: неповторюваність кейсів; окремими розділами того самого силабуса — ревʼю за чеклистом як техніка і керування конфігурацією, що тримає тестові умови, кейси й скрипти конфігураційними одиницями.
- Playwright — Best Practices — дозвіл на невелике дублювання в простих тестах, якщо воно робить їх зрозумілішими й легшими в підтримці.
Що таке хороший тест-кейс?
Хороший кейс після падіння сам пояснює, що саме зламалося, і не потребує сусідів, щоб виконатися. Слабка відповідь тут — перелік полів («передумови, кроки, очікуваний результат»): це склад кейса, а не його якість. Сильна називає ознаки: одна перевірка на кейс, назва, з якої видно перевірений інваріант, незалежність від інших кейсів і від порядку прогону, очікуваний результат із критерієм, за яким два різні виконавці поставлять однаковий статус, і привʼязка до (test condition), щоб було зрозуміло, навіщо кейс існує. Механізм за цим списком один: кейс дає на виході один сигнал — статус, — і всі ознаки якості обслуговують саме його, роблячи результат читабельним без відкривання кейса. Практичний наслідок: якщо після падіння кейсу доводиться відкривати його й реконструювати задум, кейс поганий, скільки б полів у ньому не було заповнено.
Що таке атомарність кейсу і чим її міряти?
Атомарний кейс (atomicity) закриває рівно одне твердження про поведінку продукту — один інваріант. «Порожній email не дає відправити форму» — це інваріант; «форма реєстрації працює» — тема на десяток кейсів. Міряється атомарність саме перевірками, а не обсягом: у кейсі може бути десять підготовчих дій і одна перевірка — він атомарний. Механізм тримається на тому, що результат виконання — один статус: якщо статус описує одну поведінку, його видно у звіті без відкривання кейса. Практичний наслідок для роботи: коли в кейсі два очікувані результати про різні речі, це вже два кейси, і розділити їх дешевше зараз, ніж після першого падіння.
Кейс на дванадцять кроків перевіряє шість речей і впав на третьому кроці. Що ви знаєте про решту перевірок?
Нічого — і це головна відповідь. Три перевірки, що лишилися за точкою падіння, не мають статусу failed: вони просто не виконані, а звіт цього не показує, бо на весь кейс припадає один статус. Так втрачається інформація, яку потім відновлюють руками: хтось , перечитує кроки й доганяє пропущене окремим прогоном. Це і є ціна кейса-комбайна — не «незручно читати», а конкретна діра у знанні про збірку. Другий, менш очевидний наслідок: доки такий кейс у , статистика бреше, бо «пʼять failed із двохсот» щось означає лише тоді, коли кейси співмірні за обсягом перевірок усередині.
Чи правда, що атомарний кейс — це кейс з одного кроку?
Ні, це найпоширеніша підміна в темі. Кроки в означенні кейса взагалі стоять із модальністю where applicable — тобто кейс без розписаних дій лишається кейсом, а отже їх кількість його природи не визначає. Щоб перевірити «заархівований проєкт зникає з пошуку», доведеться створити проєкт, наповнити його даними, заархівувати — і лише потім зробити єдину перевірку: дій багато, інваріант один, кейс атомарний. Хвороба з протилежного боку теж реальна: якщо дробити до одного кроку, підготовка розповзається по кількох кейсах, і жоден із них уже не самодостатній. Практичний фільтр простий — рахуйте очікувані результати, а не рядки в кроках.
Чи є винятки з правила «один кейс — один інваріант»?
Так, і назвати його варто самому, бо це показує розуміння меж правила. Наскрізні бізнес-сценарії — шлях від кошика до листа з підтвердженням замовлення — навмисно проходять увесь ланцюжок і перевіряють кілька точок по дорозі. Це інший жанр з іншою метою: такий сценарій відповідає на питання «чи працює бізнес-процес цілком», а не «чи справний окремий інваріант». Важлива умова: це свідомий вибір для критичних флоу, а не спосіб писати кейси за замовчуванням. Практично це означає, що наскрізні сценарії пишуть під критичні флоу, а окремі інваріанти на тих самих точках усе одно лишаються атомарними кейсами: коли наскрізний сценарій падає, саме вони й показують, де розірвався ланцюг.
Як має бути названа перевірка, щоб назва працювала?
Назва відповідає на питання «що зламалося, якщо цей кейс упав», тому в ній стоїть інваріант, а не маршрут. «Відкрити кошик і видалити товар» — це переказ дій, які й так лежать у кроках; робоча версія звучить як «видалення останнього товару лишає кошик порожнім». Механізм у тому, що назва — найчастіше читаний рядок кейса: її бачать у списку сюїти, у звіті прогону й у повідомленні про падіння, тоді як тіло кейса відкривають рідко. Є зручний самофільтр: уявіть звіт, де впало пʼять кейсів, і прочитайте самі назви. Якщо вийшов перелік зламаних поведінок — назви робочі; якщо вийшло «Тест 12, Кошик, Перевірка форми» — почнеться з відкривання кожного кейса. Групування за екранами й фічами при цьому живе у структурі сюїти, а не в тексті назви.
Чим високорівневий кейс відрізняється від низькорівневого?
Різниця рівно одна — конкретність значень, а не довжина тексту. Низькорівневий (low-level) кейс містить конкретні , вхідні дані, очікувані результати й постумови плюс детально розписані дії. Високорівневий (high-level) має той самий склад, але значення в ньому абстрактні: «валідний email» замість olia@mail.com, «пароль, коротший за мінімальну довжину» замість Qw1. Довгий кейс без жодного конкретного значення лишається високорівневим, а короткий рядок із точним числом — уже низькорівневий. Наслідок для практики: конкретика — це не «докладніше», а зобовʼязання підтримувати кожне значення актуальним, і саме за неї платять високою ціною супроводу.
Чеклист чи тест-кейс — що краще?
Правильна відповідь починається з «залежить», але одразу переходить до критеріїв, інакше звучить як ухиляння. Чеклист виграє там, де перевіряє людина, яка знає продукт, де UI й флоу переписують щомісяця і де важлива швидкість . Детальний кейс виграє там, де перевірку виконує хтось без знання продукту, де потрібна точна повторюваність — аудит, передача перевірки іншій людині, майбутній розбір інциденту, — і де сценарій критичний для бізнесу. Механізм компромісу теж варто назвати: чеклист лишає виконавцеві свободу в доборі конкретних значень, тому дає потенційно більше покриття ціною меншої повторюваності. Бонусом на співбесіді йде теза, що зріла сюїта — це мікс: детальні кейси на критичні флоу, високорівневі на основну масу перевірок, чеклисти на і дослідницькі проходи.
Що таке чеклист-тестування і звідки беруться пункти чеклиста?
Це техніка, де проєктування, реалізація й виконання тестів підпорядковані одному — покрити тестові умови, перелічені в чеклисті, — тобто чеклист постачає перелік тестових умов, а не є скороченим тест-кейсом. Наповнюють його з трьох джерел: власного досвіду, розуміння того, що для користувача важливо, і знання, чому й як саме це ПЗ зазвичай ламається. Форму пунктів теж описано: їх часто ставлять питанням, і кожен має перевірятися окремо й безпосередньо. Пункт при цьому може бути принципом, а не інструкцією — канонічний приклад чеклиста в силабусі це десять евристик Нільсена, які сам автор називає широкими емпіричними правилами, а не конкретними гайдлайнами. Практично це означає, що пункт фіксує, що має бути правдою, а шлях до перевірки добирає виконавець.
Чого в чеклисті бути не повинно?
Названо три категорії. Перша — те, що перевіряється автоматично: тримати такий пункт у ручному списку означає щоразу витрачати людину на роботу машини. Друга — те, що за природою є чи виходу: місце такого твердження у фази, а не в списку перевірок. Третя — надто загальні формулювання, і саме сюди потрапляє класичне «перевірити, що все працює»: пункт без критерію не є , тому два виконавці поставлять на тому самому екрані різні статуси. Наслідок для ревʼю чужого чеклиста: спершу шукайте пункти без критерію — вони псують сигнал сильніше за пропущені перевірки, бо створюють ілюзію покриття.
Наскільки детально треба писати тест-кейси?
Відповідь «якомога детальніше» звучить старанно й одразу видає нерозуміння: деталізація має ціну, і кожне конкретне значення в кейсі — це зобовʼязання тримати його актуальним. Сильна відповідь називає осі вибору. Перша — хто виконує: людина без знання продукту потребує конкретики, досвідчений колега впорається з абстракцією. Друга — чи потрібна точна повторюваність, тобто чи буде потім аудиторський слід, передача перевірки або розбір інциденту. Третя — темп змін UI й флоу: там, де екран переписують щомісяця, докладний опис кроків старіє швидше, ніж встигає окупитися. Четверта — чи піде перевірка в автоматизацію, бо там конкретні значення однаково переїдуть у код і , а докладний ручний опис лишиться мертвим дублікатом. Погана ознака зрілості — не наявність чеклистів, а один рівень деталізації на всю сюїту «бо так заведено».
Що таке незалежність кейсів і чим вона відрізняється від атомарності?
Незалежність (test independence) означає, що кейс можна виконати сам по собі, у будь-якому порядку, і результат буде той самий, бо всі потрібні умови кейс описує власними передумовами, а не успадковує від попереднього. Плутають ці дві властивості постійно, хоча дивляться вони в різні боки: атомарність — про те, скільки перевірок усередині кейса, незалежність — про звʼязки кейса назовні. Кейс може бути ідеально атомарним і при цьому працювати лише після сусіда, який створив йому користувача. Практичний наслідок: перевіряти їх треба окремими питаннями — «скільки тут очікуваних результатів?» і «що станеться, якщо запустити це першим у порожньому середовищі?».
Чому кейси не повинні залежати один від одного?
Тут очікують конкретні наслідки, а не «так правильно». Уявіть ланцюжок: перший кейс створює користувача, третій редагує його профіль, сьомий видаляє. Доки прогін іде повністю й у звичному порядку, сюїта зелена, тому проблему довго ніхто не бачить. Далі ламається все відразу: вибіркову зібрати неможливо, бо сьомий кейс окремо не запуститься; падіння першого кейса каскадом валить третій і сьомий, і у звіті три падіння замість одного справжнього; паралельний прогін ламає сюїту мовчки, без зрозумілої причини. Корінь у тому, що порядок виконання став передумовою, якої ніде не записано — а незаписана передумова рано чи пізно буде порушена.
Як залежність кейсів псує пріоритезацію прогону?
Механізм прямий: якщо кейс із вищим пріоритетом спирається на кейс із нижчим, то менш пріоритетний доведеться виконати першим. Тобто розклад прогону починають диктувати технічні звʼязки, а не , і в скороченому прогоні під реліз ви або тягнете за собою неважливі кейси, або втрачаєте важливий. Це той аргумент, який добре працює в розмові з менеджментом: залежність — не питання смаку, вона забирає у команди право вирішувати, що перевірити першим, коли часу лишилося на третину сюїти. Тому «залежні кейси економлять час на сетапі» — обмін короткої економії на каскадні падіння й на втрачений контроль над пріоритетом.
Автотест зелений, коли ганяєш його окремо, і червоний у складі сюїти. З чого почнете?
Це впізнаваний маркер взаємодії тестів, і класика тестових патернів називає його причину: спільна , у якій один тест залежить від результату іншого. Другий діагностичний сигнал того самого класу — коли тест починає падати після того, як поруч додали або прибрали сусіда: сам він не змінювався, змінилося оточення. Тому перше, куди варто дивитися, — не в і не в , а в стан, який тести ділять між собою: користувач, запис у базі, залишений глобальний стан. Ліки описані там само й дуже прості — свіжа фікстура на кожен тест, тобто кожен готує собі дані сам. Практичний хід для перевірки гіпотези: запустити підозрюваного разом із тим тестом, після якого він падає, і подивитися, чи відтворюється пара.
Playwright вимагає повної ізоляції тестів. Що це означає технічно і які тут стратегії?
Технічно це означає, що тест живе у власному оточенні: свої localStorage, sessionStorage, дані й cookie, нічого спільного з сусідами. Дає це три конкретні речі: чуже падіння не перекидається на сусідні тести, той самий тест можна повторювати скільки завгодно разів поспіль, і не треба тримати в голові порядок при паралельному прогоні та . Стратегій ізоляції дві — починати з чистого стану або прибирати за собою між тестами, — і вони нерівноцінні: ненадійне, бо про нього легко забути, а дещо взагалі не прибирається, наприклад історія відвіданих посилань. Тому за замовчуванням обирають перший шлях: свіжий контекст на тест і власні дані, створені найкоротшим шляхом. Ручні сюїти в TMS такої огорожі не мають взагалі — там незалежність тримається виключно на дисципліні автора кейса.
Як записати передумови, щоб кейс лишався незалежним?
Правило одне: передумова описує стан системи й мусить бути відтворюваною, а не посилатися на чужу роботу. «Існує активний користувач із оплаченою підпискою» — робоча передумова, її можна створити будь-коли й будь-яким способом. «Виконано кейс TC-101» — не передумова, а прихована залежність, бо вона мовчки вимагає і наявності того кейса, і його успішного проходження, і правильного порядку. Крихкі значення в передумовах шкодять так само: користувач test123, якого хтось видалить, або жорстко вбита дата зроблять кейс червоним без жодної зміни продукту, тому дані краще описувати властивістю — «дата в майбутньому», «користувач без замовлень». В автоматизації та сама вимога виконується технічно: потрібний стан готують найкоротшим шляхом, зазвичай запитом до API перед сценарієм, а не проходженням UI попереднього тесту.
Чому сюїта старіє швидше за код і що робити з кейсом, який упав через застарілість?
Кейси описують інтерфейс, а інтерфейс у більшості продуктів переписують частіше за внутрішню логіку — звідси й швидший знос. Для чеклистів механізм старіння описаний ще точніше: пункти поступово перестають ловити дефекти, бо команда розробки припиняє наступати на ті самі граблі, тому списки регулярно переглядають за аналізом дефектів, додаючи пункти під нововиявлені серйозні баги й не даючи переліку розростатися. З конкретним застарілим кейсом відповідь має бути про гігієну сигналу: полагодити або видалити одразу, з тим самим пріоритетом, що й дефект продукту. Причина не в акуратності, а в тому, що звичний failed знецінює всю сюїту: коли команда звикла, що частина падінь «нормальна», реальна регресія губиться серед шуму й доїжджає до продакшену.
У вас 800 кейсів і регресія займає тиждень. Ваші дії?
Тут перевіряють, чи бачите ви сюїту як продукт, який теж треба супроводжувати. Порядок дій приблизно такий. Спершу ревізія: сирітські кейси, не привʼязані до жодної вимоги чи тестової умови, і кейси на функціонал, якого вже немає, — кандидати на видалення, і саме вони зазвичай складають основну масу баласту. Далі дублікати: їх видно через до вимог, де на одну умову висить кілька кейсів, і за критерієм неповторюваності — два кейси не мають описувати ті самі характеристики. Корінь дублювання варто назвати окремо: воно виникає, коли кейси пишуть «від екрана», а не від тестової умови, тому та сама перевірка легко потрапляє в сюїту тричі — під час розробки фічі, під час збирання регресії й після бага. Потім клони, що відрізняються одним значенням поля: дванадцять таких кейсів згортаються в один параметризований із таблицею даних, інакше будь-яка правка флоу повторюється дванадцять разів. І лише після цього пріоритезація за ризиком і винесення спільної підготовки в одне місце. Що не є відповіддю: «автоматизуємо все» — автоматизація дублікатів і сирітських кейсів дає ті самі проблеми, тільки швидше.
Чи є місце дублюванню в тестах, чи все спільне треба виносити?
Дефолт — виносити: повторюваний флоу на кшталт підготовки користувача з підпискою описують один раз в одному місці — спільною передумовою чи параметризованим кейсом у TMS, фікстурою чи хелпером у коді. Інакше зміна одного кроку означає правку сорока кейсів, і хтось із них неодмінно лишиться незміненим. Але фанатизм тут теж шкідливий: дока Playwright прямо трохи повторів у простих тестах, коли від цього вони стають зрозумілішими й простішими в супроводі. Критерій вибору практичний: виносьте те, що змінюється разом і часто, лишайте на місці те, що робить тест читабельним і майже не змінюється. Надмірна абстракція в тестах має власну ціну — щоб зрозуміти впалий тест, доводиться розкручувати кілька рівнів хелперів, і це та сама втрата читабельності, з якою ми боремося в назвах кейсів.
Три кейси про рівень деталізації з різних боків: розбір кейса-комбайна на ревʼю, той самий інваріант у трьох форматах запису з відповіддю «коли який», і розплутування ланцюжка залежних кейсів разом із його автоматизованим відповідником.
Кейс 1. Ревʼю: розібрати комбайн на атомарні кейси
На ревʼю приносять кейс із TMS: «TC-214. Перевірка особистого кабінету», 14 кроків, очікуваний результат — «усе працює коректно». Перше, що варто зробити, — не читати кроки підряд, а виписати з них усі очікувані результати. Виходить ось таке.
| # | Що перевіряє крок | Це інваріант? | Куди має поїхати |
|---|---|---|---|
| 3 | після входу відкривається кабінет | так | окремий кейс про вхід |
| 5 | у шапці показане ім'я користувача | так | окремий кейс про профіль |
| 7 | зміна імені зберігається після перезавантаження | так | окремий кейс про редагування |
| 9 | завантаження аватара понад 5 МБ відхиляється | так | окремий кейс, негативний |
| 11 | у списку замовлень видно останнє замовлення | так | окремий кейс про історію |
| 14 | «усе відображається коректно» | ні, критерію немає | переписати або викинути |
Пʼять інваріантів в одному кейсі — це один статус на пʼять перевірок. Якщо він упаде на кроці 7, про перевірки з кроків 9 і 11 не буде відомо взагалі нічого: вони не failed, вони просто не дійшли до виконання, і у звіті це виглядає як одна проблема замість невідомої їх кількості.
Після розбору набір виглядає так:
| Кейс | Передумова | Що перевіряє |
|---|---|---|
| Вхід із валідними даними відкриває кабінет | існує активний користувач | редирект після входу |
| Ім'я користувача показане в шапці кабінету | існує активний користувач з іменем | відображення профілю |
| Змінене ім'я зберігається після перезавантаження | існує активний користувач | збереження на бекенді, а не в стані сторінки |
| Аватар більший за 5 МБ відхиляється з повідомленням | існує активний користувач | межа розміру файлу |
| Останнє замовлення показане в історії замовлень | існує користувач із двома замовленнями | відображення останнього замовлення |
Що дивитися і чому:
- Кроки 1–2, 4, 6 у таблиці не зʼявилися, і це нормально. Це навігація й підготовка, а не перевірки: вони роз'їдуться по кейсах як й кроки. Атомарність рахують очікуваними результатами, тому кейс із десятьма підготовчими діями й одним лишається атомарним.
- Крок 14 — не перевірка, а її імітація. «Усе відображається коректно» не має критерію, тож два виконавці поставлять на тому самому екрані різні статуси. Такий рядок або перетворюють на конкретне твердження («у порожній історії показано текст про відсутність замовлень»), або прибирають.
- Передумови в новому наборі описані станом, а не історією прогону. «Існує користувач із двома замовленнями» відтворює будь-хто будь-коли; «виконано TC-214» — це прихована залежність, яка мовчки вимагає і порядку, і чужого успіху.
- Назви читаються у звіті без відкривання. Впало «Аватар більший за 5 МБ відхиляється з повідомленням» — місце поломки зрозуміле з рядка списку, і не починається з археології.
Кейс 2. Один інваріант, три формати запису
Перевіряємо просту річ: прострочений промокод не застосовується в кошику. Ось той самий інваріант у трьох форматах.
Низькорівневий кейс. Передумова: у каталозі є товар за 1200 грн, у системі створений промокод SPRING24 зі знижкою 15% і датою завершення в минулому. Кроки: додати товар у кошик, відкрити кошик, ввести SPRING24 у поле промокоду, натиснути «Застосувати». Очікуваний результат: під полем зʼявляється повідомлення «Термін дії промокоду минув», сума до сплати лишається 1200 грн, поле знижки не зʼявляється.
Високорівневий кейс. Передумова: кошик із товаром, промокод із минулою датою завершення. Дія: застосувати цей промокод. Очікуваний результат: система відхиляє промокод із повідомленням про строк, сума кошика не змінюється.
Пункт чеклиста. «Чи відхиляє кошик промокод, термін дії якого вже минув?»
| Формат | Що з нього видно | Хто виконає без питань | Що зламає його першим |
|---|---|---|---|
| Низькорівневий | точні дані, точний текст помилки, точна сума | людина, яка бачить продукт уперше | зміна тексту повідомлення, ціни товару чи назви промокоду |
| Високорівневий | інваріант і критерій, без значень | той, хто знає продукт і сам добере промокод | зміна самої логіки знижок |
| Пункт чеклиста | лише предмет перевірки | досвідчений тестувальник продукту | зникнення промокодів як фічі |
Що дивитися і чому:
- Різниця форматів — у конкретності значень, а не в кількості тексту. Високорівневий кейс тут не коротший «на око», він просто не називає ні
SPRING24, ні 1200 грн. Довгий опис без єдиного конкретного значення лишається високорівневим. - Ціна низькорівневого запису видно неозброєним оком у третій колонці таблиці. Три рядки конкретики — три причини впасти без жодної зміни поведінки продукту. Це не аргумент проти формату, а нагадування, що кожне значення в кейсі береться на підтримку.
- Пункт чеклиста сформульований питанням — це його штатна форма. Він задає, що має бути правдою, і лишає виконавцеві свободу в тому, як туди дійти. Звідси й компроміс: потенційно більше, повторюваність менша, бо конкретні значення щоразу добирає той, хто перевіряє.
- Вибір робиться під контекст, а не «за зрілістю». Промокоди в новому кошику, який переписують щотижня, дешевше вести чеклистом; той самий інваріант у платіжному флоу під аудит пишуть низькорівневим кейсом, щоб два прогони були зіставні.
- Якщо перевірка йде в автоматизацію, конкретика все одно опиниться в коді. Тримати паралельно детальний ручний опис — це два джерела істини, які розійдуться після першої ж зміни.
Кейс 3. Ланцюжок, який тримається на порядку
У три кейси про користувачів:
- TC-101 — створити користувача
qa_tempз роллю «менеджер»; - TC-103 — змінити роль користувача
qa_tempна «адмін»; - TC-107 — видалити користувача
qa_temp.
Повний прогін по порядку зелений, тому проблему не бачать місяцями. Що ламається насправді:
| Ситуація | Що станеться | Чому |
|---|---|---|
| запустити TC-107 окремо | падіння: користувача немає | передумову створює інший кейс |
| впав TC-101 | падають ще й TC-103 і TC-107 | у звіті три дефекти замість одного |
| паралельний прогін | плаваючі падіння без системи | кейси б'ються за той самий обʼєкт |
| TC-107 має вищий пріоритет | його все одно виконують останнім | пріоритет диктують звʼязки, а не ризик |
Розплутування коштує одного рядка на кейс — кожен сам створює те, що йому потрібно:
| Кейс | Передумова після виправлення |
|---|---|
| TC-101 | у системі немає користувача з цією поштою |
| TC-103 | існує користувач з роллю «менеджер» |
| TC-107 | існує користувач без активних завдань |
В автоматизації цю саму вимогу закривають : стан готують найкоротшим шляхом через API, а не проходженням UI попереднього тесту.
import { test as base, expect } from '@playwright/test';
type Fixtures = { manager: { id: string; email: string } };
// свіжа фікстура: власний користувач на кожен тест, прибирання одразу після нього
const test = base.extend<Fixtures>({
manager: async ({ request }, use) => {
const email = `qa+${Date.now()}@example.com`;
const res = await request.post('/api/users', {
data: { email, role: 'manager' },
});
const user = await res.json();
await use(user);
await request.delete(`/api/users/${user.id}`);
},
});
test('зміна ролі на адміністратора відкриває розділ налаштувань', async ({ page, manager }) => {
await page.goto(`/admin/users/${manager.id}`);
await page.getByLabel('Роль').selectOption('admin');
await page.getByRole('button', { name: 'Зберегти' }).click();
await expect(page.getByRole('link', { name: 'Налаштування' })).toBeVisible();
});
Що дивитися і чому:
- Унікальна пошта в фікстурі — не косметика, а умова паралельного прогону. Спільний
qa_tempперетворює будь-який паралелізм на гонку: два одночасно правлять того самого користувача, і падає той, хто спізнився. - після
useне робить тест залежним від чистого середовища. Стратегій ізоляції дві — починати з нуля або прибирати за собою, — і перша надійніша: тому користувач створюється свій, а видалення тут лише економить місце в базі стенда. - Симптом «зелений соло, червоний у сюїті» вказує на спільну фікстуру. Той самий діагноз ставлять, коли тест починає падати після появи або зникнення сусіда: сам він не змінювався, змінилося оточення. Перевіряється гіпотеза за хвилину — запустити підозрюваного в парі з тим тестом, після якого він червоніє.
- У ручній сюїті технічної огорожі немає взагалі. TMS не завадить написати «виконано TC-101» у передумовах, тож незалежність тут тримається на дисципліні автора кейса й на ревʼю — і саме тому «передумова відтворювана» варто зробити пунктом чеклиста для такого ревʼю.
Атомарність і одиниця перевірки
- Знаю різницю «один інваріант» vs «один крок»: атомарність рахують очікуваними результатами, десять підготовчих дій її не порушують, а модальність
where applicableв означенні кейса стоїть саме при діях; сам кейс при цьому виводиться не з вимоги напряму, а з (test condition) — аспекту обʼєкта, який можна перевірити. - Можу пояснити ціну кейса-комбайна: падіння на третьому кроці лишає решту перевірок без статусу — вони не failed, вони не виконані, і звіт про це мовчить.
- Знаю три дивіденди атомарності: вибіркова під конкретний , чесна статистика (бо «5 failed із 200» щось означає лише при співмірних кейсах) і пряма трасованість — один кейс на одну тестову умову.
Назва кейсу
- Можу сформулювати критерій назви одним питанням: «що зламалося, якщо цей кейс упав» — тобто в назві стоїть інваріант, а не дія, маршрут чи ім'я екрана.
- Знаю фільтр самоперевірки: прочитати у звіті самі назви впалих кейсів; вийшов перелік зламаних поведінок — назви робочі, вийшло «Тест 12, Кошик» — доведеться відкривати кожен.
Рівень деталізації
- Знаю різницю high-level vs low-level кейса: вона в конкретності значень (абстрактні проти точних плюс детальний опис дій), а не в довжині тексту.
- Можу пояснити, що таке чеклист-тестування: тести проєктують і виконують під тестові умови, перелічені в чеклисті, а сам список збирається з досвіду, знання важливого для користувача й розуміння, як саме це ПЗ ламається.
- Пам'ятаю форму пункту чеклиста — часто питання, перевіряється окремо й безпосередньо — і три заборони на вміст: автоматично перевірюване, /виходу, надто загальне на кшталт «перевірити, що все працює».
- Можу назвати компроміс чеклиста однією фразою: потенційно більше ціною меншої повторюваності, бо конкретні значення добирає виконавець — це ціна формату, а не його дефект.
- Знаю чотири осі вибору рівня: хто виконує, чи потрібна точна повторюваність (аудит, передача перевірки, розбір інциденту), як швидко змінюються UI й флоу, чи піде кейс в автоматизацію.
Незалежність кейсів
- Знаю різницю атомарність vs незалежність: перша про кількість перевірок усередині кейса, друга про його зв'язки назовні.
- Можу назвати три наслідки ланцюжка залежних кейсів: вибіркова регресія неможлива, каскадні падіння роздувають звіт, паралельний прогін ламається мовчки — бо порядок став незаписаною .
- Пам'ятаю ціну залежності для розкладу: якщо пріоритетніший кейс спирається на менш пріоритетний, першим мусить виконатися менш пріоритетний.
- Можу відрізнити відтворювану передумову від прихованої залежності: «існує активний користувач з оплаченою підпискою» — робоча передумова, «виконано кейс TC-101» — прихована залежність; так само крихкі значення (жорстка дата, користувач
test123) роблять кейс червоним без жодної зміни продукту.
Автотести: ізоляція і підтримка
- Знаю вимогу Playwright: повна ізоляція кожного тесту — власні localStorage, sessionStorage, дані й cookie — заради відтворюваності, простішого дебагу й відсутності каскадних падінь, а з нею й свобода в порядку при паралельному прогоні та ; стратегій дві, і починати з нуля надійніше за між тестами, бо про прибирання забувають, а дещо (відвідані посилання) прибрати неможливо.
- Впізнаю маркер спільної : тест зелений соло й червоний у — або починає падати, щойно поруч додали чи прибрали сусіда; ліки — свіжа фікстура на кожен тест.
Підтримуваність сюїти
- Можу пояснити, чому сюїта деградує швидше за код (кейси описують інтерфейс, а він змінюється частіше за логіку) і як ловити дублікат: критерій неповторюваності плюс , у якому дублікат видно там, де на одну тестову умову висить другий кейс.
- Розумію механізм старіння чеклистів — пункт слабшає, бо в команді перестають повторювати помилку, під яку його писали, — тому списки оновлюють за аналізом дефектів, не даючи їм розростатися, а застарілий кейс лагодять із пріоритетом дефекту продукту: звичний failed привчає команду не вірити сюїті, і реальна регресія губиться в шумі.
- Знаю, що кейси, тестові умови й скрипти живуть під керуванням конфігурацією нарівні з планами й звітами, а ревʼю за чеклистом (checklist-based reviewing) — техніка , застосовна й до самих кейсів.
- Пам'ятаю межу винесення спільного: повторюваний флоу живе в одному місці, але дока Playwright прямо трохи повторів у простих тестах, коли від цього вони стають читабельнішими й простішими в супроводі.
Квіз
Перед стартом
- Питань: 16
- Поріг «зараховано»: ≥70% правильних відповідей.
- Результат впливає на прогрес; завалені питання підуть у чергу повторення.
- Квіз впливає на компліт теми: тема стає «пройдено», лише коли прочитано теорію І квіз складено на ≥70%.
Питання
З чого складається тест-кейс за означенням ISTQB?



