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

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

Практика · 5:30

Спроєктувати місце запуску тестів

Намалюйте DEV/STG topology і позначте, чи доступні середовища з публічного інтернету.
Виберіть hosted або self-hosted runner і зафіксуйте причину.
Розділіть конфігурацію на repository variables, environment variables і secrets.
Назвіть один ресурсний або access blocker до інтеграції suite в deployment path.

1. Теорія CI/CD та як ви можете інтегрувати тести в пайплайн →

Нюанс · 6:00

Environment variables мають вищий пріоритет

Оскільки load_dotenv() не override-ить наявні environment variables за замовчуванням, CI або shell може без зміни .env надати іншу конфігурацію.

2.1. відео, енв файл →

Термін · 6:00

load_dotenv

load_dotenv() читає key-value pairs з .env і додає їх до environment; за замовчуванням уже наявні environment variables не перезаписуються.

2.1. відео, енв файл →

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

Environment variables і межа простого `.env`

Environment variable передає процесу значення на кшталт base URL, username або password без hardcode у вихідному коді. У Unix-подібній оболонці змінну можна експортувати перед запуском; у Windows вона задається іншим системним механізмом. `.env` є зручним локальним представленням таких пар ключ–значення, яке застосунок читає під час старту. Проблема з'являється, коли один продукт має кілька web/API/admin-сервісів і кожному потрібні окремі URL та credentials. Плоский набір ключів розростається, префікси дублюються, а залежності між значеннями стають неочевидними. Для невеликого проєкту `.env` достатній; переходити на складніший формат варто після реального зростання конфігурації.

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

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

Функції є діями, класи й дані — іменниками

Функції Page Object називаються за дією тест-кейсу й починаються з дієслова; класи, файли, variables і constants позначають сутності або дані. Для однакових дій команда має обрати один словник — наприклад, послідовно використовувати `fill`, `click` і `select`, бажано близько до API обраного framework. Функцію, яка натискає кнопку, не варто називати `openPage`: окрема navigation-функція може відкривати URL напряму, обходячи довгий UI-шлях. Неминучі суперечки на code review краще завершити коротким naming convention у README, а не щоразу вирішувати те саме заново.

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

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

Secrets, variables та environments

Runner повинен отримати base URLs, users, passwords, tokens та інші параметри без commit у репозиторій. У GitHub Actions значення можна зберігати як repository secrets/variables або прив’язувати до environments на кшталт DEV, STG і PROD. Environment-level значення зручні, коли ті самі ключі мають різні значення та правила доступу для різних середовищ. На реальному проєкті права на створення або зміну secrets можуть належати не автоматизатору. Це окрема залежність від власників репозиторію чи DevOps-команди, яку треба з’ясувати заздалегідь. Для малого набору параметрів не потрібно будувати складну config-систему: достатньо найпростішого контрольованого scope, який не розкриває секрети.

1. Теорія CI/CD та як ви можете інтегрувати тести в пайплайн →

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

Теми мінікурсу

Модуль послідовно охоплює типи даних, оператори, умови, цикли, comprehensions, функції, файли, exceptions, модулі, ООП, type hints, pytest та environment variables. Це базові конструкції, які автоматизатор зустрічає в UI- й API-тестах.

0 вступ в заняття →

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

`str`, `int`, `float`, `bool` і запуск прикладів

Змінна отримує тип із присвоєного значення: текст у лапках стає `str`, ціле число — `int`, число з десятковою крапкою — `float`, а `True`/`False` — `bool`. `type(value)` допомагає побачити фактичний тип. Файл можна запускати кнопкою Run в IDE й одразу звіряти оголошені значення з console output.

1 типи даних →

Java: архівні доповнення · 6:10–8:35

Що не можна комітити

До Git додаються source code, Gradle Wrapper і потрібні configuration files. Не комітяться `.gradle`, `build`, `out`, локальна `.idea`, Maven build output та файли з environment variables чи secrets. Виняток для частини `.idea` може бути свідомим командним рішенням, наприклад для спільного code style. `.gitignore` має явно захищати repository від згенерованого сміття та приватних даних.

Публікація Java-проєкту на GitHub →

Python мануфактура · Сесії: AMA та PMP · 6:20–9:20

Глибина знань зростає разом із seniority

Для middle і особливо senior рівня очікується розуміння типів даних, проходу collections, роботи з files та databases, object lifecycle, scope variables, initialization order і test runner lifecycle. Ці знання зазвичай закріплюються після реальної проблеми, а не після ізольованої лекції. Тому відповідь не вимірюється списком syntax topics. Junior має безпечно змінювати прості scripts; middle — діагностувати non-obvious behavior; senior — пояснювати system-level root cause й обирати правильний test seam.

Який рівень програмування потрібен automation engineer →

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

Константи й помірний DRY

Повторювані звернення до environment variables піднімаються у зрозумілі константи на рівні файлу: `LOGIN_URL`, `EMAIL`, `PASSWORD`. IDE Replace використовується для послідовної заміни старих виразів. Автор свідомо не додає YAML, кілька конфігураційних класів чи систему environment-профілів. Поточна потреба — один передпродакшн стенд, тому достатньо `.env`. Розширення потрібне лише тоді, коли реально з’являться різні середовища з відмінними наборами параметрів.

2.1. відео, енв файл →

Python мануфактура · Сесії: AMA та PMP · 12:45–15:55

Чому scripting залишається обов’язковим

Pentester автоматизує запуск tools, підготовку input, аналіз результатів, відтворення знахідок і створення reports. Для цього потрібні базові programming concepts: variables, data structures, files, network requests, error handling і передача даних між process-ами. Мова залежить від задачі: Shell підходить для orchestration, TypeScript або Python — для швидких API scripts, Go часто зустрічається в infrastructure та security tooling. Low-code може пришвидшити старт, але на співбесіді й у production роботі все одно потрібно розуміти, що саме виконує generated script.

Перехід у пентестинг: що важливо →

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

Live templates для методів і повторюваних блоків

На відміну від postfix template, `Live Template` розгортається в місці курсора з короткої абревіатури. У Settings створюється окрема група шаблонів для проєкту або Playwright, а контекст обмежується Python-файлами. Це не дає шаблону випадково з’являтися в нерелевантних типах файлів. У шаблоні методу використовуються змінні для назви функції, аргументів або локатора та `$END$` для фінальної позиції курсора. Після розгортання `Tab` переходить між редагованими полями. Якщо автоматичне перетворення назви в `snake_case` не працює передбачувано, простіше залишити явне введення назви, ніж ускладнювати шаблон. На основі реального сценарію створено заготовку методу, який приймає дані, знаходить елемент через `self.page.locator(...)`, виконує дію й повертає `self`. Потім метод перейменовується рефакторингом IDE, щоб назва оновилась і в оголошенні, і у виклику.

Майструємо IDE під себе →
Запитати в чаті про «variables» →