Какой приоритет у smoke-тестирования и почему?

Ответ

Smoke-тестирование имеет наивысший приоритет среди всех видов проверок после сборки (build).

Причина: Его цель — быстро определить, является ли сборка достаточно стабильной для запуска более затратных по времени тестов (регрессионных, интеграционных). Если smoke-тест падает, дальнейшее тестирование приостанавливается до исправления критических дефектов.

Критерии smoke-теста:

  • Проверяет критический путь приложения (например: запуск, авторизация, открытие главной страницы).
  • Выполняется быстро (несколько минут).
  • Неглубокий — проверяет наличие, а не корректность всех деталей.

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

import requests

def test_smoke_critical_path():
    """Smoke-тест: проверка доступности основных эндпоинтов."""
    base_url = "https://api.example.com"
    critical_endpoints = [
        "/health",          # Проверка здоровья сервиса
        "/api/v1/login",    # Критичный функционал авторизации
        "/api/v1/products"  # Основной публичный эндпоинт
    ]
    for endpoint in critical_endpoints:
        response = requests.get(f"{base_url}{endpoint}", timeout=5)
        # Ожидаем любой успешный или корректный клиентский код ответа
        assert response.status_code in [200, 401, 403], 
               f"Smoke test failed for {endpoint}: {response.status_code}"

Ответ 18+ 🔞

А, ну вот, слушай, добрались до самого сокровенного, до святая святых! Дымовое тестирование — это, блядь, как священный огонь в храме, который должен гореть всегда, ёпта! Ему даётся наивысший, блядь, приоритет сразу после того, как сборка выкатилась.

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

Так на что же он, этот дымовой страж, смотрит?

  • Только на критический путь, сука! Запустилось? Вошёл? Главная открылась? Всё, уже хорошо.
  • Должен быть быстрым, как удар молнии. Несколько минут — и ты уже знаешь, можно ли продолжать.
  • Он неглубокий, блядь! Он не проверяет, правильно ли там кнопка мигает. Он проверяет, есть ли вообще эта кнопка на странице, или вместо неё сейчас сидит пизда с ушами.

Вот, смотри, как это выглядит в коде, чтоб ты понимал масштаб трагедии:

import requests

def test_smoke_critical_path():
    """Smoke-тест: проверка доступности основных эндпоинтов."""
    base_url = "https://api.example.com"
    critical_endpoints = [
        "/health",          # Жив ли сервис вообще, или уже накрылся медным тазом?
        "/api/v1/login",    # Можно ли хоть попытаться вломиться в систему?
        "/api/v1/products"  # Видны ли товары, или там пустота и пиздец?
    ]
    for endpoint in critical_endpoints:
        response = requests.get(f"{base_url}{endpoint}", timeout=5)
        # Нам главное — не получить 500-е ошибки или полную тишину. 401/403 — это ещё ладно, логика работает!
        assert response.status_code in [200, 401, 403], 
               f"Smoke test failed for {endpoint}: {response.status_code}"

Вот и весь сказ. Если этот скрипт не орет — можно выдохнуть и запускать большие, дорогие проверки. А если орет... ну, ёпта, готовь костыли, начинается весёлая жизнь.