Что такое Smoke и Sanity тестирование и какая между ними разница?qa-17

Smoke Testing

Определение: Поверхностная проверка стабильности сборки перед началом глубокого тестирования.

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

  • Проверка критичной функциональности
  • Быстрое выполнение (15-30 минут)
  • Охватывает основные сценарии
  • Выполняется после каждой новой сборки

Пример сценария:

Feature: Smoke Test для интернет-магазина
  Scenario: Основной поток покупки
    Given Пользователь открыл главную страницу
    When Добавляет товар в корзину
    And Переходит к оформлению заказа
    Then Система позволяет ввести платежные данные

Когда выполняется:

  • После деплоя новой версии
  • Перед регрессионным тестированием
  • При интеграции крупных модулей

Sanity Testing

Определение: Узконаправленная проверка исправленных дефектов или конкретной функциональности.

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

  • Глубже, чем smoke, но уже по охвату
  • Фокусируется на конкретных изменениях
  • Проверяет рациональность сборки
  • Длится 1-2 часа

Пример сценария:

def test_fixed_login_sanity():
    # Проверка только что исправленного бага с логином
    result = login("user@test.com", "new_password!")
    assert result.status == SUCCESS
    assert result.session.is_valid()

Когда выполняется:

  • После исправления критичных багов
  • Перед выкаткой хотфиксов
  • Для проверки конкретного модуля

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

Критерий Smoke Testing Sanity Testing
Цель Проверить стабильность сборки Убедиться в работоспособности конкретных изменений
Глубина Поверхностная Умеренная
Объем Широкий (основные функции) Узкий (конкретные изменения)
Время 15-30 минут 1-2 часа
Частота После каждой сборки По необходимости
Автоматизация Часто автоматизировано Чаще ручное

Практические примеры

Smoke тест для API:

// Проверка доступности основных эндпоинтов
describe('API Smoke Test', () => {
  ['/users', '/products', '/orders'].forEach(endpoint => {
    it(`GET ${endpoint} returns 200`, async () => {
      const res = await request(app).get(endpoint);
      expect(res.statusCode).toBe(200);
    });
  });
});

Sanity тест для исправления:

// Проверка только что исправленного бага с кодировкой
@Test
public void testFixedEncodingSanity() {
    String response = api.getProductDescription(123);
    assertFalse(response.contains("’")); // Проверка на отсутствие артефактов кодировки
}

Как выбрать подход?

  1. Используйте Smoke когда нужно:

    • Проверить готовность сборки к тестированию
    • Убедиться, что основные функции работают
    • Быстро оценить стабильность после деплоя
  2. Применяйте Sanity когда нужно:

    • Подтвердить конкретное исправление
    • Проверить отдельный модуль перед демо
    • Убедиться в рациональности продолжения тестирования

Резюмируем

  1. Smoke — это "быстрая проверка жизнеспособности":

    • Ответ на вопрос: "Можно ли начинать тестирование?"
    • Широкий охват, минимальная глубина
  2. Sanity — это "точечная проверка разумности":

    • Ответ на вопрос: "Работают ли конкретные изменения как ожидалось?"
    • Узкий фокус, умеренная глубина
  3. Оптимальная стратегия:

    • Smoke после каждой сборки
    • Sanity для проверки критичных исправлений
    • Оба метода часто выполняются вручную, но лучше автоматизировать