Конспект і таймкоди
0:00
Consumer, producer і REST resources
Звична client–server model узагальнюється термінами consumer і producer. Consumer споживає дані або можливість, producer їх надає. Така мова працює не лише для browser і web server, а й для взаємодії між сервісами.
Комунікація має protocol і contract. API-документації може не бути, вона може бути написаною вручну і застарілою або code-generated з анотацій у коді. У REST сутності представлені resources, а операції над ними — endpoints з HTTP-методами GET, POST, PUT, DELETE.
2:28
Ланцюжки сервісів і технічний борг
Один і той самий service може бути producer для одного виклику і consumer для іншого. Тому response, яку отримує frontend, може залежати від кількох внутрішніх викликів.
Чиста теоретична модель не завжди збігається з production: дедлайни змушують команду накопичувати technical debt і порушувати ідеальні межі. Тестувальник має досліджувати фактичні зв’язки, а не покладатися лише на назви сервісів.
4:00
Моноліт, модульний моноліт і мікросервіси
У моноліті business logic, email, SMS, persistence та integrations розгортаються як один application. Це не є автоматично погано: добре структурований моноліт простіший у розробці і не платить network latency за кожен внутрішній виклик.
Модульний моноліт розділяє functionality всередині одного deployment і може зберігати окремі data boundaries. Мікросервісна архітектура виносить ці частини у незалежні services, але додає HTTP, serialization, handshakes, deployment і distributed failure modes.
6:10
Gateway і вкладена архітектура
Gateway може бути зовнішньою обгорткою над одним або кількома services. Тому один квадрат на high-level diagram може приховувати власну базу, декілька внутрішніх services і нові integrations. Кожен із цих components можна «наблизити» і знову побачити нову архітектуру.
На новому проєкті варто попросити lead або developer намалювати таку service map, а потім уточнювати data stores і взаємодії. Це безпосередньо впливає на test design: де готувати state, які контракти перевіряти і де локалізувати падіння.
Практика
Намалювати test-aware service map
- Вибрати один user flow і намалювати client, gateway, services, databases і brokers.
- Позначити synchronous і asynchronous contracts, state setup і failure boundaries.
- Для кожної boundary записати одну contract check і одну end-to-end check.
Результат: Одна діаграма, за якою видно, де готувати data і як локалізувати test failure.
8:55
Event-driven communication і message broker
Сервіс orders може публікувати подію в Kafka або інший broker, а consumer — зчитувати її і оновлювати status. Асинхронна queue допомагає приймати spikes швидше, ніж downstream встигає повністю опрацювати кожен order.
Це не усуває навантаження, а змінює його форму і час. Для тесів з’являються окремі питання: чи опубліковано подію, чи вона була опрацьована, що відбувається з retries, duplicates і відкладеною consistency.
Що змінилося після запису
Kafka — ширше, ніж queue
АктуальноKafka stores events durably in partitioned topics; reading does not itself remove an event. Retention, replay і ordering within a partition мають бути частиною test design.
Що змінилосяЦе уточнення навчального спрощення, а не зміна після запису.
Перевірено 2026-07-31
Термін
Kafka event streaming
Поєднання publish/subscribe, durable event storage і stream processing; producers публікують events, consumers їх читають і опрацьовують.
11:30
Hexagonal architecture як структура коду
Гексагональна архітектура пояснює, як декомпозувати сервіс за відповідальністю та способом взаємодії з довкіллям. Окремі adapters працюють з REST, WebSocket, email, SMS, database, message queue і third-party services, не змішуючи все в одному класі.
Для тестувальника такий поділ дає карту ports і failure seams: можна окремо перевірити domain behavior, adapter contract і повний ланцюжок інтеграції.
13:02
REST, status codes і централізовані errors
Для API automation потрібно окремо вивчити REST semantics: methods, resources, типові status codes і їхню очікувану поведінку. Public endpoints зазвичай оптимізовані для frontend або зовнішніх clients, private endpoints можуть обслуговувати внутрішню service-to-service communication і мати інший контракт.
Самого HTTP status недостатньо. Централізований error handling має повернути consumer стабільний internal error code і зрозуміле пояснення: якого поля бракує або яке значення невалідне. Власні HTTP status codes на кшталт 600 не замінюють нормального error contract.
Термін
HTTP status code
Тризначний code у межах 100–599, який повідомляє result HTTP request; 600 і вище не є valid HTTP status codes.
15:45
Protocols, API Gateway і Backend for Frontend
Окрім REST, системи використовують WebSocket, gRPC і GraphQL. Протокол обирається під задачу, тому перед автоматизацією потрібно зрозуміти не лише endpoint, а й модель комунікації.
Backend for Frontend — це gateway з контрактом, зручним для конкретного client: web frontend, mobile application або окремого screen. Зовні він відкриває потрібні resources, а всередині може агрегувати кілька services з їхніми базами і queues.
Термін
GraphQL resolver
Server-side function для schema field, яка отримує value з application code, database або downstream service. GraphQL не виконує service discovery самостійно.
17:23
GraphQL як агрегатор даних
У GraphQL client зазвичай звертається до одного endpoint і в request описує потрібні fields та зв’язки. Queries читають дані, mutations змінюють їх. Якщо екрану потрібні user і всі його pets, GraphQL layer сам визначає, які downstream services викликати і як звести результат.
Для тесів важливо знати цей internal mapping. Тоді покриття можна розділити за downstream service і полем, а при падінні однієї частини очікувати точний набір failures, а не безадресне падіння всіх API-тесів.
Що змінилося після запису
GraphQL aggregation визначають resolvers
АктуальноGraphQL schema і resolver implementation, а не GraphQL standard сам по собі, визначають, які databases або downstream services викликаються для field.
Що змінилосяЦе уточнення формулювання, а не зміна специфікації.
Перевірено 2026-07-31
Що змінилося після запису
GraphQL-over-HTTP не обмежується POST і status 200
АктуальноCurrent GraphQL-over-HTTP draft requires POST support, permits GET for query operations, forbids GET for mutations and defines non-200 status handling. Тому transport contract треба тестувати за media type і operation, а не очікувати 200 для кожної відповіді.
Що змінилосяТочну транспортну специфікацію відео не називає; перевірено проти current draft 2026-07-31.
Перевірено 2026-07-31
Термін
GraphQL operation
Query є read-only fetch, mutation — write followed by fetch, subscription — long-lived event-driven request. Selection set визначає fields, які client очікує у response.
20:21
Глибина розуміння і жива діаграма
Для складних API-тесів недостатньо знати request syntax. Потрібно «занурюватися» у систему: знаходити природу помилки, відтворювати ланцюжок залежностей і розуміти, де закінчується контракт однієї частини і починається інша.
Автор радить підтримувати живу діаграму у Figma або Miro: ліворуч — архітектура і зв’язки, праворуч — test baselines і шаблони перевірок для окремих components. Така карта покращує онбординг, локалізацію дефектів і планування покриття.
Джерела та додаткові матеріали