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

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

Приклад коду · 3:00

Typed configuration і пароль, невалідний за явною policy

Приклад створює frozen configuration і генерує пароль довжиною 10, який гарантовано порушує задану в прикладі minimum-length policy 12.

Assertions проходять, друкується student@example.test.

3. Рефакторинг: Faker, DataClass, Fixtures →

Приклад коду · 0:00

Відтворюваний typed test object

Stdlib-приклад показує typed object, valid range і fixed seed без додаткової dependency.

Друкується відтворюваний UserData, а assertion підтверджує базові constraints.

Тестові дані для автотестів →

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

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

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

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

3. API preconditions →

Термін · 6:00

frozen dataclass

Параметр frozen=True додає захист від звичайного присвоєння полів і піднімає FrozenInstanceError; документація описує це як emulated immutability, а не абсолютну незмінність Python object.

3. Рефакторинг: Faker, DataClass, Fixtures →

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

Immutable конфігурація через dataclass

Dictionary конфігурації незручний: IDE не підказує дозволені ключі, а помилки в рядках знаходяться лише під час виконання. Замість нього створюється `@dataclass(frozen=True)` з полями URL, email і password. `frozen=True` забороняє звичайне переприсвоєння полів після створення об’єкта. Це добре відповідає конфігурації одного тестового запуску: значення зчитали на старті й далі лише використовують.

3. Рефакторинг: Faker, DataClass, Fixtures →

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

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

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

3. API preconditions →

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

Перехід від dictionary до атрибутів

Після зміни типу старе звернення `config["email"]` падає з `TypeError: object is not subscriptable`. Це очікуваний сигнал: dataclass використовує атрибути, тому код змінюється на `config.email`, `config.password`, `config.login_url`. Результат — автодоповнення, безпечніше перейменування через IDE й читабельніший контракт fixture. Type hints не роблять Python статично типізованим самі по собі, але дають IDE та аналізаторам достатньо інформації, щоб знаходити частину помилок раніше.

3. Рефакторинг: Faker, DataClass, Fixtures →

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

Рефакторинг лише після підтвердженого повторення

Автор перевіряє usages helper-функцій через IDE перед видаленням або перенесенням. Підкреслення та Find Usages допомагають не «спростити» один тест ціною поломки сусіднього. Підхід уроку: почати з прямого тесту, побачити повторення, винести рівно спільну частину, знову запустити тести. Поточних dataclass і fixtures достатньо; додатковий framework або Page Object на цьому кроці ще не потрібні.

3. Рефакторинг: Faker, DataClass, Fixtures →

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

Коміт залежностей і підсумок

Перед комітом перевіряється, що Faker має зафіксовану версію в `requirements.txt`, а всі тести проходять після переходу на dataclass і fixture. Повідомлення коміту описує обидві зміни: типізовану конфігурацію та генерацію тестових даних. Підсумковий стан: конфігурація незмінна й має явний тип, негативний сценарій використовує згенерований пароль, а логін виконується fixture лише там, де потрібен. Це зменшує дублювання без передчасного переходу до складнішої архітектури.

3. Рефакторинг: Faker, DataClass, Fixtures →
Запитати в чаті про «dataclass» →