В каком окружении обычно проводят smoke-тестирование?

Ответ

Smoke-тестирование (проверка «дымом») выполняется в стабильном тестовом окружении, максимально приближенном к продакшену, чтобы убедиться, что ключевые функции работают после сборки или деплоя.

Типичные окружения для smoke-тестов:

  • Staging / Pre-Production — наилучший вариант, так как повторяет продакшен по конфигурации, данным и сервисам, но изолирован от реальных пользователей.
  • QA / Test — стандартное окружение для регулярных проверок.
  • Production — иногда используется для быстрой проверки после деплоя (например, health-check эндпоинтов).
  • DEV — редко, только для ранней проверки критических путей.

Пример smoke-теста для проверки здоровья API (Python):

import requests

def test_smoke_api_health():
    # Проверяем, что основное API отвечает
    response = requests.get('https://staging-api.example.com/health', timeout=5)
    assert response.status_code == 200, f"Expected 200, got {response.status_code}"
    assert response.json().get('status') == 'OK', "Service status is not OK"
    print("Smoke test passed: API is healthy")

Почему staging? Потому что только там можно достоверно проверить интеграцию всех компонентов в условиях, близких к боевым.

Ответ 18+ 🔞

Вот же ж, опять про эти ваши "дымные" проверки. Ну ладно, раз уж спросили, объясню на пальцах, чтобы даже мартышлюшка с палкой поняла.

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

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

  • Staging / Pre-Production — это, блядь, король и бог для таких проверок. Окружение — клон прода, один в один: те же базы, сервисы, конфиги. Но при этом там ни одного живого лоха со своими деньгами. Идеально, чтобы понять, не насрал ли ты чего в интеграцию. Лучший вариант, без вариантов.
  • QA / Test — ну, сойдёт. Стандартная песочница, где обычно и идёт основная возня. Но тут есть нюанс — данные могут быть тестовые, сервисы замоканы. Так что доверия, ебать, ноль целых, ноль десятых.
  • Production — о, это для смелых, с яйцами из титана. Иногда после деплоя быстренько пингануть health-check эндпоинт. Но это как ходить по охуенно тонкому льду — одно неверное движение, и ты уже на глазах у всех пользователей показываешь им "502 Bad Gateway". Волнение, ебать.
  • DEV — да похуй, честно. Разве что на самой ранней стадии, когда только родился и хочешь понять, жив ли вообще. Но это даже не дым, а так, пар изо рта на морозе.

Вот, смотри, как это выглядит в коде. Проще некуда, даже я, с моими старыми костылями, понял:

import requests

def test_smoke_api_health():
    # Просто пингуем наше творение на staging, смотрим, не померло ли
    response = requests.get('https://staging-api.example.com/health', timeout=5)
    assert response.status_code == 200, f"Ожидали 200, а получили {response.status_code}"
    assert response.json().get('status') == 'OK', "Сервис, сука, не в порядке!"
    print("Дым пошёл! API живое.")

И почему staging? Да потому что, блядь, только там ты можешь быть хоть сколько-то уверен, что твой код не начнёт икать при виде реальной базы данных или настоящего платежного шлюза. В QA-окружении всё может работать, а как выкатишь на прод — бац, и выясняется, что какой-нибудь сервис на staging вёл себя иначе. Короче, staging — это репетиция перед большим концертом. Без неё выходить на сцену — это чистой воды распиздяйство.