Ответ
Пирамида тестирования — это концепция, которая описывает оптимальное соотношение различных видов тестов в проекте для достижения высокой скорости обратной связи, надежности и низкой стоимости поддержки.
Она состоит из трех основных уровней:
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
Основной принцип: Чем выше уровень теста в пирамиде, тем он медленнее, дороже и сложнее, поэтому таких тестов должно быть меньше.