← Назад к вопросам

Когда нужно проводить Smoke тестирование?

1.0 Junior🔥 281 комментариев
#Инструменты тестирования#Теория тестирования

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI5 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Когда проводить Smoke-тестирование?

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

Ключевые моменты для проведения Smoke-тестов:

  • Сразу после сборки (билда) и развертывания на тестовом стенде. Это основной и самый важный момент. Прежде чем команда QA приступит к регрессионному, интеграционному или функциональному тестированию, необходимо убедиться, что «дыма нет» (отсюда и название — если есть «дым», значит, есть и серьезный «пожар»-дефект).
  • После развертывания на промежуточную (staging) или продуктивную (production) среду. Перед тем как объявить о готовности релиза или передать сборку заказчику/пользователям, smoke-тесты помогают убедиться, что развертывание прошло корректно и ключевые сценарии работают в целевой среде.
  • Перед началом нового цикла тестирования (например, в начале спринта в Agile или перед приемочным тестированием). Это экономит время команды, предотвращая запуск полного набора тестов на заведомо нерабочей версии.
  • После «горячего» исправления (hotfix) или срочного патча. Быстрая проверка того, что исправление не сломало основные функции системы.
  • Как часть процесса непрерывной интеграции (CI). Smoke-тесты часто автоматизируются и запускаются автоматически после каждой успешной сборки в CI-пайплайне (например, в Jenkins, GitLab CI, GitHub Actions). Это дает мгновенную обратную связь разработчикам.

Цели и преимущества Smoke-тестирования:

  • Раннее обнаружение блокирующих дефектов: Быстро выявить критические ошибки, которые делают дальнейшее тестирование бессмысленным (например, приложение не запускается, пользователь не может авторизоваться, основная транзакция падает).
  • Экономия времени и ресурсов: Не тратить часы на запуск тысяч тестов на нестабильной сборке. Команда тестирования может параллельно заниматься другими задачами, пока разработчики исправляют критическую проблему.
  • Повышение уверенности в качестве сборки: Успешное прохождение smoke-тестов — это «зеленый свет» для начала всех остальных видов тестирования.
  • Быстрая обратная связь для разработки: Позволяет быстро откатить проблемный билд и вернуться к разработке.

Что проверяют в Smoke-тестах? (Примеры сценариев)

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

  1. Доступность главной страницы и основных разделов сайта.
  2. Успешная регистрация и авторизация пользователя.
  3. Просмотр каталога товаров, фильтрация.
  4. Добавление товара в корзину.
  5. Начало процесса оформления заказа (достижение страницы оплаты/подтверждения).

Пример автоматизированного Smoke-теста (на Python с использованием pytest + Selenium)

import pytest
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

class TestSmokeStore:
    """Набор smoke-тестов для интернет-магазина."""

    @pytest.fixture(scope="class")
    def driver(self):
        """Фикстура для инициализации и закрытия браузера."""
        driver = webdriver.Chrome()
        driver.maximize_window()
        driver.get("https://demo-store.example.com")
        yield driver
        driver.quit()

    def test_homepage_loads(self, driver):
        """Тест 1: Главная страница загружается."""
        assert "Demo Store" in driver.title
        # Проверяем наличие ключевых элементов
        assert driver.find_element(By.ID, "logo").is_displayed()
        assert driver.find_element(By.LINK_TEXT, "Каталог").is_displayed()

    def test_user_can_login(self, driver):
        """Тест 2: Пользователь может авторизоваться."""
        login_link = driver.find_element(By.LINK_TEXT, "Войти")
        login_link.click()

        WebDriverWait(driver, 10).until(
            EC.visibility_of_element_located((By.ID, "email"))
        )

        driver.find_element(By.ID, "email").send_keys("test_user@example.com")
        driver.find_element(By.ID, "password").send_keys("secure_password_123")
        driver.find_element(By.XPATH, "//button[@type='submit']").click()

        # Ожидаем появление элемента, подтверждающего успешный вход
        welcome_msg = WebDriverWait(driver, 10).until(
            EC.visibility_of_element_located((By.CLASS_NAME, "welcome-msg"))
        )
        assert "test_user" in welcome_msg.text

    def test_product_can_be_added_to_cart(self, driver):
        """Тест 3: Товар можно добавить в корзину."""
        driver.find_element(By.LINK_TEXT, "Каталог").click()
        first_product = WebDriverWait(driver, 10).until(
            EC.element_to_be_clickable((By.CLASS_NAME, "product-card"))
        )
        first_product.click()

        add_to_cart_btn = driver.find_element(By.ID, "add-to-cart-button")
        add_to_cart_btn.click()

        # Проверяем уведомление или изменение счетчика корзины
        cart_notification = WebDriverWait(driver, 5).until(
            EC.visibility_of_element_located((By.CLASS_NAME, "cart-notification"))
        )
        assert "Товар добавлен" in cart_notification.text

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

Когда нужно проводить Smoke тестирование? | PrepBro