Ответ
Время тестирования оптимизируют кейсы, которые максимизируют покрытие при минимальных затратах на выполнение и поддержку.
1. Параметризованные тесты (Data-Driven Testing)
Почему экономят: Один тестовый сценарий проверяет множество входных данных. Экономия на написании и поддержке дублирующего кода.
import pytest
# Один тест проверяет 5 разных пар вход/выход
@pytest.mark.parametrize("input_a, input_b, expected", [
(1, 2, 3),
(0, 0, 0),
(-1, 1, 0),
(100, 200, 300),
(1.5, 2.5, 4.0)
])
def test_addition(input_a, input_b, expected):
assert input_a + input_b == expected
2. Тесты на граничные значения и классы эквивалентности
Почему экономят: Вместо перебора всех возможных значений проверяются только критические точки (минимум, максимум, по обе стороны границы), что выявляет большинство ошибок.
3. Тесты с использованием заглушек (Mocks, Stubs)
Почему экономят: Позволяют тестировать модуль изолированно, не дожидаясь готовности или не тратя время на настройку внешних зависимостей (база данных, API, файловая система).
from unittest.mock import Mock
def test_payment_processing():
# Создаем мок платежного шлюза, который всегда возвращает "success"
mock_gateway = Mock()
mock_gateway.charge.return_value = {"status": "success"}
processor = PaymentProcessor(mock_gateway)
result = processor.process_order(100)
assert result is True
# Проверяем, что мок был вызван с правильными аргументами
mock_gateway.charge.assert_called_once_with(amount=100)
4. Автоматизированные регрессионные тесты
Почему экономят: Автоматически проверяют, что исправление бага или новая функциональность не сломали существующий рабочий функционал. Избегают длительного ручного прогона после каждого изменения.
5. Дымовые (Smoke) и санитарные (Sanity) тесты
Почему экономят: Быстрая проверка «работает ли вообще» перед запуском полного тестового набора. Отсекают нерабочие сборки на раннем этапе.
Вывод: Максимальная эффективность достигается комбинацией подходов — автоматизация рутинных проверок, изоляция тестов и фокус на областях с высоким риском.