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

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

Приклад коду · 17:25

Мінімальна typed projection API-відповіді

Проєктує лише потрібне поле id замість поширення raw dictionary у UI-тест.

Assertion завершується без помилки й повертає Project(id='p-1').

3. API preconditions →

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

Словники як модель API-даних

`dict` зберігає пари key/value й природно представляє JSON-like payload або response. `user["email"]` читає обов’язкове поле та падає, якщо ключа немає; `user.get("displayName", "not provided")` дозволяє явно задати fallback для optional field.

1 типи даних →

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

Membership у словнику

Оператор `in` для `dict` перевіряє ключі, а не values. Тому `"email" in response` відповідає на питання, чи API повернув поле, незалежно від його поточного значення; для перевірки значення потрібне окреме звернення за ключем.

2 оператори →

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

Від `dict` до типізованої API-моделі

Замість того щоб працювати з response як із набором рядків і dictionary keys, пропонується описати його через `Pydantic`. Так тест перевіряє не лише наявність значення, а й структуру, типи та обов’язковість полів. Джерелом схеми може бути `OpenAPI`-специфікація Testomat.io. Якщо документації немає, модель можна початково згенерувати з реального JSON через JSON-to-Pydantic і потім відредагувати. Автор одразу попереджає: навіть офіційна специфікація може відставати від фактичної response schema.

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

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

Оголошення, parameters, type hints і `return`

Функція оголошується через `def`, приймає named parameters і може повертати значення. Type hints на кшталт `email: str` та `-> dict[str, str]` покращують navigation і IDE checks, але самі по собі не валідовують input at runtime.

6 функції →

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

Lookup dictionary за ID

`{user["id"]: user for user in users}` будує index, де ID стає key, а весь user — value. Після цього конкретний об’єкт читається напряму, без повторного проходу по list. Якщо IDs дублюються, пізніше значення перезапише попереднє — це слід перевіряти, якщо унікальність не гарантована контрактом.

5 comprehensions →

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

Обхід dictionary

`headers.items()` дає пари key/value, `headers.keys()` — лише keys, `headers.values()` — лише values. Вибір залежить від перевірки: для друку повного header потрібні обидві частини, а для валідації набору полів достатньо keys.

4 цикли →

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

Типізована відповідь замість raw dictionary

Raw `dict` змушує пам’ятати рядкові ключі й не дає надійного autocomplete. Response перетворюється на невелику `Project` dataclass із фактично потрібними полями, насамперед `id` та attributes. Десеріалізація має відповідати реальній response schema. Не потрібно моделювати всі поля API «про запас»: для поточного vertical slice достатньо тих, які читає тест, з явною помилкою при відсутньому обов’язковому значенні.

3. API preconditions →

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

Передавання fixture в тести

Тест отримує `config` як параметр так само, як `page`. На цьому етапі fixture повертає dictionary, тому значення читаються за ключами: URL для відкриття сторінки, email і пароль для авторизації. Зміна проходить через реальний запуск тестів. Помилки на кшталт невірного імені fixture або відсутнього ключа знаходяться лише тоді, коли відповідний шлях справді виконується.

2.1. відео, енв файл →
Запитати в чаті про «dict» →