Когда проводится smoke-тестирование?
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
# Когда проводится smoke-тестирование
Smoke-тестирование — это один из моих любимых типов тестирования, потому что оно простое, быстрое и очень effective. Расскажу, когда я его применяю.
Определение
Smoke test (дымовой тест) — это быстрая проверка базовой функциональности приложения. Если smoke тесты падают, дальнейшее тестирование бесполезно.
Аналогия: Когда вы включаете новый телевизор, вы сначала проверяете, что он вообще включается и выводит изображение (smoke test), а потом уже смотрите TV.
Когда проводится smoke-тестирование
1. Сразу после build/deployment (Критичный момент)
Это самый важный moment для smoke тестирования.
Сценарий:
Разработчики merge код в main → CI pipeline запускает build → Build успешен → Deployment на staging → Smoke tests запускаются автоматически
Цель: Убедиться, что приложение вообще запустилось и основной функционал работает. Если smoke tests падают, мы не переходим к дальнейшему тестированию.
Время: Smoke tests обычно занимают 5-15 минут (max 30 минут). Это очень быстро.
Пример для веб-приложения:
Smoke Test Suite:
1. Application server is running (HTTP 200 on /api/health)
2. Database connection works (can query basic data)
3. User can login with valid credentials
4. User can logout
5. Main page loads (no 500 errors)
6. Navigation between main sections works
7. Basic API endpoints respond with correct status codes
Если ANY из этих падают → Deploy rejected, разработчики откатывают.
2. На каждый спринт / релиз
В агильном процессе мы делаем smoke тесты:
Скедьюл:
Понедельник утро: Smoke test на staging окружении
→ Проверяем, что всё из предыдущего спринта всё ещё работает
→ Очень важно перед тем, как разработчики меняют код
Вся неделя: Smoke tests после каждого commit
→ Automated в CI/CD (GitHub Actions, Jenkins, GitLab CI)
→ Если падают → немедленно уведомляем team
Перед релизом: Smoke test на prod-like окружении
→ Финальная проверка перед production deployment
3. Перед полноценным тестированием (Regression)
Очередность:
Developer merges code
↓
CI pipeline triggered
↓
Build completes
↓
Smoke tests run (5 минут)
↓
FAIL → Stop, notify developer
✓ PASS → Continue
↓
Deployment to staging
↓
Regression tests run (1-2 часа)
Логика: Зачем запускать 2 часа regression tests, если приложение даже не запускается? Smoke tests — это gate keeper.
4. На каждом окружении
Я запускаю smoke тесты на разных окружениях:
Development
↓
Smoke test → проверяем, что dev окружение живо
↓
Staging
↓
Smoke test → перед полным тестированием
↓
Production (Post-deployment)
↓
Smoke test → убедиться, что production работает
5. Когда фиксим критичный баг
Сценарий:
Обнаружили critical bug в production
↓
Разработчик делает hotfix
↓
Smoke tests run на staging версии hotfix
↓
Если passed → deploy на production
↓
Smoke tests run на production
↓
Все OK → incident closed
Это fast path для критичных проблем: не нужно полное тестирование, только smoke проверка, что мы ничего не сломали.
Как я структурирую smoke тесты
Smoke Test Suite — критерии выбора
Я беру самые important user journeys:
1. Основной happy path (80/20 rule)
- Главный feature приложения
- Самые часто используемые функции
2. Critical business processes
- Payment (если финтех)
- Authentication (всё зависит)
- Data persistence (данные сохраняются?)
3. Infrastructure dependencies
- Database connectivity
- API gateway
- 3rd party integrations (payment, email)
Пример Smoke Test для e-commerce
import pytest
from selenium import webdriver
class TestSmoke:
"""Smoke tests — must run before any regression testing"""
def test_app_loads(self):
"""Application home page loads without errors"""
driver = webdriver.Chrome()
driver.get("https://staging.myshop.com")
assert "Shop" in driver.title
assert driver.find_element("css", "body") is not None
def test_login_logout(self):
"""User can login and logout"""
# Login
driver.find_element("id", "login_button").click()
driver.find_element("id", "email").send_keys("test@example.com")
driver.find_element("id", "password").send_keys("testpass123")
driver.find_element("id", "submit").click()
# Verify logged in
assert "My Account" in driver.page_source
# Logout
driver.find_element("id", "logout_button").click()
assert "Login" in driver.page_source
def test_search_functionality(self):
"""User can search for products"""
driver.find_element("id", "search_box").send_keys("laptop")
driver.find_element("id", "search_button").click()
assert "Search results" in driver.page_source
assert len(driver.find_elements("css", ".product-item")) > 0
def test_add_to_cart(self):
"""User can add item to cart"""
driver.get("https://staging.myshop.com/product/123")
driver.find_element("id", "add_to_cart").click()
assert "Added to cart" in driver.page_source
def test_api_health(self):
"""API is responsive and healthy"""
import requests
response = requests.get("https://api.staging.myshop.com/health")
assert response.status_code == 200
def test_database_connectivity(self):
"""Database is accessible"""
# Try to fetch basic data
response = requests.get("https://api.staging.myshop.com/products?limit=1")
assert response.status_code == 200
assert len(response.json()) > 0
Automation: Smoke tests должны быть automated
Инструменты, которые я использовал:
-
Selenium — UI smoke tests
- Pros: Works on any browser, mature
- Cons: Slow, flaky
-
Cypress / Playwright — Modern UI testing
- Pros: Fast, reliable, good debugging
- Cons: JS only
-
pytest + requests — API smoke tests
- Pros: Fast, simple, no UI overhead
- Cons: Only backend
-
CI/CD (GitHub Actions, Jenkins) — Automated execution
- Smoke tests trigger automatically on every push
- Results visible immediately
- Slack notification if failed
Пример GitHub Actions workflow:
name: Smoke Tests
on:
push:
branches: [main, staging]
jobs:
smoke-test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Run smoke tests
run: |
npm install
npm run test:smoke
- name: Notify Slack if failed
if: failure()
run: |
curl -X POST $SLACK_WEBHOOK \
-d 'text=Smoke tests failed on '$GITHUB_SHA''
Разница между smoke и sanity тестами
Основной вопрос: "В чём разница?"
Smoke tests
- Когда: После build/deploy
- Что: Basic functionality only
- Цель: Убедиться, что приложение вообще работает
- Время: 5-15 минут
- Automated: Да, обязательно
- Что делать при fail: Откатить deploy
Sanity tests
- Когда: После smoke passed, перед полным тестированием
- Что: Quick check of modified functionality
- Цель: Убедиться, что new changes работают логично
- Время: 15-30 минут
- Automated: Обычно да, но может быть manual
- Что делать при fail: Отправить back to developer
Пример:
Разработчик добавляет новую feature "Wishlist"
Smoke test:
- Приложение загружается
- Пользователь может логиниться
- Основные кнопки работают
→ Если это passed → continue
Sanity test:
- Пользователь может добавить item в Wishlist
- Wishlist сохраняется после logout/login
- Wishlist можно поделиться
→ Если это failed → back to developer
Smoke test metrics
Я отслеживаю:
1. Pass rate: Должна быть 95%+ (если ниже → что-то не так)
2. Execution time: Обычно 5-15 минут
3. Flakiness: Сколько раз тесты падают случайно? (должно быть <5%)
4. Mean time to fix: Если smoke fail — как быстро разработчик фиксит?
Выводы
Когда проводится smoke-тестирование:
- Обязательно: Сразу после deployment на любое окружение
- Automated: На каждый commit/push через CI/CD
- Gate keeper: Перед полным regression тестированием
- Fast: 5-15 минут максимум
- Критичный: Если smoke падают → не переходим к дальнейшему тестированию
Это самый важный type of testing для поддержания stability продукта. Я трачу 20% своего времени на написание smoke тестов и экономлю 80% времени на ловлю critical issues до того, как они дойдут до production.