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

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

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

Instance state через self та __init__

page є instance attribute: кожен PageObject отримує власний стан через __init__, а method читає його через self.

Команда друкує Page: checkout і assertion проходить.

__init__, self, page та принципи ООП →

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

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

Урок пропонує уявляти job як чистий container або окрему машину.

GitHub окремо визначає GitHub-hosted і self-hosted runners. Hosted job отримує fresh runner instance за documented contract, але environment не перетворює self-hosted runner на isolated container.

Перевірено за документацією 2026-07-31; точна дата зміни не встановлена.

1. Теорія CI/CD та як ви можете інтегрувати тести в пайплайн →

Термін · 0:00

self

Загальноприйнята назва першого параметра instance method. Python передає bound instance неявно під час виклику obj.method(), але ім’я self саме по собі не є keyword.

__init__, self, page та принципи ООП →

Нюанс · 4:00

Self-hosted runner не є isolation boundary

GitHub попереджає, що код workflow на self-hosted runner може скомпрометувати машину та доступні secrets. Один runner виконує одну job одночасно, але це не гарантує ізоляцію між послідовними jobs; для untrusted workflows потрібні ephemeral runners або інша isolation strategy.

Інфраструктура автотестів та її нюанси →

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

Мінімальний Playwright Page Object із readiness check

Class name позначає page, methods описують actions, locators зберігаються в одному місці, а open завершується мінімальною readiness check.

Після open() test продовжується лише коли heading Sign in видимий; fill_email() приховує locator details від test code.

Неймінг та структура automation-проєкту →

Python мануфактура · Сесії: AMA та PMP · 0:00–3:00

`self` і область видимості

`self` — явний параметр instance method, через який код звертається до конкретного екземпляра класу. `self.card` означає атрибут цього екземпляра, тоді як локальна змінна `card` живе лише у своїй функції або блоці видимості. Однакові назви технічно можливі, але збільшують когнітивне навантаження. Префікс `self.` одночасно потрібен Python для правильного доступу до instance attribute і показує читачеві, де зберігається стан.

__init__, self, page та принципи ООП →

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

Атрибути класу й `self`

У класі значення екземпляра зберігаються як `self.name`. `self` вказує, що атрибут належить конкретному створеному об’єкту, а не є випадковою локальною змінною функції. Методи того самого екземпляра звертаються до цього значення через `self.name`. Якщо пропустити `self`, Python шукатиме локальне або глобальне ім’я й отримає `NameError` або попередження IDE.

4. Типізація даних (str, int, float, bool) →

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

Мережевий доступ і self-hosted runners

Відкривати приватне середовище для широкого діапазону IP хмарного CI дорого в підтримці й збільшує поверхню атаки. Практичніший варіант — runner усередині контрольованої мережі: GitHub або GitLab передає йому job, а сам runner уже має потрібний маршрут до тестової інфраструктури. Доступ усе одно обмежують мережевими правилами й мінімальними правами конкретного runner.

Інфраструктура автотестів та її нюанси →

Python мануфактура · Програма курсу · 21:24–27:20

File template для Page Object

Page Object і Page Component мають повторювану основу: імпорти Playwright, клас, `__init__`, збереження `page`, базову перевірку завантаження та часто `return self`. Замість копіювання цієї «шапки» створено власний шаблон у `Settings → Editor → File and Code Templates`. У file template змінна `${NAME}` підставляє назву, яку вводять під час створення файлу. Після збереження в меню `New` з’являється окремий тип `Page Object`; вибір цього пункту створює клас з підготовленими імпортами й методами. Під час live coding шаблон кілька разів виправляється: додаються пропущені `self`, закривається дужка, коригуються відступи. Це нормальний цикл налаштування: створити пробний файл, дочекатися синтаксичних та інспекційних підказок IDE, виправити шаблон і повторити генерацію. Перевіряти потрібно саме згенерований файл, а не лише текст у вікні налаштувань. Оскільки поточні Page Object і Page Component мають однакову основу, одного file template достатньо. Окремі шаблони варто додавати лише тоді, коли їхня структура реально розійдеться.

Майструємо IDE під себе →

Python мануфактура · Сесії: AMA та PMP · 0:00–2:00

CI runners, agents і вартість виконання

GitHub і GitLab називають виконавців jobs runners, Jenkins — agents. Хмарні runners зручні, але в приватних організаціях хвилини виконання можуть тарифікуватися. Self-hosted runner працює всередині інфраструктури компанії, дає більше контролю над ресурсами й доступами та часто зменшує операційну вартість регулярних прогонів.

Інфраструктура автотестів та її нюанси →

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

`class`, `__init__`, `self` і methods

Class name зазвичай є іменником в однині та пишеться з великої літери. `__init__` приймає початковий state, а `self.email` і `self.role` належать конкретному object instance. Method `is_admin()` розміщує перевірку ролі біля даних і не змушує кожен test повторювати `user.role == "admin"`.

10 ооп →

Python мануфактура · Сесії: AMA та PMP · 3:00–6:00

`__init__` задає обов’язковий стан об’єкта

Через `__init__` клас отримує залежності й початковий стан, без яких його методи не мають сенсу. Наприклад, компонент приймає кореневий locator, а Page Object — Playwright `page`; наступні методи перевикористовують ці значення через `self`. У повсякденній мові `__init__` часто називають constructor. Технічно екземпляр створює `__new__`, а `__init__` ініціалізує вже створений об’єкт. Для звичайного Page Object достатньо реалізувати саме `__init__`.

__init__, self, page та принципи ООП →

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 мануфактура · Сесії: AMA та PMP · 4:09–7:02

Технічна й управлінська робота вимагають різного хисту

Робота з людьми може бути хаотичною й емоційно складною; глибока технічна робота дає інший тип задоволення. Немає універсально вищої ролі — важливо чесно визначити, який характер задач підходить саме зараз. Корисно пробувати різні професійні ролі й хобі та дізнаватися про труднощі designer, developer, DevOps і manager. Навіть якщо роль не стане основною, цей досвід покращує співпрацю й допомагає розуміти мотиви інших учасників команди.

Перехід із менеджменту в технічну роль і sabbatical →

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

Runner як окрема машина

CI-інтерфейс не виконує тести сам: GitHub або інша система передає job конкретному runner. Це окрема машина чи контейнер, який має отримати репозиторій, інструменти, конфігурацію та мережевий доступ до системи під тестом. Hosted runner з публічного інтернету може не бачити DEV/STG, доступний лише через VPN або приватну мережу. Тоді потрібен self-hosted runner усередині інфраструктури або інше узгоджене мережеве рішення. Тому питання «де запускатимуться тести?» треба вирішувати разом із доступами, credentials і topology, а не після написання workflow.

1. Теорія CI/CD та як ви можете інтегрувати тести в пайплайн →
Запитати в чаті про «self» →