Когда применяется smoke-тестирование (Sanity Check)?

«Когда применяется smoke-тестирование (Sanity Check)?» — вопрос из категории Основы тестирования, который задают на 10% собеседований QA Тестировщик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Smoke-тестирование (также называемое Build Verification Test или Sanity Check) применяется для быстрой оценки стабильности новой сборки (build) или деплоя перед запуском более глубокого тестирования.

Основные сценарии использования:

  1. После сборки или деплоя — чтобы убедиться, что ключевые функции работают и нет критических ошибок, блокирующих дальнейшее тестирование.
  2. Перед запуском регрессионных тестов — если smoke-тесты падают, регрессия не запускается, экономя время.
  3. После обновления окружения или критических зависимостей — проверка, что система "жива".

Характеристики smoke-тестов:

  • Быстрые (минуты, а не часы).
  • Поверхностные — проверяют только основные, критически важные сценарии (например, запуск приложения, авторизация, загрузка главной страницы).
  • Стабильные — должны давать предсказуемый результат.
  • Часто автоматизированы и интегрированы в CI/CD пайплайн.

Пример (API smoke-тест на Python):

import requests

def test_smoke_critical_paths():
    base_url = "https://api.example.com/v1"

    # 1. Проверка доступности сервиса
    health_response = requests.get(f"{base_url}/health")
    assert health_response.status_code == 200

    # 2. Проверка основного функционала: авторизация
    auth_response = requests.post(
        f"{base_url}/auth/login",
        json={"username": "test_user", "password": "test_pass"}
    )
    assert auth_response.status_code == 200
    token = auth_response.json()["token"]

    # 3. Проверка доступа к защищенному эндпоинту с токеном
    headers = {"Authorization": f"Bearer {token}"}
    profile_response = requests.get(f"{base_url}/profile", headers=headers)
    assert profile_response.status_code == 200

    print("Smoke tests passed. Build is stable for further testing.")

Цель: быстро ответить на вопрос "Можно ли начинать серьезное тестирование этой сборки?".