Логотип YeaHub

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

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

Тренажёр

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

Обучение

Навыки

Задачи

Войти

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

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

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Python: end, unit, integration, test

Какие инструменты и подходы для тестирования backend-приложений вы используете?

Вопрос проверяет, насколько кандидат системно подходит к тестированию backend-приложений и какие конкретные инструменты и уровни тестирования он применяет на практике.

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

Обычно для тестирования backend-приложений используют несколько уровней тестов: модульные, интеграционные, end-to-end и нагрузочные. В Python для этого часто применяют pytest, вместе с requests/httpx для HTTP-запросов и pytest-asyncio для асинхронного кода. Для работы с базой данных используют временные тестовые БД или in-memory решения и фикстуры, очищающие данные между тестами. Для API часто применяют тестовые клиенты фреймворков (например, TestClient в FastAPI или APIClient в Django REST Framework). Наконец, важно интегрировать тесты в CI/CD, чтобы они автоматически запускались при каждом изменении кода.

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

Тестирование backend-приложений — это не один инструмент, а набор подходов и уровней проверки системы.

1. Уровни тестирования backend

  1. Модульные тесты
    Определение:
    Модульный тест — это тест, который проверяет маленький, изолированный кусок кода (функцию, метод, класс) без зависимостей от внешних сервисов.

    • Проверяют бизнес-логику без обращения к БД, сети и т.п.

    • Быстрые, их удобно запускать часто (при каждом коммите).

    • Часто сопровождаются моками (mock, pytest-mock) для подмены внешних вызовов.

  2. Интеграционные тесты
    Определение:
    Интеграционный тест — это тест, который проверяет, как несколько компонентов работают вместе (например, сервис + база данных + кэш).

    • Проверяют сценарии, близкие к реальному использованию.

    • Часто поднимают тестовую БД (Postgres, MySQL) через Docker.

    • Используют реальные миграции и реальные HTTP-запросы к приложению.

  3. End-to-end (E2E) тесты API

    • Проверяют работу приложения «от запроса до ответа».

    • Делают реальные HTTP-запросы к запущенному сервису и проверяют JSON-ответы.

    • Часто используются в микросервисной архитектуре для проверки критичных API.

  4. Нагрузочные и performance-тесты

    • Оценивают, как сервис ведёт себя под нагрузкой.

    • Используют инструменты типа locust, k6, JMeter.

2. Основные инструменты в Python

  1. pytest

    • Де-факто стандарт в Python для тестирования.

    • Поддерживает:

      • фикстуры для настройки окружения;

      • параметризацию тестов;

      • плагины (pytest-django, pytest-asyncio, pytest-cov).

    Python

    import pytest
    from app.services import calculate_discount
    
    def test_calculate_discount_basic():
        result = calculate_discount(price=100, percent=10)
        assert result == 90
    
  2. Тестовые клиенты фреймворков

    • FastAPI: TestClient из fastapi.testclient.

    • Django/DRF: APIClient из rest_framework.test.

    • aiohttp: встроенный тестовый клиент.

    Python

    from fastapi.testclient import TestClient
    from app.main import app
    
    client = TestClient(app)
    
    def test_read_users():
        response = client.get("/users")
        assert response.status_code == 200
        assert isinstance(response.json(), list)
    
  3. Работа с БД в тестах

    • Использование отдельной тестовой базы (часто через Docker).

    • Откат миграций и очистка данных между тестами.

    • Фикстуры, создающие тестовые данные.

    Python

    @pytest.fixture
    def user_in_db(db_session):
        # создаём пользователя в тестовой БД
        ...
        return user
    
  4. Моки и фейки

    • Мокают HTTP-запросы (responses, pytest-httpx).

    • Мокают внешние очереди (RabbitMQ, Kafka) и кэши (Redis).

    • Это ускоряет тесты и делает их детерминированными.

3. Автоматизация и окружение

  1. CI/CD

    • Прогон всех тестов в GitHub Actions, GitLab CI, Jenkins и т.п.

    • Генерация отчётов о покрытии (coverage, pytest-cov).

  2. Docker и docker-compose

    • Поднимают окружение для интеграционных тестов: app + DB + Redis.

    • Обеспечивают одинаковое окружение локально и в CI.

  3. Структура проекта

    • Принято хранить тесты в каталоге tests/.

    • Разделение по доменам: tests/test_users, tests/test_orders.

4. Вывод

Для тестирования backend-приложений важно использовать комбинацию разных уровней тестов: от модульных до интеграционных и нагрузочных, а также интегрировать их в CI/CD. В Python чаще всего опираются на pytest, тестовые клиенты фреймворков и отдельное тестовое окружение (БД, кэш, очереди) в Docker.

  • Аватар

    Python Guru

    Sergey Filichkin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.

Уровень

  • Рейтинг:

    5

  • Сложность:

    5

Навыки

  • Python

    Python

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

#end

#unit

#integration

#test

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

  • Аватар

    Python Guru

    Sergey Filichkin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.