Ответ
Smoke-тестирование — это поверхностная проверка критического функционала после сборки или развертывания, чтобы убедиться, что система готова к более глубокому тестированию.
Цель: Обнаружить критические (блокирующие) дефекты, которые делают дальнейшее тестирование бессмысленным.
Что обычно проверяется (на примере типичного веб-приложения):
- Доступность и запуск: Приложение успешно развернуто и отвечает по основному URL.
- Критичный пользовательский путь (Happy Path):
- Загрузка главной страницы.
- Аутентификация: Вход в систему с валидными учетными данными.
- Навигация: Переход по основным разделам (например, "Каталог", "Корзина").
- Ключевое действие: Создание или просмотр основной сущности (например, добавление товара в корзину).
- Работа интеграций: Базовое подключение к основному API и базе данных.
Пример набора smoke-тестов (псевдокод):
# 1. Проверка доступности сервиса
assert health_check() == "OK"
# 2. Проверка главной страницы
response = get("/")
assert response.status_code == 200
assert "Добро пожаловать" in response.text
# 3. Проверка входа в систему
auth_response = post("/api/login", json={"login": "test", "pass": "test"})
assert auth_response.status_code == 200
assert "session_id" in auth_response.cookies
# 4. Проверка загрузки основного каталога
catalog_response = get("/api/products", cookies=auth_response.cookies)
assert catalog_response.status_code == 200
assert isinstance(catalog_response.json(), list)
Важно: Smoke-тесты должны быть быстрыми (минуты) и стабильными. Они не проверяют детали, граничные случаи или производительность.
Ответ 18+ 🔞
Давай разберёмся, что за зверь такой — смоук-тестирование, а то некоторые думают, что это курить идут. Нет, блядь, это не про кальян!
Представь: выкатили вы новую сборку, все такие довольные, а там, сука, главная страница не грузится. И зачем тогда все остальные тесты запускать, если в основную дверь уже не пролезть? Вот именно для этого и нужны смоук-тесты — быстрая, поверхностная проверка, чтобы понять, дышит ли система вообще или уже накрылась медным тазом.
Суть проста, как три копейки: гоняем по самому критичному, основному пути. Не углубляемся в дебри, не ищем мелкие баги. Наша задача — найти блокирующие дефекты, которые делают дальнейшую работу бессмысленной. Если смоук упал — всё, стоп машина, можно не тратить время на регресс, пока эту херню не починят.
Что обычно щупаем на каком-нибудь веб-приложении:
- Запустилось ли оно, мать его? Отвечает ли сервер по базовому адресу или мы просто в пустоту стучимся?
- Самый главный сценарий (Happy Path):
- Главная страница открывается, а не показывает «404 — всех нахуй».
- Залогиниться можно. Вводим тестовые данные — нас пускает, а не кидает в ошибку с криками про неверный пароль.
- По основным разделам походить. «Каталог», «Корзина» — грузятся, а не ведут в цифровое небытие.
- Ключевое действие выполнить. Например, добавить товар в корзину. Не важно, какой, главное — чтобы процесс не развалился на полпути.
- Интеграции на месте. База данных не сдохла, основной API не отвечает кирпичом.
Вот смотри, как это примерно в коде выглядит, чтоб ты понимал масштаб:
# 1. Жив ли сервис вообще?
assert health_check() == "OK" # Если не "OK", дальше можно не смотреть, пиздец.
# 2. Главная страница
response = get("/")
assert response.status_code == 200 # Не 500, не 404, а нормальная отдача
assert "Добро пожаловать" in response.text # Хоть что-то знакомое видим
# 3. Вход в систему
auth_response = post("/api/login", json={"login": "test", "pass": "test"})
assert auth_response.status_code == 200 # Залогинились, ура
assert "session_id" in auth_response.cookies # И сессию нам дали, а не послали
# 4. Каталог товаров грузится
catalog_response = get("/api/products", cookies=auth_response.cookies)
assert catalog_response.status_code == 200 # Список товаров пришёл
assert isinstance(catalog_response.json(), list) # И это действительно список, а не одна ошибка
Запомни главное: эти тесты должны быть быстрыми, как удар током, и стабильными, как скала. Никаких сложных сценариев, проверок на 1% нагрузки или вёрстки под IE6. Если смоук проходит — система в принципе жива и с ней можно работать дальше. Не проходит — ну, извини, придётся лезть в логи и выяснять, кто тут всех обосрал.