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

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

Що змінилося після запису · 4:00

pytest.toml з'явився у pytest 9.0

Урок конфігурує suite через pytest.ini.

Поточна документація pytest також підтримує pytest.toml, доданий у pytest 9.0. pytest.ini залишається підтримуваним і має вищий пріоритет за legacy alternatives.

pytest 9.0

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

Що змінилося після запису · 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 →

Приклад коду · 10:03

Мінімальний Playwright pytest test

Показує sync API, injected page fixture, navigation і web-first assertion без залежності від мінливого повного title.

pytest знаходить один test і він проходить у Chromium.

2. Перший автотест на Python з Playwright →

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

Навіщо тестам явна конфігурація

Однакова конфігурація потрібна, щоб локальний запуск і CI поводилися передбачувано. У проєкті фіксуються мінімальні версії `pytest`, `pytest-playwright`, `pytest-html`, Faker та інших залежностей. Це дає IDE, pytest і CI явні передумови замість неявної залежності від локального середовища автора. На початку також показано Local History і Smart Checkout у PyCharm/IntelliJ. Ці інструменти можуть допомогти повернути локальні зміни або розібрати конфлікт під час перемикання гілки, але не замінюють Git-історію та перевірку diff.

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 мануфактура · Програма курсу · 0:00–5:00

Selenium як набір інструментів і залежність проєкту

Selenium розглядається не як одна функція для керування браузером, а як екосистема. Для Python-тестів ключовим є Selenium WebDriver; Selenium IDE дає змогу записати простий сценарій у браузері й згенерувати початковий код, а Grid стосується розподіленого запуску. Залежність додається через `pip install selenium` або `uv add selenium`, після чого середовище треба синхронізувати. Допоміжний `pytest-selenium` може спростити старт, але урок застерігає від прив’язки до слабо підтримуваної обгортки: базову Selenium fixture нескладно контролювати самостійно. `pytest` залишається test runner незалежно від браузерної бібліотеки. Тому Selenium- і Playwright-тести можуть певний час співіснувати в одному Python-проєкті під час поступової міграції; їх достатньо розвести по зрозумілих packages, не переписуючи весь набір одразу.

1. Selenium початок, основи, фікстури →

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

Віртуальне середовище й залежності

PyCharm зазвичай створює для нового Python-проєкту окреме віртуальне середовище `.venv`. Воно ізолює версію Python і бібліотеки конкретного проєкту від інших проєктів на комп’ютері. У вбудованому терміналі активне середовище позначається префіксом на кшталт `(.venv)`. Термінал можна відкрити через меню дій або гарячою клавішею (`Option+F12` на macOS чи `Alt+F12` у відповідній розкладці на Windows). Для інтеграції Playwright із pytest встановлюється пакет: ```bash pip install pytest-playwright ``` Плагін надає готові pytest-фікстури, зокрема `page`, і бере на себе створення браузера, контексту та сторінки для тесту.

2. Перший автотест на Python з Playwright →

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

Синхронізація середовища та pytest fixture для Chrome

Після зміни залежностей запускається `uv sync`, а фактично встановлена версія звіряється з lock-файлом. Якщо імпорт не працює або підтягнулась неочікувана версія, спочатку треба перевірити синхронізацію середовища, а не змінювати тестовий код навмання. Створюється pytest fixture, яка ініціалізує `webdriver.Chrome()` і повертає driver тесту. Команди тесту надходять до browser driver, а він уже керує браузером. Аналогічно можна створювати Firefox, Edge або Safari driver, але для навчального сценарію достатньо Chrome. Сучасний Selenium Manager підбирає сумісний driver автоматично, тому за звичайного локального запуску не потрібно вручну завантажувати executable й прописувати шлях. Це спрощує fixture, але версії Selenium і браузера все одно мають залишатися відтворюваними в CI.

1. Selenium початок, основи, фікстури →

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

Розділення `conftest.py` через pytest plugins

Один `conftest.py` накопичив конфігурацію, запуск браузера, створення сторінки й app-specific fixtures. Код розділяється на модулі `config`, `playwright` та `app`, а кореневий `conftest.py` лише підключає їх через `pytest_plugins`. Технічний шар створює браузер і context; app-шар виконує login, перевіряє, що цільова сторінка завантажена, і зберігає state. Такий поділ залишає місце для Firefox або інших browser options без змішування з бізнесовими переходами.

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

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 мануфактура · Програма курсу · 10:00–18:00

Консольний запуск, HTML report і Git hygiene

Запуск простої команди `pytest` у терміналі відтворює спосіб, у який suite згодом стартуватиме на CI. Така перевірка важлива: запуск через IDE може мати інший working directory, environment або власні параметри. `pytest-html` створює початковий звіт зі статусами тестів і доступними логами. Його достатньо для першої діагностики на CI: знайти failed test, переглянути повідомлення, а потім локально відтворити проблему з trace. Звіт не замінює повну observability, але дає мінімальний переносний артефакт. Каталоги з HTML-звітами, screenshots і traces додаються до `.gitignore`. Це результати конкретного запуску, а не вихідний код; їх треба публікувати як CI artifacts, а не комітити в репозиторій.

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

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

Запуск у headed-режимі

За замовчуванням браузер запускається без графічного вікна. Щоб бачити проходження сценарію, до конфігурації pytest додається headed-режим: ```ini [pytest] addopts = --headed ``` Візуальний режим допомагає навчанню й локальному налагодженню, але тест виконується швидко, тому одне лише вікно браузера не замінює чітких перевірок.

2. Перший автотест на Python з 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 →
Запитати в чаті про «pytest» →