Что такое интеграционное тестирование?

Ответ

Интеграционное тестирование — это уровень тестирования, который проверяет корректность взаимодействия и совместной работы интегрированных модулей, компонентов или систем.

Цель: Выявить дефекты на стыках компонентов, в интерфейсах, протоколах обмена данными и в работе с общими ресурсами (например, базами данных).

Пример теста интеграции API (Python, pytest):

import requests

BASE_URL = "http://api.example.com"

def test_user_creation_and_retrieval():
    # 1. Интеграция: создание пользователя через API
    create_response = requests.post(
        f"{BASE_URL}/users",
        json={"name": "Alice", "email": "alice@example.com"}
    )
    assert create_response.status_code == 201
    user_id = create_response.json()["id"]

    # 2. Интеграция: получение созданного пользователя
    get_response = requests.get(f"{BASE_URL}/users/{user_id}")
    assert get_response.status_code == 200
    user_data = get_response.json()
    assert user_data["name"] == "Alice"
    assert user_data["email"] == "alice@example.com"

Подходы к интеграции:

  • Снизу вверх (Bottom-Up): Сначала тестируются низкоуровневые модули, затем к ним добавляются и тестируются высокоуровневые.
  • Сверху вниз (Top-Down): Процесс начинается с высокоуровневых модулей, а низкоуровневые заменяются заглушками (stubs).
  • Большой взрыв (Big Bang): Все модули интегрируются одновременно, после чего проводится тестирование всей системы.

Ответ 18+ 🔞

Ага, вот это тема, про которую можно поговорить с чувством, с расстановкой, с матерком! Смотри, интеграционное тестирование — это, блядь, как собрать всех своих пьяных друзей на одной кухне и посмотреть, кто кого первым пошлёт нахуй. Цель — не проверить, как каждый из них умеет пить водку в одиночку (это unit-тесты), а выяснить, как они, сука, будут взаимодействовать, когда начнут делить одну селёдку под шубой.

Цель, говоришь? Да выявить все эти косяки на стыках, где один модуль думает, что передал данные, а второй их нихуя не получил. Или где оба лезут писать в одну базу данных и в итоге получается такая каша, что волосы дыбом. Интерфейсы, протоколы, общие ресурсы — вот где собака зарыта, точнее, где она начинает гадить посреди ковра.

Вот, смотри на этот код, тут всё ясно как божий день, но суть ты улови:

import requests

BASE_URL = "http://api.example.com"

def test_user_creation_and_retrieval():
    # 1. Интеграция: создание пользователя через API
    create_response = requests.post(
        f"{BASE_URL}/users",
        json={"name": "Alice", "email": "alice@example.com"}
    )
    assert create_response.status_code == 201
    user_id = create_response.json()["id"]

    # 2. Интеграция: получение созданного пользователя
    get_response = requests.get(f"{BASE_URL}/users/{user_id}")
    assert get_response.status_code == 200
    user_data = get_response.json()
    assert user_data["name"] == "Alice"
    assert user_data["email"] == "alice@example.com"

Видишь? Мы тут не просто функцию проверяем. Мы, сука, целую цепочку гоняем: создали юзера через один конец системы (ручку /users), а потом пошли за ним через другой конец (ручку /users/{id}). И смотрим, а доехали ли данные, не потерялись ли по дороге, не перепутал ли кто-нибудь Алису с Бобом? Это и есть интеграция в чистом виде — проверить, как эти две штуки, которые по отдельности могут работать, сработаются вместе.

А подходы к этой вакханалии, они вообще отдельный цирк:

  • Снизу вверх (Bottom-Up): Это когда ты начинаешь с самых мелких, низкоуровневых модулей — типа того чувака, который только умеет класть кирпичи. Проверил его, потом к нему прикручиваешь того, кто эти кирпичи в стену складывает, проверяешь их вместе. Потом добавляешь кровельщика, и так до полного дома. Метод надёжный, но долгий, ёпта.
  • Сверху вниз (Top-Down): А это наоборот. Сначала берёшь главный модуль — условно, "мозг" системы. А всё, что ему нужно для работы (те же кирпичи, цемент), заменяешь заглушками (stubs), которые просто делают вид, что они что-то делают. Потом постепенно эти заглушки меняешь на реальные модули. Быстро можно понять, работает ли основная логика, но если в низкоуровневом модуле пиздец, узнаешь об этом в самом конце.
  • Большой взрыв (Big Bang): О, это мой любимый, чисто русский авось! Берёшь ВСЕ модули разом, собираешь их в кучу, включаешь и молишься всем богам, чтобы оно хоть как-то заработало. Если работает — красота, героизм. Если нет — хуёво, потому что искать, где именно пошло не так, это тот ещё квест. Как найти иголку в стоге сена, который ещё и горит.