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

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

Термін · 0:00

HTTP success semantics

RFC 9110 визначає 200 OK як успішне виконання request. Для POST content описує status або результат дії. 202 Accepted означає, що request прийнято, але обробку ще не завершено.

Міграція бази даних і тестування даних →

Термін · 18:00

Pull Request

Pull Request представляє запропоновані зміни з branch і дає команді місце для diff, review, checks та рішення про merge.

2. Git Workflow у PyCharm/IntelliJ →

Приклад коду · 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 →

Термін · 22:13

Database authorization у PostgREST

PostgREST автентифікує request, перемикається на PostgreSQL role і залишає authorization базі даних. JWT claims, grants і Row-Level Security стають перевірюваними частинами API access control.

Прихована складність бекенд-тестування →

Термін · 17:23

GraphQL operation

Query є read-only fetch, mutation — write followed by fetch, subscription — long-lived event-driven request. Selection set визначає fields, які client очікує у response.

Вступ до API-автоматизації →

Python мануфактура · Програма курсу · 15:15–21:55

Окремий ZIP на основі pytest `request`

Built-in fixture `request` надає `request.node.name`, тому trace можна назвати ім’ям конкретного тесту й зберігати в `test-results/traces/<test>.zip`. Це робить артефакт однозначним і придатним для CI. ZIP відкривається командою `playwright show-trace <path>`. На timeline видно переходи, clicks, fills, assertions, snapshots, network і Python sources, що дає більше діагностичної інформації, ніж відео самого браузера.

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

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

Класифікація тестів і перший pull request

Перед CI-запуском переглядаються pytest markers: частина тестів переноситься зі smoke до regression, окремо позначаються API, web і Selenium paths. Після відкриття pull request треба ще раз перевірити diff, reviewers і checks, щоб випадково не опублікувати зайві файли або credentials. Перший pipeline закономірно знаходить lint і formatting problems. Їх виправляють локально тими самими командами, що виконує CI, комітять і повторюють запуск. CI тут є відтворюваною перевіркою, а не заміною локального feedback loop.

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

Python мануфактура · Програма курсу · 17:00–20:25

Створення suite і реальний request contract

`SuiteController.create()` приймає `project_id`, `title` і `description`, формує payload та викликає `post` базового controller. Потрібні поля звіряються не лише з документацією, а й з request у browser DevTools. У демо офіційна схема містить сумнівну вимогу до `suite_id` до створення suite, тож real request і response виступають важливою перевіркою контракту. Відповідь Testomat.io загортає основну сутність у поле `data`. Після `response.json()` тест бере `response_data["data"]` і валідує саме цю вкладену структуру.

2. API автоматизація одразу правильно, MVC, pydantic →

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

Push і створення Pull Request

Після локального коміту виконується Push. Перед ним ще раз переглядаються файли та зміни: це остання проста точка, де можна зупинити випадковий коментар, пароль або сторонній файл. У GitHub для нової гілки створюється Pull Request. Заголовок стисло називає зміну, опис пояснює деталі, а вкладка Files changed показує точний diff. Коментарі рев’ю та автоматичні перевірки мають бути опрацьовані до merge.

2. Git Workflow у PyCharm/IntelliJ →

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

Створення workflow та умови запуску

Workflow починається з назви та triggers. Для перевірки змін використовується `pull_request`, для регулярного прогону — `schedule`, а `workflow_dispatch` дозволяє запустити вибраний набір вручну. Scheduled run є прийнятним компромісом, коли deployment events або сам delivery pipeline ще нестабільні, але команді вже потрібен регулярний feedback. Перша job виконує checkout репозиторію, налаштовує `uv` і Python, встановлює dependencies, запускає Ruff та format check. Checkout обов’язковий, бо runner стартує без коду проєкту.

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 · 12:00–16:30

Власні test IDs і внесок у frontend

Глибокі XPath не дають переваги в Playwright: потрібні parent/child operations уже є в locator API, а важливішу бізнес-логіку часто краще перевіряти нижче за UI. Команда автоматизації має домовитися з frontend developers про підтримку test attributes і, за можливості, додавати їх через звичайний pull request. Для публічного production DOM слід окремо оцінити, чи не спрощують описові IDs scraping або розкриття внутрішньої структури.

Пріоритети селекторів та їхня надійність →

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

REST і GraphQL уже дають словник для API automation

У REST структура починається з resources та HTTP methods. `Pet`, `Store` або `User` задають назви controllers/clients, а дії на кшталт create, update, delete чи find by ID — назви методів. Request і response models корисно розділяти, бо server response часто містить поля, яких не було у request. У GraphQL треба повторювати назви queries, mutations, inputs і types зі schema. Code generation може дати готові типи, але базове правило те саме: не створювати паралельний словник там, де backend contract уже має точні терміни. Read-only доступ до frontend і backend repositories допомагає швидше зрозуміти систему й підтримувати automation разом зі змінами продукту.

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

Python мануфактура · Програма курсу · 33:10–38:32

Завдання: повний API-ланцюжок

Домашнє завдання — створити suite у вибраному project, отримати його через API і перевірити результат. Потім той самий підхід застосовується до test case: потрібно реалізувати `TestController`, request model, response model і перевірку створеної сутності. Базові HTTP-методи, headers, error handling і logging перевикористовуються з `BaseController`. Якщо documentation schema неповна, спершу виконується реальний request, а його JSON response перетворюється на початкову `Pydantic`-модель. Помилки validation у цьому процесі допомагають поступово відтворити фактичний контракт.

2. API автоматизація одразу правильно, MVC, pydantic →

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

Повторне використання builder-функцій

`build_login_payload(email, password)` централізує структуру request body й прибирає дублювання inline dictionaries. Назва має описувати одну дію, а повернений об’єкт можна використати в кількох тестах. Секрети не слід виводити в logs навіть у допоміжних функціях.

6 функції →
Запитати в чаті про «request» →