Что такое sanity-тестирование?

Sanity-тестирование (тестирование «на вменяемость») — узкая, сфокусированная проверка после конкретного изменения — обычно исправления бага или незначительного обновления — чтобы убедиться, что изменение работает корректно и не сломало очевидным образом связанную функциональность. В отличие от smoke, который широко проверяет стабильность всей сборки, sanity фокусируется на конкретной области.

Разница: Smoke-тестирование — врач проверяет жизненные показатели (пульс, давление, температура) для общей оценки здоровья. Sanity-тестирование — врач проверяет, работает ли конкретное лекарство, прописанное вчера.

После исправления бага в расчёте оплаты sanity-тестирование проверяет:

  1. Конкретный баг действительно исправлен
  2. Близкая функциональность по-прежнему работает
  3. Область вокруг исправления стабильна

Sanity НЕ проверяет всё приложение. Не смотрит на вход, поиск или несвязанные функции.

Полное сравнение: Smoke vs Sanity vs Регрессия

ХарактеристикаSmokeSanityРегрессия
ЦельСборка стабильна?Конкретный fix работает?Что-то ещё сломалось?
МасштабШирокий, поверхностныйУзкий, глубокийШирокий, глубокий
КогдаПосле каждой сборкиПосле конкретного fix/измененияПеред релизом
Длительность10-15 минут15-30 минутЧасы-дни
АвтоматизацияОбычно автоматизированныйОбычно ручнойМикс
КтоQA или CI/CDQA-инженерQA-команда
АналогияОбщий осмотрПроверка действия лекарстваПолное обследование

Когда использовать sanity-тестирование

После исправления бага

Баг-репорт: «Расчёт скидки показывает 12% вместо 10% для заказов свыше $100.» Разработчик исправляет. Перед полной регрессией:

  1. Проверить точный сценарий из баг-репорта — теперь 10%
  2. Протестировать несколько связанных сценариев скидок
  3. Убедиться, что расчёт итоговой суммы не сломался

После незначительного обновления

Запрос: «Добавить кнопку “Очистить всё” в центр уведомлений.»

  1. Кнопка появляется
  2. Клик очищает все уведомления
  3. Индивидуальное закрытие уведомлений работает
  4. Счётчик обновляется корректно

После изменения конфигурации

DevOps увеличивает пул подключений к БД с 10 до 50:

  1. Приложение подключается к БД
  2. Несколько ресурсоёмких операций работают
  3. Нет ошибок таймаута

Когда НЕ использовать

  • Как замену регрессии. Это быстрая проверка, не всесторонняя верификация.
  • Для крупных функциональных релизов. Значительные изменения требуют системного и регрессионного тестирования.
  • Когда масштаб изменения неясен. Если не знаете, на что влияет — тестируйте шире.

Как выполнять sanity-тестирование

  1. Прочитать описание изменения — Что изменено и почему?
  2. Воспроизвести оригинальную проблему (при bug fix) — Подтвердить исправление
  3. Протестировать связанную функциональность — 3-5 близких сценариев
  4. Проверить очевидные побочные эффекты — UI корректный? Соседние функции работают?
  5. Быстрое решение — Продолжать тестирование или вернуть разработчику?

Мышление sanity-тестирования

Требуется опытное суждение. В отличие от скриптованных тестов, sanity полагается на знание тестировщика:

  • Определить «связанную функциональность» для данного изменения
  • Распознать, когда что-то «выглядит неправильно» без формального тест-кейса
  • Знать, когда остановиться, а когда эскалировать

Упражнение: Определите — Smoke, Sanity или Регрессия

Для каждого сценария определите подходящий тип тестирования:

  1. Новая сборка развёрнута в QA-окружение утром
  2. Разработчик исправил баг, где «Экспорт в CSV» скачивал пустой файл
  3. Команда готовит релиз в продакшен на следующей неделе
  4. DevOps мигрировали приложение на новый сервер
  5. Разработчик изменил алгоритм сортировки для результатов поиска
  6. Страницу входа перерисовали с новым брендингом без изменения функциональности
  7. Применён критический патч безопасности к модулю аутентификации
  8. Ночная сборка завершилась в 3 часа ночи
ПодсказкаСпросите: Я проверяю, работает ли вся сборка (smoke), работает ли конкретный fix (sanity), или всё по-прежнему работает перед релизом (регрессия)?
Решение
  1. Smoke — Новая сборка в QA. Проверить стабильность перед началом тестирования.

  2. Sanity — Конкретный баг исправлен. Проверить fix, протестировать связанные сценарии экспорта, убедиться в других форматах.

  3. Регрессия — Предрелизное тестирование требует всесторонней проверки.

  4. Smoke — Миграция сервера — инфраструктурное изменение. Проверить, что приложение работает на новом сервере.

  5. Sanity — Изменён конкретный алгоритм. Проверить точность результатов, протестировать различные запросы.

  6. Sanity + Направленная регрессия — Редизайн UI без функциональных изменений. Sanity — вход работает с новым дизайном. Затем направленная регрессия потока входа.

  7. Sanity, затем Регрессия — Патчи безопасности — высокий риск. Сначала sanity аутентификации. Затем полная регрессия модуля.

  8. Smoke — Ночные сборки должны запускать автоматические smoke-тесты.

Рабочий процесс sanity-тестирования

graph TD CHANGE[Изменение развёрнуто] --> SMOKE{Smoke-тест
прошёл?} SMOKE -->|Нет| REJECT[Отклонить сборку] SMOKE -->|Да| SANITY[Sanity-тестирование
Проверить изменение] SANITY -->|Fix работает| REGRESSION[Перейти к регрессии] SANITY -->|Fix не работает| RETURN[Вернуть разработчику] SANITY -->|Новые проблемы| TRIAGE[Оценить:
блокировать или продолжить?]

Профессиональные советы

Совет 1: Sanity — про уверенность, не покрытие. Вы не ищете каждую возможную проблему. Вы строите достаточную уверенность, что fix разумен.

Совет 2: Документируйте результаты. Хоть sanity и неформальный, документируйте, что проверили. Когда баг всплывёт в продакшене — нужно знать, что было проверено.

Совет 3: Ограничивайте время. 15-30 минут максимум. Если не можете проверить за это время — fix сложнее, чем ожидалось.

Ключевые выводы

  • Sanity — узкая, сфокусированная проверка конкретного изменения или bug fix
  • Отличается от smoke (широкая стабильность) и регрессии (всесторонняя проверка)
  • Выполняется вручную опытными QA с использованием суждения и знания системы
  • Уместно после bug fix, незначительных обновлений и изменений конфигурации
  • Не заменяет регрессию — быстрая проверка перед более глубоким тестированием
  • Ограничивать 15-30 минутами и документировать результаты