Python мануфактураJavaDesign Patterns для автоматизаторів

Терміни, нюанси та джерела

Приклад коду · 0:00

Мінімальна smoke job

Показує найкоротший workflow path від checkout до smoke tests без винесення setup у composite action.

Pull request або manual dispatch створює smoke job на ubuntu-latest і запускає pytest marker smoke.

2. Практика та написання пайплану CI/CD →

Практика · 0:00

Зібрати smoke workflow

Створіть workflow з pull_request і workflow_dispatch.
Запустіть lint та smoke в окремих jobs.
Збережіть report завжди, а traces — після failure.
Навмисно зламайте один smoke test і пройдіть шлях від job log до локального trace.

2. Практика та написання пайплану CI/CD →

Що змінилося після запису · 11:30

Що змінилося після запису

Smoke і regression jobs передають reports/results через artifacts.

upload-artifact v4+ створює immutable artifacts: кілька jobs не можуть дописувати один artifact з однаковим name. Smoke і regression outputs потребують унікальних names і явного merge у publish job.

upload-artifact v4; перевірено за GitHub Docs 2026-07-31.

2. Практика та написання пайплану CI/CD →

Практика · 4:00

Від падіння до trace

Зареєструйте marker smoke і позначте ним один UI test.
Налаштуйте tracing=retain-on-failure.
Навмисно зламайте locator у test environment.
Відкрийте trace.zip і знайдіть failed action, console та network context.
Є відтворюваний failed test і trace, за яким можна назвати точну причину падіння.

1. Налаштування Playwright та Pytest, простий репортінг →

Практика · 0:00

Відтворити failure-to-trace цикл

Візьміть artifact із навмисно failed Playwright test.
Розпакуйте лише зовнішній archive і знайдіть внутрішній trace.zip.
За Trace Viewer назвіть першу дію, де actual state відрізняється від expected.
Зробіть одну вузьку зміну й підтвердьте її повним smoke run.

3. Фікс трейсів на СІ →

Python мануфактура · Програма курсу · 28:00–35:30

Trace Viewer і мінімальний smoke gate

Завантажений trace відкривається через Playwright Trace Viewer. Демонстрація виявляє, що hover-стан поводиться інакше на headless CI runner, а сторінка може зберігати неочікуваний authorization state. Тимчасовий fix перевіряється повним smoke-командним запуском, але нез’ясована причина shared state прямо залишається окремою проблемою, а не оголошується остаточно виправленою. Smoke suite має падати рано й зупиняти беззмістовний regression run, якщо застосунок не завантажився або критичний flow зламаний. Якщо smoke зелений, а regression масово червоний, критерії smoke треба переглянути.

2. Практика та написання пайплану CI/CD →

Python мануфактура · Програма курсу · 4:30–8:30

Smoke і regression jobs

Test job повторює підготовку середовища, встановлює Chromium для Playwright і запускає pytest з відповідними markers. Smoke, regression, API та UI перевірки повинні мати явні набори запуску; в міру зростання проєкту їх краще рознести по окремих workflow, якщо вони мають різні triggers, dependencies або час виконання. Markers треба переглядати як продуктову класифікацію, а не разове маркування: smoke suite має залишатися малим і відповідати на питання, чи застосунок узагалі придатний до глибшої перевірки. Regression містить ширше покриття й не повинен блокувати ранній feedback від smoke.

2. Практика та написання пайплану CI/CD →

Python мануфактура · Програма курсу · 6:10–8:02

Повторний pipeline run

Fix комітиться й повторно запускається в pull request. Linter і smoke можуть стартувати паралельно, щоб базова функціональна перевірка не чекала на завершення статичного аналізу; точна залежність між jobs визначається вимогами проєкту. Після оновлення п’ять smoke tests проходять. Практичний цикл завершено повним ланцюжком: CI failure → artifact → локальний Trace Viewer → вузька зміна → повторний зелений smoke run.

3. Фікс трейсів на СІ →

Python мануфактура · Сесії: AMA та PMP · 5:15–7:41

OTP, rate limits і production smoke

Для OTP можна зарезервувати test identity і детермінований code; для rate limits — окреме правило для CI traffic. Автор допускає такий bypass навіть на production, хоча прямо зазначає, що цього бажано не робити. Редакційне security-застереження: на production безпечніше виконувати smoke через звичайний захист або спеціально спроєктований найменш привілейований test path. Будь-який production bypass header чи hardcoded OTP стає критичним секретом: його витік фактично вимикає захист, тому потрібні ротація, журналювання, вузький scope і окремий security review.

Антибот-захист у контрольованих автотестах →

Python мануфактура · Програма курсу · 26:00–34:00

Ієрархія Playwright і запуск test suites

У спрощеній моделі Playwright спочатку запускає browser process, потім створює ізольований `BrowserContext`, а в ньому — одну або кілька `Page`. Launch options стосуються процесу браузера, context options — сесії користувача, cookies, permissions та емуляції, а `Page` представляє вкладку й виконує дії зі сторінкою. Через `channel="chrome"` можна запустити встановлений branded Chrome замість bundled Chromium. Це потрібно, коли поведінка залежить від повного браузера або медіакодеків; для більшості перевірок швидшого bundled Chromium достатньо. Маркери дають змогу виконувати `smoke` і `regression` окремо. Практичний CI flow: спочатку короткий smoke suite перевіряє, що середовище придатне до тестування, і лише після нього запускається довша regression suite.

1. Налаштування Playwright та Pytest, простий репортінг →

Python мануфактура · Програма курсу · 9:40–12:45

Запуск suites і межі повторного state

Після переходу на `uv` набори запускаються через `uv run pytest` і pytest markers на кшталт `smoke` або `regression`. Перший context виконує login та записує state, наступні contexts завантажують цей файл. Перевірка показує, що оптимізація не виправляє помилки очікувань автоматично: тест може падати через неправильний `is_loaded` або інший homepage state. Треба відрізняти проблему повторної авторизації від помилки самої fixture чи assertion.

2. Storage state, cookie manipulation, дебаг зникаючих елементів →

Python мануфактура · Програма курсу · 0:00–1:30

Завантаження trace artifact

Після падіння smoke job у її artifacts знаходиться архів із traces. Його завантажують і переносять у локальний проєкт або тимчасову директорію для аналізу. Trace відкривається командою `playwright show-trace`, яку можна викликати через інструмент керування Python-середовищем проєкту.

3. Фікс трейсів на СІ →

Python мануфактура · Програма курсу · 4:00–10:00

`pytest.ini`: discovery, `addopts` і маркери

У `pytest.ini` задаються каталоги з тестами, шаблони імен тестових файлів і функцій та директорії, які не потрібно сканувати. Це звужує test discovery до структури проєкту й прибирає зайву роботу з `.git`, `.idea`, build-артефактами та кешами. Через `addopts` виносяться параметри, які мають застосовуватися до кожного запуску: verbose output, короткий traceback, відображення output лише для failed tests, strict markers, Playwright tracing і генерація self-contained HTML report. Маркери `smoke`, `regression`, `web` та `slow` реєструються явно, щоб помилка в назві не перетворилася на тихе пропускання потрібної групи. Для traces обирається `retain-on-failure`: артефакт створюється під час тесту, але зберігається лише після падіння. Це практичніший default, ніж trace для кожного успішного тесту, бо архіви можуть швидко зайняти багато місця.

1. Налаштування Playwright та Pytest, простий репортінг →

Python мануфактура · Програма курсу · 5:30–10:30

Встановлення й pipeline artifacts

CLI встановлюється як системний інструмент, а `allure-pytest` додається до Python dependencies. Pytest налаштовується зберігати машинні результати в `allure-results`; цю директорію не комітять. Smoke і regression jobs завантажують свої `allure-results` як artifacts. Publish job завантажує їх, встановлює сумісну версію Allure CLI та виконує `allure generate`. Старі Playwright HTML artifacts можна прибрати, якщо Allure справді стає єдиним report і не втрачає потрібної діагностики. Версії CLI, Python binding і pytest adapter мають залишатися сумісними. Їх не слід незалежно оновлювати без pipeline verification, бо format results і генератор розвиваються окремо.

4. Allure репорт, основи та інтеграція в CI →

Python мануфактура · Програма курсу · 11:30–16:00

Composite action і artifacts

Повторювані checkout, setup `uv`, setup Python та install dependencies винесено у локальний composite action. Input `install-playwright` вмикає браузерні залежності лише для jobs, яким вони потрібні. Це виправдане перевикористання, бо той самий setup уже виконується в smoke і regression jobs. Після тестів workflow завантажує HTML report і Playwright traces як artifacts. Для них задається retention, наприклад 14 днів: це тимчасові діагностичні результати, а не постійне сховище. HTML report зберігається завжди, traces — переважно після failure.

2. Практика та написання пайплану CI/CD →
Запитати в чаті про «smoke» →