Что такое пирамида тестирования и из каких уровней она состоит

Ответ

Пирамида тестирования — это концепция, которая описывает оптимальное соотношение различных видов тестов в проекте для достижения высокой скорости обратной связи, надежности и низкой стоимости поддержки.

Она состоит из трех основных уровней:

1. Unit-тесты (Модульные тесты)

Находятся в основании пирамиды, их должно быть больше всего.

  • Что проверяют: Изолированные компоненты системы — функции, методы или классы.
  • Характеристики: Очень быстрые, дешевые в написании и поддержке, не зависят от внешних систем (БД, API).
# test_calculator.py
def add(a, b):
    return a + b

def test_add():
    assert add(2, 3) == 5
    assert add(-1, 1) == 0

2. Интеграционные тесты

Средний уровень пирамиды. Их меньше, чем unit-тестов.

  • Что проверяют: Взаимодействие нескольких компонентов системы. Например, связку «код приложения → база данных» или «сервис А → сервис Б».
  • Характеристики: Медленнее и сложнее в настройке, чем unit-тесты, так как требуют окружения (например, тестовой БД).
# test_user_repository.py
# Используется фикстура db_session для работы с тестовой БД
def test_create_user(db_session):
    repo = UserRepository(db_session)
    user = repo.create(name="test_user", email="test@example.com")
    assert user.id is not None
    assert repo.get_by_email("test@example.com") is not None

3. E2E-тесты (End-to-End или UI-тесты)

Вершина пирамиды, их должно быть меньше всего.

  • Что проверяют: Полные пользовательские сценарии от начала до конца через графический интерфейс (или API), имитируя действия реального пользователя.
  • Характеристики: Самые медленные, дорогие в поддержке и хрупкие (часто ломаются из-за изменений в UI).
# test_login_flow.py (псевдокод с Selenium)
from selenium.webdriver.common.by import By

def test_successful_login(driver):
    driver.get("https://example.com/login")
    driver.find_element(By.ID, "username").send_keys("user")
    driver.find_element(By.ID, "password").send_keys("pass")
    driver.find_element(By.ID, "submit").click()
    assert "/dashboard" in driver.current_url

Основной принцип: Чем выше уровень теста в пирамиде, тем он медленнее, дороже и сложнее, поэтому таких тестов должно быть меньше.