Что обычно входит в сценарии дымового (Smoke) тестирования?

Ответ

Smoke-тестирование (Build Verification Test) — это минимальный набор быстрых проверок, который подтверждает, что критически важный функционал приложения работает после сборки или развертывания, и его можно тестировать дальше.

Типичные сценарии Smoke-тестов:

  1. Запуск и доступность: Приложение/сервис запускается без критических ошибок. Веб-сервер отвечает по основному URL, API возвращает ожидаемый статус (например, 200 для /health).
  2. Базовая аутентификация/авторизация: Возможность войти в систему с валидными учетными данными.
  3. Проверка основных модулей (Happy Path):
    • Для веб-приложения: загрузка главной страницы, страницы входа, ключевых разделов.
    • Для API: выполнение основных CRUD-операций для главной сущности (например, Пользователь или Товар).
    • Для мобильного приложения: запуск, переход по основным табам.
  4. Критическая бизнес-логика: Один-два ключевых сквозных (E2E) сценария. Например, для интернет-магазина: «Поиск товара -> Добавление в корзину -> Начало оформления заказа».

Пример Smoke-теста для REST API (Python, pytest):

import requests

def test_smoke_api_health():
    """Проверка, что API доступен."""
    resp = requests.get("https://api.example.com/health", timeout=5)
    assert resp.status_code == 200
    assert resp.json()["status"] == "OK"

def test_smoke_crud_cycle():
    """Проверка базового цикла создания и чтения сущности."""
    # 1. CREATE (POST)
    new_item = {"title": "Smoke Test Item"}
    create_resp = requests.post("https://api.example.com/items", json=new_item)
    assert create_resp.status_code in [200, 201]
    item_id = create_resp.json()["id"]

    # 2. READ (GET)
    get_resp = requests.get(f"https://api.example.com/items/{item_id}")
    assert get_resp.status_code == 200
    assert get_resp.json()["title"] == new_item["title"]

Главный принцип: Smoke-тесты должны быть быстрыми, стабильными и покрывать «ствол» системы. При падении любого Smoke-теста дальнейшее углубленное тестирование бессмысленно.

Ответ 18+ 🔞

Давай разберемся, что за зверь такой — Smoke-тестирование, а то некоторые думают, что это когда в облако дыма смотрят и гадают, работает ли что-то. Нет, блядь, всё куда конкретнее.

Это, сука, минимальный и быстрый набор проверок, который отвечает на один простой, как три рубля, вопрос: а не сломалось ли у нас всё в хлам после новой сборки или обновления? Если критические функции живы — можно дальше копать. Если нет — вся команда идёт пить кофе, пока разработчики тушат пожар.

Что обычно проверяют, чтобы не выглядеть идиотами:

  1. Запустилось ли оно вообще? Приложение стартануло без мгновенного краша, веб-сервер не показывает рожу с ошибкой 500, а на запрос к /health отвечает «живой, блядь!».
  2. Можно ли зайти? Базовая аутентификация работает. Ввёл правильный логин-пароль — попал внутрь, а не получил по морде ошибкой.
  3. Главные модули на месте? Для веба грузятся основные страницы. Для API — выполняются ключевые CRUD-операции (создал запись, прочитал её — и не просрал где-то по дороге). Для мобилки — переключение между основными экранами не выкидывает в главное меню телефона.
  4. Самый важный бизнес-сценарий жив? Для магазина: нашёл товар, сунул в корзину, начал оформлять заказ — и не упало на самом интересном месте. Один такой сквозной сценарий, но зато самый жирный.

Вот тебе пример, как это может выглядеть в коде. Не трогай его, он и так хорош:

import requests

def test_smoke_api_health():
    """Проверка, что API доступен."""
    resp = requests.get("https://api.example.com/health", timeout=5)
    assert resp.status_code == 200
    assert resp.json()["status"] == "OK"

def test_smoke_crud_cycle():
    """Проверка базового цикла создания и чтения сущности."""
    # 1. CREATE (POST)
    new_item = {"title": "Smoke Test Item"}
    create_resp = requests.post("https://api.example.com/items", json=new_item)
    assert create_resp.status_code in [200, 201]
    item_id = create_resp.json()["id"]

    # 2. READ (GET)
    get_resp = requests.get(f"https://api.example.com/items/{item_id}")
    assert get_resp.status_code == 200
    assert get_resp.json()["title"] == new_item["title"]

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