Что такое smoke-тестирование и каковы его основные требования?

Ответ

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

Основные требования к smoke-тестам:

  1. Минимальный и критически важный набор. Проверяются только основные сценарии (например, запуск приложения, вход в систему, загрузка главной страницы).
  2. Высокая скорость выполнения. Обычно укладывается в 5–15 минут, чтобы не блокировать CI/CD-пайплайн.
  3. Максимальная стабильность. Тесты должны быть надежными и не давать ложных срабатываний, так как их результат — сигнал для продолжения работы.
  4. Полная автоматизация. Интеграция в процесс сборки для запуска без ручного вмешательства.

Пример smoke-теста для веб-приложения на Python с использованием pytest:

import requests

def test_main_page_loads():
    """Проверка, что главная страница приложения доступна."""
    response = requests.get("https://app.example.com/")
    assert response.status_code == 200
    assert "Welcome" in response.text

def test_login_endpoint_available():
    """Проверка доступности конечной точки для входа."""
    response = requests.get("https://app.example.com/api/health")
    assert response.status_code == 200
    assert response.json().get("status") == "OK"

Ответ 18+ 🔞

Вот же ёпта, опять эти ваши тесты! Ну ладно, давайте разберёмся, что за зверь такой — смоук-тестирование, а то у меня уже волнение ебать, как вы его понимаете.

Представьте, вы только что собрали новую версию своего детища, этого цифрового уродца. И перед тем, как запускать на него всю артиллерию — эти ваши интеграционные, нагрузочные, регрессионные тесты, которые будут ебашить полдня — хочется быстро понять: а оно вообще живое? Не накрылось ли медным тазом прямо на старте? Вот эта быстрая проверка на вшивость, на базовую работоспособность, — это и есть смоук-тест, санитарный такой. По сути, ты спрашиваешь систему: «Ты дышишь, сука?»

Итак, правила игры, чтобы не обосраться:

  1. Тестов — овердохуища не надо. Берёшь самый-самый минимум, критически важные штуки. Запустилось ли приложение? Открывается ли главная страница? Можно ли залогиниться? Если на этом этапе всё пиздец — дальше можно даже не смотреть, экономишь кучу времени. Это как проверить, есть ли свет в квартире, прежде чем начинать ремонт.
  2. Быстро, блядь, быстро! Весь этот цирк должен укладываться в 5-15 минут, максимум. Идея в том, чтобы не тормозить конвейер сборки. Собрали — чиркнули спичкой (смоук) — пошёл дымок (тесты прошли) — ок, можно запускать тяжёлую артиллерию. Нет дымка — всё, пизда, ищем, кто накосячил.
  3. Стабильность — наше всё. Эти тесты должны быть крепкими, как русский мужик после ста грамм. Никаких ложных срабатываний, «ой, а сегодня сервер долго думал». Если смоук-тест упал — это железный сигнал, что в приложении реальная проблема, а не твой тест — мудя.
  4. Полный автомат, без рук. Это ж для CI/CD пайплайна! Всё должно запускаться само, без твоего благословения. Собрался билд — автоматически побежали смоук-тесты. Человек тут не нужен, он только кофе пьёт и матерится на результаты.

Ну и куда же без примера, чтобы совсем уж понятно было? Смотри, вот тебе кусочек кода на Python с pytest. Представь, что это наше веб-приложение, «шедевр» местного разлива.

import requests

def test_main_page_loads():
    """Проверка, что главная страница приложения доступна."""
    response = requests.get("https://app.example.com/")
    assert response.status_code == 200
    assert "Welcome" in response.text

def test_login_endpoint_available():
    """Проверка доступности конечной точки для входа."""
    response = requests.get("https://app.example.com/api/health")
    assert response.status_code == 200
    assert response.json().get("status") == "OK"

Видишь? Никакой хитрой жопы. Первый тест: «А главная-то открывается? И там слово «Welcome» есть?». Второй тест: «А API, через которое логинятся, живое? Отвечает ли, что оно «OK»?». Если оба прошли — ну, ёбана-рот, можно считать, что система в сознании и с ней можно работать дальше. Если нет — ну, извини, чувак, иди чини, пока все не обосрались. Вот и вся философия, в рот меня чих-пых!