QA та тестування
Що таке інтеграційне тестування?
Інтеграційне тестування (integration testing) перевіряє, як кілька компонентів працюють разом: застосунок і база даних, сервіс і зовнішнє API, два мікросервіси між собою. Кожна частина окремо може працювати правильно, а на стику однаково виникне помилка.
Типові помилки цього рівня виникають саме на стиках: різні формати даних, змінений контракт API, неправильна обробка помилок сусіднього сервісу, проблеми з транзакціями.
На відміну від модульних тестів, інтеграційні запускають зі справжніми або максимально близькими до справжніх залежностями, тому вони повільніші і складніші в налаштуванні. Їх зазвичай менше, але саме вони знаходять те, чого не видно всередині окремого модуля.
Де застосовується
Інтеграційні тести знаходять найдорожчі помилки — ті, що виникають на стиках. Застосунок і база, сервіс і платіжна система, два мікросервіси, які обмінюються повідомленнями: кожна частина окремо працює, а разом вони не збігаються у форматі даних чи обробці помилок.
У сучасних проєктах такі тести запускають зі справжніми залежностями в контейнерах: реальна база замість заглушки, локальний брокер повідомлень, емулятор зовнішнього API. Це повільніше за модульні тести, тому їх зазвичай виносять в окремий етап конвеєра CI.
Приклад
Сервіс замовлень зберігає суму як ціле число копійок, а сервіс звітів чекає дробове значення в гривнях. Модульні тести обох сервісів проходять успішно, і розбіжність видно лише в інтеграційному тесті, де сервіси обмінюються справжнім повідомленням.
Часті запитання
Чим інтеграційне тестування відрізняється від модульного?
Модульний тест перевіряє одну функцію окремо і замінює всі залежності заглушками. Інтеграційний перевіряє кілька компонентів разом, зі справжньою базою чи сервісом. Він повільніший і складніший у налаштуванні, але знаходить помилки, яких модульні тести не бачать.
Чи потрібна для таких тестів справжня база даних?
Бажано та сама, що й у робочому середовищі, інакше частина відмінностей залишиться непоміченою. Сьогодні стандартний підхід — запускати базу в контейнері на час тестів. Це реалістично і не вимагає спільного стенда, який ділить уся команда.
Як тестувати інтеграцію із зовнішнім сервісом?
Найчастіше його замінюють керованою заглушкою — сервером, який повертає заздалегідь задані відповіді, зокрема помилки й затримки. Так перевіряють і нормальну роботу, і реакцію на збій. Звертатися до справжнього стороннього сервісу в тестах ризиковано і нестабільно.
Скільки інтеграційних тестів потрібно?
Значно менше, ніж модульних, бо вони дорожчі в підтримці і повільніші. Розумний підхід — щільно покрити логіку модульними тестами, а інтеграційними перевіряти ключові зв’язки і сценарії, де розбіжність призведе до реальних втрат.
Навчання тестуванню в OWU
Опануйте професію QA-інженера на практичних курсах із менторами та реальними проєктами.
Обрати курс