Prog Academy
RU UA
QA та тестування

Що таке інтеграційне тестування?

Інтеграційне тестування перевіряє, як кілька компонентів працюють разом: застосунок і база даних, сервіс і зовнішнє API, два мікросервіси між собою. Окремо кожна частина може бути справною, а на стику все одно виникне помилка.

Типові дефекти цього рівня — саме стикувальні: розбіжність форматів даних, змінений контракт API, неправильна обробка помилок сусіднього сервісу, проблеми з транзакціями.

На відміну від модульних тестів, інтеграційні запускають на реальних або близьких до реальних залежностях, тому вони повільніші й складніші в налаштуванні. Їх зазвичай менше, але саме вони ловлять те, що не видно зсередини окремого модуля.

Де застосовується

Інтеграційні перевірки закривають найдорожчі помилки — ті, що виникають на стиках. Застосунок і база даних, сервіс і платіжний шлюз, два мікросервіси, що обмінюються повідомленнями: окремо кожна частина справна, а разом вони розходяться у форматі даних чи в обробці помилок.

У сучасних проєктах такі тести запускають на справжніх залежностях, піднятих у контейнерах: реальна база замість заглушки, локальний брокер повідомлень, емулятор зовнішнього API. Це повільніше за модульні тести, тому їх зазвичай виділяють в окремий етап конвеєра.

Приклад

Сервіс замовлень зберігає суму як ціле число копійок, а сервіс звітів очікує дробове значення у гривнях. Модульні тести обох проходять успішно — розбіжність видно лише в інтеграційному тесті, де вони обмінюються реальним повідомленням.

Часті запитання

Чим інтеграційне тестування відрізняється від модульного?

Модульний тест перевіряє одну функцію в ізоляції і підміняє всі залежності. Інтеграційний перевіряє кілька компонентів разом, зі справжньою базою чи сервісом. Він повільніший і складніший у налаштуванні, але ловить помилки, які модульним тестам принципово недоступні.

Чи потрібна для таких тестів справжня база даних?

Бажано та сама, що в продакшені — інакше частина відмінностей лишиться непоміченою. Стандартний сьогодні підхід: піднімати базу в контейнері на час прогону тестів. Це дає реалістичність і при цьому не потребує спільного стенда, який команда ділить між собою.

Як тестувати інтеграцію із зовнішнім сервісом?

Найчастіше його підміняють керованою заглушкою — сервером, який відповідає заздалегідь заданими відповідями, включно з помилками й таймаутами. Так перевіряється і штатна поведінка, і реакція на збій. Звертатися до реального стороннього сервісу в тестах ризиковано й нестабільно.

Скільки інтеграційних тестів потрібно?

Помітно менше, ніж модульних: вони дорожчі в підтримці й повільніші. Розумна стратегія — щільно закривати логіку модульними тестами, а інтеграційними перевіряти ключові звʼязки і сценарії, де розбіжність контрактів призведе до реальних втрат.

Повʼязані терміни