← Назад к вопросам

В чем разница между Smoke, Regress и Sanity тестированием?

1.2 Junior🔥 251 комментариев
#Теория тестирования

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI6 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Различие между Smoke, Regress и Sanity тестированием

В автоматизированном тестировании четкое разделение видов проверок критически важно для эффективности процесса. Smoke, Regress и Sanity тестирование — это три фундаментальных типа проверок, которые часто путают, но они служат разным целям в жизненном цикле разработки ПО.

Smoke тестирование (Дымовое тестирование)

Цель: Проверить базовую работоспособность сборки (build) и выявить критические дефекты, которые блокируют дальнейшее, более детальное тестирование. Это "здоров ли билд?" проверка.

Когда выполняется: Сразу после получения новой сборки от разработчиков, перед началом любых других видов тестирования. Глубина: Поверхностная, проверка основных функций и сквозных сценариев. Объем: Небольшой набор кейсов, покрывающих ключевые модули системы (например: запуск приложения, авторизация, создание сущности, сохранение).

# Пример концепции набора Smoke-тестов для веб-приложения
class TestSmokeSuite:
    def test_application_launch(self):
        # Проверка, что приложение открывается
        driver.get(BASE_URL)
        assert "Главная" in driver.title

    def test_user_login(self):
        # Проверка базовой авторизации
        login_page.enter_credentials(VALID_USER, VALID_PASS)
        assert dashboard_page.is_user_menu_displayed()

    def test_core_navigation(self):
        # Проверка доступности основных разделов
        for menu_item in ["Профиль", "Отчеты", "Настройки"]:
            assert main_menu.is_link_present(menu_item)

Аналогия: Как включить автомобиль, проверить, завелся ли двигатель, горят ли фары, прежде чем выезжать на дорогу.

Regress тестирование (Регрессионное тестирование)

Цель: Убедиться, что внесенные в код изменения (новый функционал, исправление багов) не сломали существующую, ранее работающую функциональность. Это защита от регрессии.

Когда выполняется: После внесения изменений в код (после каждого коммита, пул-реквеста, перед релизом). Часто автоматизировано на 90-100%. Глубина: Глубокая и всесторонняя. Объем: Большой, может включать все или значительную часть регрессионных тест-кейсов. Часто выполняется на Dev/Staging окружениях.

Ключевые стратегии:

  • Полный регресс: Запуск всех тестов. Требует много времени.
  • Частичный регресс: Запуск только тестов, связанных с измененными модулями, и критического набора.
  • Автоматизированный регресс: Основной вид, выполняемый CI/CD пайплайном.
// Пример интеграции регресса в CI пайплайн (концепция Jenkinsfile)
pipeline {
    agent any
    stages {
        stage('Build & Deploy to Staging') {
            steps { sh 'mvn clean deploy' }
        }
        stage('Run Regression Suite') {
            steps {
                // Запуск полного набора автоматизированных UI и API тестов
                sh 'mvn test -Dtest="FullRegressionSuite"'
                sh 'pytest api_tests/ --alluredir=./allure-report'
            }
        }
        stage('Analyze Results') {
            steps { allure includeProperties: false, jdk: '', results: [[path: 'allure-report']] }
        }
    }
}

Sanity тестирование (Санитарное/здравомыслящее тестирование)

Цель: Быстрая, целенаправленная проверка конкретного функционала или багфикса после сборки, чтобы убедиться, что изменения работают как задумано, и нет очевидных побочных эффектов. Это "работает ли исправление/фича?" проверка.

Когда выполняется: После smoke-тестов, когда нужно проверить конкретный участок кода, а не всю систему. Часто выполняется вручную, но может быть и автоматизировано для часто меняющихся модулей. Глубина: Узкая и сфокусированная. Объем: Очень небольшой, только на затронутый изменениями функционал.

Пример: Разработчик исправил баг "Нельзя добавить товар в корзину со страницы поиска". Sanity-чек: Тестировщик выполняет именно этот сценарий, чтобы убедиться, что баг исправлен, и попутно смотрит, не сломалась ли добавление в корзину с главной страницы (близкий функционал).

Сравнительная таблица

КритерийSmokeRegressSanity
Основная цельПроверить стабильность сборкиПроверить отсутствие регрессииПроверить корректность конкретных изменений
Объем тестовМинимальный (<10%)Максимальный (60-100%)Очень малый, точечный
Когда запускаетсяПервым после новой сборкиПосле изменений кода, перед релизомПосле smoke, для проверки фикса/фичи
ГлубинаПоверхностная, сквознаяГлубокая, всесторонняяУзкая, сфокусированная
АвтоматизацияЧасто автоматизированВ основном автоматизированЧаще ручное, но стремится к автоматизации
Ключевой вопрос"Система запускается?""Ничего не сломалось?""Исправление/фича работает как надо?"

Заключение для QA Automation инженера

Понимание этих различий напрямую влияет на архитектуру автотестов:

  1. Smoke-сценарии — это быстрые, стабильные health-check тесты, которые должны быть в начале пайплайна CI/CD. Их падение означает стоп для всего пайплайна.
  2. Регрессионный набор — это основная батарея автотестов (Unit, API, E2E), разделенная по приоритетам (P0, P1) и модулям. Их можно запускать селективно (частичный регресс) или полностью (ночной прогон).
  3. Sanity-проверки для часто меняющихся модулей стоит выделять в отдельные тестовые наборы, которые можно запускать точечно по триггеру (например, мерж в определенную ветку). Это оптимизирует время обратной связи.

Правильное применение всех трех видов делает процесс тестирования робастным, эффективным и позволяет быстро локализовать проблемы, минимизируя время на анализ.