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

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

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

Мінімальний Playwright Page Object із readiness check

Class name позначає page, methods описують actions, locators зберігаються в одному місці, а open завершується мінімальною readiness check.

Після open() test продовжується лише коли heading Sign in видимий; fill_email() приховує locator details від test code.

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

Практика · 0:00

Провести naming audit одного Page Object

Зіставте class name з route, visible heading і product vocabulary.
Позначте methods, які маскують click як open, або змішують action і assertion.
Перейменуйте лише підтверджені невідповідності та запишіть два project rules у README.
Один короткий diff і два naming rules, які прибирають повторну суперечку на code review.

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

Java · Додаткові матеріали · 18:10–25:35

Структура Gradle-проєкту та Java-класу

`build.gradle` описує збірку та залежності, Gradle Wrapper дає відтворюваний запуск, а в `src` створюються source sets `main` і `test`. Службова логіка зберігатиметься в `src/main/java`, а тести — в `src/test/java`. Базова ієрархія Java-коду: package містить class, class містить fields і methods, а локальні variables можуть жити всередині methods. Назва `public` class має збігатися з іменем файлу; безпечне перейменування робиться через IDE refactoring.

Створення першого Java-проєкту та тесту →

Java · Advanced: API-автоматизація · 20:00–25:00

HTTP methods і status codes як частина contract

`GET`, `POST`, `PUT`, `DELETE` мають різні очікувані effects. `200 OK`, `201 Created`, `202 Accepted`, `204 No Content`, client errors `4xx` і server errors `5xx` не слід згортати в одне «працює/не працює». Особлива увага приділяється `PUT`, де behavior для nonexistent resource залежить від contract. Автотест має кодувати домовленість конкретного API, а не універсально вважати один code правильним для всіх APIs.

Теоретичний вступ до вебсервісів →

Java · Основний курс · 20:38–24:30

Пошук проєкту і виділення API methods

Projects endpoint повертає колекцію проєктів із title та id. Для прикладу обирається проєкт Manufacture Light, у межах якого потрібно створити test suite. Початковий лінійний сценарій розділяється на methods для login, projects і suites. Кожен method отримує тільки потрібні йому дані: token, project name/id та payload. Це підготовка до винесення API-логіки в controllers.

Rest Assured: базове використання →

Java · Додаткові матеріали · 1:11:37–1:16:24

Intent-level methods для assertions

Низькорівневі selector, collection і parsing operations виносяться в methods на кшталт `countOfProjectsShouldBeEqualTo`, `countOfTestCasesShouldBeEqualTo` та перевірку total count. Test method після цього показує намір сценарію й очікувані числа, а не деталі DOM. Параметри `expectedSize` або `expectedCount` дають використовувати ті самі перевірки з різними даними.

Маленький рефакторинг і тестові дані у Java →

Java · Advanced: API-автоматизація · 1:20:00–1:30:00

Виділення API client і resource methods

Shared `RequestSpecification` виноситься в client/configuration method, а resource operations — у methods з domain names, наприклад create/find pet. Тест залишає сценарій і assertions, transport details переходять в client. Рефакторинг починається після working example, а не з speculative framework. Назва class може бути `Client`, `Controller` чи `Service`; важливіше, щоб він відповідав одному resource/service boundary.

API: що тестувати та як написати перший тест →

Java · Додаткові матеріали · 1:21:00–1:27:16

Спільні parsers для `int` і `double`

Універсальний `parseIntegerFromString` переноситься до окремого utilities package як `public static` method і підключається static import. Поруч створюється parser для `double`, щоб обробляти UI-значення на кшталт coverage з десятковою частиною. Відео також пояснює різницю між primitive `int` і reference type `Integer`, статичними methods та methods, які повертають значення замість `void`.

Маленький рефакторинг і тестові дані у Java →

Java · Додаткові матеріали · 1:27:16–1:31:32

Організація test class, `boolean` і практика

Рекомендований порядок у класі: test data, самі tests, а потім допоміжні methods. Спершу можна залишати methods біля конкретного test class, побачити реальне дублювання й лише тоді ділити UI на Page Objects або components. `Boolean.parseBoolean` і `assertEquals(expected, actual)` показані як ще один приклад перетворення тексту з UI; практична задача — написати три-чотири читабельні tests, винести secrets у `.env` і потренувати IDE refactorings.

Маленький рефакторинг і тестові дані у Java →

Java · Advanced: API-автоматизація · 0:00–10:00

Type-aware assertions з AssertJ

Object equality не підходить для всіх API checks. Dates потребують before/after/close-to comparison, floating-point — tolerance, collections — contains/order/filter semantics, nested objects — field-level comparison. AssertJ починає з `assertThat(actual)` і пропонує methods відповідно до actual type. Це зменшує custom comparison code і робить expected behavior видимим у test.

AssertJ: виразні асерти та їх генерація →

Java · Додаткові матеріали · 3:40–8:34

Поле test class і підказки IntelliJ IDEA

`baseUrl` переноситься в тіло класу, після чого його можуть використовувати кілька test methods. IntelliJ IDEA підсвічує помилки та зайві конструкції, пропонує quick fixes через `Alt+Enter` або `Option+Enter` і допомагає спростити ініціалізацію. Жовті підказки варто читати, але застосовувати лише після розуміння запропонованої зміни.

Маленький рефакторинг і тестові дані у Java →

Java · Advanced: API-автоматизація · 10:00–30:00

Generated assertions і їх межі

Assertion generator може створити fluent `hasName`, `hasCode` та інші methods з model classes. Розглядаються hard і soft assertions, package include/exclude та custom templates. Live demo виявляє plugin/version/import failures. Урок: generated assertion code потрібно компілювати у clean build і review, а не вважати generator output правильним за замовчуванням.

AssertJ: виразні асерти та їх генерація →
Запитати в чаті про «methods» →