Что такое санитарное (smoke) тестирование?

Ответ

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

Ключевые характеристики:

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

Если smoke-тесты не проходят, сборка считается нестабильной, и ее отправляют на доработку, экономя время на запуск полного набора тестов.

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

  1. Главная страница загружается (HTTP 200).
  2. Пользователь может войти в систему с валидными данными.
  3. Пользователь может выйти из системы.
  4. Ключевая страница раздела (например, "Каталог") открывается.

Пример автоматизированного 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 утра. Нет! Первым делом — дымовой тест, ёпта.

Смысл в чём? А смысл, блядь, в том, чтобы проверить, идёт ли вообще дым из трубы. Запускается ли эта хрень? Горит ли лампочка? Можно ли зайти? Можно ли выйти, не сломав всё к ебеням? Если на эти простые вопросы ответ «нет» — то всё, пиздец, можно даже не начинать нормальное тестирование. Экономия времени — овердохуища. Зачем тратить три часа на полный прогон, если приложение даже не открывается, блядь? Отправляй сборку обратно разработчикам, пусть чешут репу и ищут, куда они там запятую не туда поставили.

Как это выглядит на практике, бля?

  • Делается самым первым, как только билд упал на тестовый стенд. Прям сразу, блядь.
  • Проверяет только самое основное, критичное. Типа: страница грузится? Логин работает? Логаут не выносит мозг? Главный раздел открывается? Всё.
  • Быстро, блядь, очень быстро. Не час, не два, а минуты. Пока кофе не остыл.
  • Поверхностно, как первая брачная ночь у импотента. Никаких сложных сценариев, крайних случаев и прочей хуйни. Только база.

Вот представь веб-магазин. Наш смоук-чек:

  1. Открывается ли главная, или там 404 и котик грустит?
  2. Можешь ли ты, сука, залогиниться тестовым юзером (логин: test, пароль: test, как обычно, доверия ебать ноль к безопасности)?
  3. Выйдешь ли ты потом, или кнопка «Выход» просто для красоты?
  4. Откроется ли страница каталога, или тебя пошлют нахуй с белым экраном?

Если хоть что-то не так — всё, приехали. Сборка — говно. Отправляем в утиль. Не тратим силы и нервы.

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

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 пайплайн, чтобы он сам, сука, после каждой сборки прогонялся. Автоматически, блядь. Принесли новую версию — дым-тест прошёл? Отлично, можно копать глубже. Не прошёл? Всё, разработчикам сигнал: «Ребята, вы сломали даже базовый вход, идите нахуй, чините». Красота, ёпта.