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

Что такое smoke-тестирование и sanity-тестирование? В чём разница?

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

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

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

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

Smoke-тестирование и Sanity-тестирование: основные понятия и различия

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

Smoke-тестирование (дымовое тестирование) — это минимальный набор тестов, выполняемый после каждого нового построения (build) программного продукта для проверки его базовой работоспособности. Основная цель — убедиться, что ключевые функции системы работают и приложение "не сгорает" при запуске.

Ключевые характеристики Smoke-тестирования:

  • Выполняется на свежем build/deploy: Проверяет, что новый релиз не содержит катастрофических ошибок.
  • Охватывает основные модули: Например, запуск приложения, авторизация, доступ к главным страницам.
  • Высокая скорость: Тесты должны быть быстрыми, чтобы не блокировать процесс разработки.
  • Низкий уровень детализации: Не проверяет глубокую логику, только "работает/не работает".
  • Часто автоматизировано: В современных CI/CD процессах smoke-тесты запускаются автоматически после сборки.

Пример smoke-теста для веб-приложения:

import pytest
from selenium import webdriver

def test_smoke_main_functionality():
    driver = webdriver.Chrome()
    driver.get("https://app.example.com")
    
    # Проверка, что приложение загрузилось
    assert "Example App" in driver.title
    
    # Проверка доступности логина
    login_button = driver.find_element_by_id("login-btn")
    assert login_button.is_enabled()
    
    # Проверка основных навигационных элементов
    nav_menu = driver.find_element_by_class_name("main-nav")
    assert nav_menu.is_displayed()
    
    driver.quit()

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

Sanity-тестирование (тестирование здравомыслия) — это узконаправленная проверка после внесения конкретных изменений в код (например, исправления бага или добавления новой функции). Цель — убедиться, что изменения работают корректно и не нарушили существующую функциональность в конкретной области.

Ключевые характеристики Sanity-тестирования:

  • Фокусируется на конкретных изменениях: Проверяет только модули, связанные с последними модификациями.
  • Выполняется после локальных изменений: Не требует полного нового build, может тестировать отдельный компонент.
  • Глубже smoke-тестов: Проверяет логику и корректность реализации изменений.
  • Часто проводится перед deep-тестированием: Служит фильтром для более детальных тестов.
  • Может быть ручным или автоматизированным: Часто выполняется разработчиком или тестировщиком вручную для быстрой проверки.

Пример sanity-теста для проверки исправления бага в калькуляторе:

// sanity-тест для проверки исправления бага в функции умножения
describe('Multiplication bug fix sanity check', () => {
    it('should correctly multiply positive numbers', () => {
        const result = calculate.multiply(5, 3);
        expect(result).toBe(15);
    });
    
    it('should handle multiplication by zero', () => {
        const result = calculate.multiply(7, 0);
        expect(result).toBe(0);
    });
    
    // Проверка, что исправление не сломалось соседние функции
    it('addition still works correctly', () => {
        const result = calculate.add(2, 2);
        expect(result).toBe(4);
    });
});

Основные различия между Smoke и Sanity тестированием

КритерийSmoke-тестированиеSanity-тестирование
ОбъемПроверяет всю систему на базовую работоспособностьПроверяет узкую область после изменений
Когда выполняетсяПосле каждого нового построения (build)После конкретных изменений или исправлений
Глубина проверкиПоверхностная ("работает/не работает")Более глубокая, проверяет корректность логики
Основная цельУбедиться, что build не сломанУбедиться, что изменения работают правильно
Аналог в строительствеПроверка фундамента домаПроверка новой установленной двери
ДлительностьОчень быстрое (минуты)Быстрое, но обычно дольше smoke-тестов

Практическое применение в жизненном цикле разработки

  1. После сборки нового билда:

    • Автоматически запускаются smoke-тесты.
    • Если они проходят успешно, build считается потенциально стабильным.
  2. После исправления критического бага:

    • Разработчик выполняет sanity-тесты на исправленном модуле.
    • Затем проводится более глубокое тестирование измененной области.
  3. В процессе Continuous Integration:

    • Smoke-тесты выступают как первый защитный барьер.
    • Sanity-тесты используются для регрессионного тестирования после изменений.

Вывод: Smoke-тестирование — это "здоровьеcheck" всей системы, а sanity-тестирование — "здоровьеcheck" конкретного органа после операции. Оба типа тестов критически важны для эффективного процесса разработки, поскольку позволяют быстро выявлять серьезные проблемы на ранних этапах, экономия время и ресурсы на более детальном тестировании. В современных DevOps практиках они часто интегрируются в автоматизированные pipeline, обеспечивая непрерывную проверку качества продукта.

Что такое smoke-тестирование и sanity-тестирование? В чём разница? | PrepBro