Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

Документы

Медиа

Назад
Вопрос про CI/CD: CI, unit tests, integration tests, test pyramid, automated testing

Какие виды тестов выполняются в CI (unit, integration)?

Вопрос проверяет понимание основных видов тестов, выполняемых в процессе непрерывной интеграции (CI), и их роли в обеспечении качества кода.

Короткий ответ

В CI/CD пайплайне обычно выполняются модульные (unit) и интеграционные (integration) тесты. Модульные тесты проверяют изолированные функции или классы, они быстрые и их много. Интеграционные тесты проверяют взаимодействие нескольких модулей или с внешними системами, они медленнее. Эти тесты автоматизированы и запускаются при каждом коммите, чтобы быстро выявить регрессии. Их комбинация по принципу пирамиды тестов обеспечивает стабильность приложения.

Длинный ответ

В процессе непрерывной интеграции (CI) автоматизированное тестирование является ключевой практикой для быстрого обнаружения ошибок. Два фундаментальных типа тестов, которые обычно выполняются на ранних этапах CI-пайплайна, — это модульные (unit) и интеграционные (integration) тесты.

Модульные тесты (Unit Tests)

Модульные тесты проверяют самую маленькую тестируемую единицу кода — обычно функцию, метод или класс — в полной изоляции от других частей системы. Их цель — убедиться, что каждая отдельная часть логики работает корректно согласно спецификации. Для изоляции часто используются моки (mocks) или заглушки (stubs), которые заменяют внешние зависимости, такие как базы данных или API.

// Пример модульного теста на JavaScript (Jest)
function sum(a, b) {
  return a + b;
}

test('adds 1 + 2 to equal 3', () => {
  expect(sum(1, 2)).toBe(3);
});

Такие тесты выполняются очень быстро, их тысячи, и они формируют основание пирамиды тестирования.

Интеграционные тесты (Integration Tests)

Интеграционные тесты проверяют, как несколько модулей или компонентов взаимодействуют между собой. Они могут тестировать интеграцию с базами данных, внешними сервисами, файловыми системами или API. Эти тесты медленнее, так как требуют поднятия реальных или приближенных к реальным зависимостей.

# Пример интеграционного теста на Python (pytest), проверяющего работу с БД
import pytest
from myapp import db, User

@pytest.fixture
def test_db():
    # Настройка тестовой базы данных
    db.create_all()
    yield db
    db.drop_all()

def test_user_creation(test_db):
    user = User(name='Alice')
    test_db.session.add(user)
    test_db.session.commit()
    # Проверяем, что пользователь действительно сохранён в БД
    assert User.query.filter_by(name='Alice').first() is not None

Интеграционные тесты выявляют проблемы на стыках модулей, которые unit-тесты не могут обнаружить.

Роль в CI/CD

В CI-пайплайне эти тесты запускаются автоматически при каждом пуше в репозиторий. Обычно сначала выполняются быстрые unit-тесты, и если они проходят, затем запускаются более тяжёлые интеграционные тесты. Это позволяет быстро получить обратную связь: если unit-тесты падают, разработчик сразу видит проблему в логике; если падают интеграционные — проблема, скорее всего, в конфигурации или взаимодействии компонентов.

Вывод: Модульные тесты необходимы для проверки корректности отдельных частей кода и обеспечивают быструю обратную связь, а интеграционные тесты критически важны для проверки совместной работы компонентов и внешних сервисов. Их комбинированное использование в CI — основа стабильной и предсказуемой разработки.

Уровень

  • Рейтинг:

    4

  • Сложность:

    3

Навыки

  • CI/CD

    CI/CD

  • Testing

Ключевые слова

#CI

#unit tests

#integration tests

#test pyramid

#automated testing

Подпишись на Python Developer в телеграм