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

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

Що змінилося після запису · 25:45

Актуальний pytest pattern використовує `item.stash`

У відео phase reports записуються як динамічні attributes на test node, наприклад rep_call.

Поточний official pytest example використовує typed StashKey та item.stash. Manual Playwright tracing також не записує pytest assertion як traced action; він показує browser context навколо failure.

4. Повертаємо traces, pytest hooks, рефакторинг дублювань у fixtures →

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

Простежити одну Playwright action

Відкрийте implementation Locator.click() у встановленій версії Playwright.
Знайдіть frame/channel method, command name та передані options.
Запишіть, які перевірки виконує client, а які делегуються browser-side layer.
Короткий call path із назвами classes/methods і посиланням на встановлену версію package.

Як Playwright взаємодіє з браузером через протокол →

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

`pytest_runtest_makereport` і фази виконання

Fixture не знає результат тесту напряму, тому `conftest.py` підключає hook `pytest_runtest_makereport`. Hook отримує звіт для кожної фази та записує його в атрибут node, наприклад `rep_setup`, `rep_call`, `rep_teardown`. Для assertion failure самого тесту перевіряється `request.node.rep_call.failed`. `setup` охоплює код до `yield`, `call` — тіло тесту, `teardown` — код після `yield`. Якщо потрібно зберігати trace також при fixture setup failure, це окреме розширення контракту; демонстрація фокусується на `call`.

4. Повертаємо traces, pytest hooks, рефакторинг дублювань у fixtures →

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

Чому досвід поганого коду теж корисний

Чистий код важко зрозуміти лише з правил. Спочатку інженер пише прямолінійне рішення, потім стикається з duplication, coupling і складним maintenance — і лише тоді бачить, яку конкретну проблему вирішує refactoring або design pattern. Patterns і code smells не застосовуються механічно: різні правила можуть тягнути рішення в протилежні боки. Потрібен контекст, щоб вирішити, коли достатньо простого API call, а коли справді потрібні controller, DTO, serialization та додаткові abstraction layers.

Який рівень програмування потрібен automation engineer →

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

Оголошення і виклик функції

Саме оголошення `def print_hello():` нічого не виконує. Функцію треба окремо викликати. Це розділяє опис поведінки та момент її запуску. Далі функція параметризується ім’ям. Замість фіксованого `Hello World` вона приймає `name` і формує `f"Hello {name}"`, тому один алгоритм працює з різними вхідними даними.

4. Типізація даних (str, int, float, bool) →
Запитати в чаті про «call» →