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

Faker password provider

Faker().password() генерує рядок заданої довжини та дозволяє керувати категоріями символів, але не знає password policy конкретної системи.

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

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

Faker password може бути валідним

Поточний Faker password provider керує довжиною й категоріями символів, але не перевіряє policy target application. Для гарантованого negative test потрібне явне порушення відомої вимоги, наприклад довжина 10 при minimum 12.

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

Термін · 0:00

Faker seed

Seed робить послідовність generated values відтворюваною в межах зафіксованої версії Faker; сам seed не замінює domain validation.

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

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

Навіщо Faker у негативному тесті

Захардкоджений невалідний пароль замінюється згенерованим значенням. Мета — не повноцінне покриття класів еквівалентності чи граничних значень, а різні екземпляри даних у повторних запусках. Додається бібліотека Faker і викликається генератор пароля заданої довжини. Залежність також має бути зафіксована у `requirements.txt`.

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

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

Ініціалізація Faker і зрозуміла назва даних

Перший виклик виправляється після звірки з API: треба створити екземпляр `Faker()`, а вже потім викликати його provider, наприклад `fake.password(length=10)`. Повторні запуски демонструють різні значення. Змінна називається `invalid_password`, щоб тест явно пояснював роль даних. Практична межа рандомізації: при падінні варто логувати або зберігати згенероване значення чи seed, інакше дефект може бути важко відтворити.

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

Python мануфактура · Програма курсу · 47:55–54:13

Дані Faker, запуск і перевірка сценарію

Для унікальної назви використовується Faker. Вираз із назвою компанії перетворюється на змінну через створений postfix template, змінна перейменовується на змістовну `target_suite_name` і передається в метод створення. Непотрібні вбудовані postfix templates можна вимикати, щоб список підказок не заважав. Водночас експеримент із власним `.var` показує межу автоматизації: якщо шаблон не залишає курсор у корисному місці, його треба виправити, а не пристосовувати робочий процес до невдалого шаблону. Сценарій запускається й проходить послідовно: авторизація, створення проєкту, закриття README, відкриття діалогу створення тесту. У режимі паузи перевіряється DOM і вибирається текст `Select suite for test`; для нього додається шаблон `get_by_text(...)`, після чого `expect(...).to_be_visible()` підтверджує появу модального вікна. Якщо попередній debug-процес ще приєднаний, повторний запуск може чекати на його завершення. Після коректного продовження або зупинки процесу тест проходить. Наприкінці тест перейменовується відповідно до перевірюваної поведінки, а не до проміжних технічних кроків.

Майструємо IDE під себе →

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

Не хардкодити єдиний набір даних

Credentials, product, company чи іншу сутність не варто фіксувати безпосередньо в тілі всіх тестів: один екземпляр не дає варіативності й приховує проблеми з іншими значеннями. Faker або власний generator має враховувати domain constraints і boundary values, а кожен run — по можливості створювати інший валідний набір. Детермінований seed можна залишити для відтворення падіння.

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

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

Ітеративний prompting і перша таблиця даних

LLM спочатку отримує вузьку задачу: додати `pytest.mark.parametrize` та згенерувати невалідні значення через Faker. Після запуску результат уточнюється окремими кроками. Такий цикл «малий prompt — diff — запуск — наступне уточнення» краще локалізує помилки, ніж один запит на повний рефакторинг fixtures, даних і тестів одночасно. Пари даних виносяться з decorator у окрему змінну. Це скорочує тіло тесту, дає таблиці предметну назву й дозволяє за потреби перенести test data в окремий модуль. Важливо не генерувати випадкові значення без мети: кожен case має представляти конкретний клас поведінки.

2. Pytest fixtures, playwright fixture, прараметризація тестів →

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

Унікальні test data і повторне використання slug

[Дивитися з 23:00](https://www.youtube.com/watch?v=viR9Rnmxse4&t=1380s). Автотест не може покладатися на випадкове ручне очищення: кожен run потребує незалежних names, emails та URLs, наприклад через Faker або контрольований unique suffix. Водночас validation tests мають використовувати стабільний набір навмисно невалідних values. Обговорення виявляє можливий defect: після soft delete database identity може лишатися, але public slug доцільно анонімізувати або звільняти, якщо зовнішні зв’язки тримаються за immutable ID.

Практика курсу на YOY, домашні завдання та формат ПМП →

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

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

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

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