Регрессионное, smoke и sanity

Три практичных вида проверок, которые экономят командам нервы при каждом релизе.

Регрессионное тестирование проверяет, что новые изменения не сломали уже работавшее; smoke — что сборка вообще живая; sanity — что конкретная правка действительно сработала.

Регрессия: «не сломали ли старое»

Самый коварный класс багов — регрессии: вы чините одно, а ломаете соседнее. Регрессионное тестирование — это повторный прогон существующих тестов после любого изменения. Именно регрессию автоматизируют в первую очередь: вручную перепроверять всю систему на каждый коммит невозможно.

def slugify(text):
    """Превращает заголовок в URL-slug."""
    return text.strip().lower().replace(" ", "-")


# Регрессионный набор: эти проверки гоняем ПОСЛЕ КАЖДОГО изменения slugify
regression = [
    ("Hello World", "hello-world"),
    ("  Trim Me  ", "trim-me"),
    ("ALL CAPS",    "all-caps"),
]
for text, expected in regression:
    assert slugify(text) == expected

print(f"Регрессия пройдена: {len(regression)} старых сценария всё ещё работают")

Вывод:

Регрессия пройдена: 3 старых сценария всё ещё работают

Если завтра кто-то «улучшит» slugify и забудет про strip(), этот набор тут же покраснеет — регрессия поймана.

Smoke: «вообще запускается?»

Smoke-тест (от «дым пошёл — не загорелось») — это короткий набор самых базовых проверок: приложение стартует, главная страница открывается, логин работает. Его гоняют сразу после сборки. Если smoke красный — нет смысла запускать остальные тесты, сборка нерабочая.

Sanity: «починили ли именно это?»

Sanity-проверка — узкая и быстрая: после конкретного фикса убеждаемся, что именно эта функция теперь ведёт себя правильно, не прогоняя весь набор. Это «проверка здравомыслия» перед более глубоким тестированием.

ВидКогдаГлубина
SmokeСразу после сборкиШирокая, но поверхностная
SanityПосле конкретного фиксаУзкая, но точечная
РегрессияПосле любого измененияПолный прогон старых тестов

Итог

  • Регрессия защищает от поломки уже работавшего — её автоматизируют в первую очередь.
  • Smoke — быстрая широкая проверка «сборка вообще живая».
  • Sanity — узкая проверка, что конкретный фикс сработал.
Проверьте себя
1. Что такое регрессионное тестирование?
AПроверка совсем новой функции
BПроверка, что новые изменения не сломали уже работавшее
CПроверка скорости под нагрузкой
DПроверка орфографии
2. Когда обычно запускают smoke-тест?
AВ самом конце релиза
BСразу после сборки — проверить, что приложение вообще живое
CРаз в год
DТолько вручную перед сдачей заказчику
3. Чем sanity отличается от smoke?
ASanity глубже и шире, чем smoke
BSanity — узкая точечная проверка конкретного фикса, smoke — широкая поверхностная
CЭто одно и то же
DSanity запускают раньше сборки
Поддержать проект