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

Ответ

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.")

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

Ответ 18+ 🔞

Да ты послушай, что за мода пошла — дымом всё проверять! Ну, smoke-тестирование, блядь. А по-нашему, по-простому, это как поднести зажигалку к новой сборке: если не взорвалось сразу — уже хорошо, можно дальше смотреть. По-умному это, конечно, Build Verification Test или Sanity Check, но суть-то одна: проверить, не накрылся ли наш свеженький билд медным тазом ещё до того, как мы на него время тратить начнём.

И где этот дым пускать будем?

  1. Только что собрали или залили на сервак — тут же, сука, дымим. Надо понять, а не сломалось ли самое основное, без чего дальше вообще нихуя не протестируешь.
  2. *Перед тем как запускать эти ебчие долгие регрессы** — а зачем, если дым-тесты уже сдохли? Сэкономишь кучу времени, не гоняя попусту кучу проверок.
  3. Поменяли что-то важное в окружении или библиотеках — опять дымим. Живо ли оно вообще, это наше творение?

А какие они, эти дымовые проверки?

  • Быстрые, блядь! Не часы, а минуты. Пока кофе нальёшь — уже должны отработать.
  • Поверхностные, ёпта. Не лезем в дебри, а щупаем только самое жизненно важное: запустилось ли, залогиниться можно, главная страница открывается. Хитрожопые сценарии — не сюда.
  • Стабильные, ёб твою мать. Не должны сами по себе хлопаться из-за ерунды.
  • Часто на автомате, и встроены прямо в конвейер сборки, чтобы сами дымили при каждом чихе.

Вот, смотри, как это примерно выглядит в коде (не трогаю, как есть):

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.")

А смысл-то всего этого в чём? Да просто дать быстрый ответ на вопрос: "Эта сборка, блядь, вообще пригодна для дальнейшего тестирования, или её сразу в помойку нести?". Если дым пошёл — всё, можно глубоко нырять. Если нет — ну, извини, чувак, иди фикси, тут даже смотреть не на что.