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

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

Що змінилося після запису · 18:10

Built-in Chrome Recorder export залишається не-Python орієнтованим

Поточна Chrome documentation перелічує JSON і Puppeteer-oriented built-in formats; інші formats можуть додаватися Recorder extensions. Прямий built-in Python/pytest export не заявлено.

4. Playwright плагіни та codegen →

Термін · 15:35

OpenAPI Schema Object

OpenAPI 3.1 Schema Object описує структуру payload через JSON Schema vocabulary. Список required визначає обов’язкові properties; оголошення property саме по собі не робить його обов’язковим.

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

Термін · 15:35

Pydantic strict mode

За замовчуванням Pydantic може перетворювати вхідні значення до потрібного типу. Strict mode зменшує coercion і повертає validation error, коли Python input має неправильний тип; правила для JSON input можуть відрізнятися для окремих типів.

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

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

Запис структурованих даних у JSON

Python dictionary можна серіалізувати через `json.dumps(user, indent=2)` і записати як UTF-8 text. JSON зручний для API-like data, бо зберігає field names і вкладену структуру. Не слід записувати tokens, passwords або персональні дані в artifacts без явної потреби й захисту.

7 робота з файлами →

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

Читання JSON та encoding

`Path.read_text(encoding="utf-8")` повертає text, а `json.loads(text)` перетворює JSON string на Python objects. Явний UTF-8 encoding запобігає platform-dependent проблемам із кирилицею та іншими символами. Для file object існують `json.load`/`json.dump`; суфікс `s` у `loads`/`dumps` означає роботу зі string.

7 робота з файлами →

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

Структуровані config-файли й config server

Наступний рівень — JSON, YAML, XML або інший структурований формат, який можна десеріалізувати у типізований config object. Це допомагає групувати налаштування за сервісами й середовищами, але файл із секретами все одно не можна публікувати в Git. У складнішій системі конфігурацію може віддавати централізований config server. Він дозволяє сервісам отримувати актуальні домени, ключі й feature flags, інколи без повного redeploy. Тестовий код не повинен створювати паралельне джерело правди, якщо може безпечно використати той самий контрольований механізм, що й продукт.

Юзер менеджмент та костилі з якими ви стикнетесь в житті →

Python мануфактура · Програма курсу · 15:40–20:05

Створення state для Free plan

Перший варіант дублює Enterprise state й через стандартний модуль `json` очищає cookie `Company ID`. Пошук проходить масив cookies, змінює лише елемент із потрібним `name` і записує окремий файл. Цей підхід є оптимізацією для конкретного застосунку, а не універсальним правилом Playwright. Якщо backend session або інший state також прив’язаний до tenant, безпечніше реально перемкнути проєкт у браузері й зберегти отриманий context.

2.1. Storage state: практична реалізація, фікстури для ролей →

Python мануфактура · Програма курсу · 16:40–20:05

Де й у якому форматі зберігати state

Playwright записує state як JSON із cookies та origins/local storage. Cookie містить `name`, `value`, `domain`, `path`, expiration, `httpOnly`, `secure` та інші параметри; новий context отримує цей файл через `storage_state`. Файл не можна комітити: він може містити чинну сесію та дані внутрішньої інфраструктури. У прикладі state лежить у вже заігнореній `test-results`; окрема директорія також прийнятна, якщо вона гарантовано додана до `.gitignore`.

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

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

`model_validate()`, aliases і форма response

`PydanticModel.model_validate(response_data["data"])` перетворює dictionary на типізований object і водночас перевіряє schema. Модель suite зводиться до реальних полів на кшталт `id`, `type`, `attributes` і `relationships`, а зайві generated wrappers видаляються. Якщо JSON-ключ не є коректним Python-ідентифікатором, наприклад містить дефіс, для поля задається alias. У коді зберігається `snake_case`, а `Pydantic` зіставляє його з оригінальною назвою в JSON.

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

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

Генерація моделей з `OpenAPI`

До проєкту додаються `pydantic` і `datamodel-code-generator`. Генератор приймає локальну схему або URL, обирає `Pydantic BaseModel` як output і зберігає Python-моделі у `src/api/models`. Довгу CLI-команду краще винести в project configuration: там фіксуються input, output, версія Python і правила aliases. Згенерований файл — це стартова точка, а не готова доменна модель: автоматичні назви і надто загальні класи ще доведеться уточнювати.

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

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:00–14:00

Selenium WebDriver, explicit waits і ширша matrix

Selenium 4 використовує стандартизований W3C WebDriver protocol. Client binding надсилає HTTP-команди WebDriver endpoint, а browser-specific driver виконує їх у Chrome, Firefox, Edge, Safari чи іншому підтримуваному браузері. У старішому Selenium 3 застосовувався JSON Wire Protocol. У класичному Selenium flow перед click або input часто використовується explicit wait: client повторно перевіряє умову на кшталт visibility або clickability, а після її виконання надсилає окрему action command. Це створює більше round trips, особливо коли browser session віддалена. Сильна сторона Selenium — широка екосистема vendor drivers і remote providers. Якщо навіть невелика частка користувачів певного браузера означає сотні тисяч людей або браузер входить у договірну support matrix, таке покриття не можна відкидати лише через повільніший test run. У Python-проєкті технічно можна мати і Playwright, і Selenium tests під pytest: Playwright для основного functional suite, Selenium — для вузької cross-browser перевірки. Це виправдано лише реальною вимогою, бо два automation stacks подвоюють dependency, fixture та maintenance surface.

3. Selenium vs Playwright - яка різниця →
Запитати в чаті про «JSON» →