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

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

Ответ

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-теста дальнейшее углубленное тестирование бессмысленно.