Ответ
Санитарное тестирование (Smoke Testing) — это быстрая, поверхностная проверка критически важных функций приложения после сборки (билда) или развертывания. Его цель — определить, является ли сборка достаточно стабильной для проведения более глубокого и детального тестирования (например, регрессионного или приемочного).
Ключевые характеристики:
- Выполняется первым после получения новой сборки.
- Охватывает основной функционал ("дым из трубы идет?").
- Выполняется быстро (минуты или десятки минут).
- Неглубокое — не проверяет крайние случаи или сложные сценарии.
Если smoke-тесты не проходят, сборка считается нестабильной, и ее отправляют на доработку, экономя время на запуск полного набора тестов.
Пример smoke-тестов для веб-приложения:
- Главная страница загружается (HTTP 200).
- Пользователь может войти в систему с валидными данными.
- Пользователь может выйти из системы.
- Ключевая страница раздела (например, "Каталог") открывается.
Пример автоматизированного smoke-теста на Python с requests и pytest:
import pytest
import requests
BASE_URL = "https://staging.example.com"
@pytest.mark.smoke
def test_main_page_availability():
"""Проверка доступности главной страницы."""
response = requests.get(f"{BASE_URL}/", timeout=5)
assert response.status_code == 200
assert "Example Corp" in response.text # Проверка ключевого элемента
@pytest.mark.smoke
def test_login_smoke():
"""Проверка базового сценария входа."""
login_data = {"username": "test_user", "password": "secure_pass"}
response = requests.post(f"{BASE_URL}/api/login", json=login_data, timeout=5)
assert response.status_code == 200
response_json = response.json()
assert "access_token" in response_json # Ожидаем токен в ответе
assert response_json["user"]["username"] == "test_user"
# Запуск: pytest -v -m smoke
Smoke-тесты часто являются частью Continuous Integration (CI) пайплайна и запускаются автоматически после каждой сборки.
Ответ 18+ 🔞
А, слушай, про санитарное тестирование, да? Это ж как в армии, блядь, построили новую ракету, а ты её не проверяешь, летает ли она вообще нахуй. Может, она при сборке, блядь, важную деталь забыли, и она сразу в землю, пиздец, вротберунчик.
Вот смотри, принесли тебе новую сборку приложения — свеженькую, пахнет кодом. Первым делом — не лезть в дебри, не проверять, как кнопка «Купить» работает при отрицательном балансе у пользователя-инвалида в 4 утра. Нет! Первым делом — дымовой тест, ёпта.
Смысл в чём? А смысл, блядь, в том, чтобы проверить, идёт ли вообще дым из трубы. Запускается ли эта хрень? Горит ли лампочка? Можно ли зайти? Можно ли выйти, не сломав всё к ебеням? Если на эти простые вопросы ответ «нет» — то всё, пиздец, можно даже не начинать нормальное тестирование. Экономия времени — овердохуища. Зачем тратить три часа на полный прогон, если приложение даже не открывается, блядь? Отправляй сборку обратно разработчикам, пусть чешут репу и ищут, куда они там запятую не туда поставили.
Как это выглядит на практике, бля?
- Делается самым первым, как только билд упал на тестовый стенд. Прям сразу, блядь.
- Проверяет только самое основное, критичное. Типа: страница грузится? Логин работает? Логаут не выносит мозг? Главный раздел открывается? Всё.
- Быстро, блядь, очень быстро. Не час, не два, а минуты. Пока кофе не остыл.
- Поверхностно, как первая брачная ночь у импотента. Никаких сложных сценариев, крайних случаев и прочей хуйни. Только база.
Вот представь веб-магазин. Наш смоук-чек:
- Открывается ли главная, или там 404 и котик грустит?
- Можешь ли ты, сука, залогиниться тестовым юзером (логин:
test, пароль:test, как обычно, доверия ебать ноль к безопасности)? - Выйдешь ли ты потом, или кнопка «Выход» просто для красоты?
- Откроется ли страница каталога, или тебя пошлют нахуй с белым экраном?
Если хоть что-то не так — всё, приехали. Сборка — говно. Отправляем в утиль. Не тратим силы и нервы.
А вот как это может выглядеть в коде, если ты не лох и автоматизируешь. Смотри, не трогай блок, я же сказал!
import pytest
import requests
BASE_URL = "https://staging.example.com"
@pytest.mark.smoke
def test_main_page_availability():
"""Проверка доступности главной страницы."""
response = requests.get(f"{BASE_URL}/", timeout=5)
assert response.status_code == 200
assert "Example Corp" in response.text # Проверка ключевого элемента
@pytest.mark.smoke
def test_login_smoke():
"""Проверка базового сценария входа."""
login_data = {"username": "test_user", "password": "secure_pass"}
response = requests.post(f"{BASE_URL}/api/login", json=login_data, timeout=5)
assert response.status_code == 200
response_json = response.json()
assert "access_token" in response_json # Ожидаем токен в ответе
assert response_json["user"]["username"] == "test_user"
# Запуск: pytest -v -m smoke
И этот сраный набор часто вшивают прямо в CI/CD пайплайн, чтобы он сам, сука, после каждой сборки прогонялся. Автоматически, блядь. Принесли новую версию — дым-тест прошёл? Отлично, можно копать глубже. Не прошёл? Всё, разработчикам сигнал: «Ребята, вы сломали даже базовый вход, идите нахуй, чините». Красота, ёпта.