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

В чём разница между регрессионным и Smoke тестирования?

1.3 Junior🔥 213 комментариев
#Теория тестирования#Техники тест-дизайна

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

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

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

Разница между регрессионным и Smoke-тестированием

Разница между регрессионным и Smoke-тестированием (также известным как Sanity Check или Build Verification Testing) фундаментальна и касается целей, глубины, объёма и момента выполнения в жизненном цикле разработки ПО. Оба являются критически важными видами тестирования, но служат разным целям.

Ключевые определения

  • Smoke-тестирование — это поверхностный, быстрый набор тестов, выполняемый над новым билдом (сборкой) ПО с целью проверить его базовую работоспособность. Основной вопрос: "Можно ли вообще начинать углублённое тестирование этого билда?".
  • Регрессионное тестирование — это полномасштабное тестирование, направленное на обнаружение новых дефектов в уже протестированном функционале после внесения изменений (правка бага, добавление новой функции, рефакторинг кода). Основной вопрос: "Не сломали ли наши изменения то, что работало раньше?".

Сравнительная таблица

КритерийSmoke-тестированиеРегрессионное тестирование
Основная цельПроверка стабильности билда для дальнейшего тестирования ("Врата" для билда).Проверка отсутствия регрессий в существующем функционале после изменений.
Глубина и объёмПоверхностное и узкое. Проверяются только ключевые, самые важные сценарии (часто < 5% от всех тестов).Глубокое и широкое. Покрывает значительную часть уже протестированного функционала, связанного с изменениями.
Время выполненияОчень быстрое (минуты или десятки минут).Длительное (часы, дни, в зависимости от стратегии и автоматизации).
Момент выполненияСразу после получения нового билда (сборки).После внесения изменений в код (новый функционал, исправление багов) и успешного Smoke-теста.
Результат при провалеБилд отвергается, отправляется на доработку. Глубокое тестирование не начинается.Находятся регрессионные баги, которые фиксируются. Билд при этом может быть стабильным.
ПриоритетВысший. Без успешного Smoke-теста все остальные процессы замирают.Высокий, но выполняется после "входного контроля" (Smoke).
Основной методЧасто ручное тестирование для скорости, но стремится к автоматизации.Активно использует автоматизированные регрессионные тест-сьюты для покрытия объёма.

Пример на практике (с кодом)

Представьте веб-приложение — интернет-магазин.

Сценарий Smoke-теста (автоматизированный):

# smoke_test.py - пример быстрых проверок
import requests

BASE_URL = "https://demo-store.com/api"

def test_build_stability():
    """Smoke-набор: проверяем, что основные сервисы отвечают и ключевые потоки работают."""
    
    # 1. Проверка доступности API (health check)
    health_response = requests.get(f"{BASE_URL}/health")
    assert health_response.status_code == 200, "Сервис недоступен"
    
    # 2. Проверка базового сценария: получение главной страницы товаров
    catalog_response = requests.get(f"{BASE_URL}/catalog")
    assert catalog_response.status_code == 200, "Каталог не загружается"
    assert len(catalog_response.json()) > 0, "Каталог пуст"
    
    # 3. Проверка возможности логина (критичный путь)
    login_data = {"username": "test_user", "password": "test_pass"}
    login_response = requests.post(f"{BASE_URL}/login", json=login_data)
    assert login_response.status_code in [200, 401], "Сервис авторизации не работает"
    
    print("Smoke-тест пройден. Билд стабилен для дальнейшего тестирования.")

# Выполнение
if __name__ == "__main__":
    test_build_stability()

Сценарий регрессионного тестирования: Допустим, мы исправили баг в корзине товаров, где неверно считалась скидка.

# regression_test_cart.py - часть регрессионного набора
import pytest
from shopping_cart import Cart, Product

class TestCartRegression:
    """Регрессионные тесты корзины после исправления бага со скидкой."""
    
    def setup_method(self):
        self.cart = Cart()
        self.product_1 = Product(id=1, name="Книга", price=500, discount=10) # Скидка 10%
        self.product_2 = Product(id=2, name="Мышка", price=1000, discount=0)
    
    def test_total_calculation_with_discount_fix(self):
        """Проверка исправленного расчета общей суммы со скидкой."""
        self.cart.add_item(self.product_1, quantity=2) # 500 * 2 * 0.9 = 900
        self.cart.add_item(self.product_2, quantity=1) # 1000 * 1 = 1000
        assert self.cart.calculate_total() == 1900.0, "Неправильный расчет суммы со скидкой"
    
    # РЕГРЕССИЯ: проверяем, что НЕ сломались старые функции
    def test_adding_removing_items_still_works(self):
        """Проверка, что базовые методы добавления/удаления всё еще работают."""
        self.cart.add_item(self.product_1, quantity=1)
        assert len(self.cart.items) == 1
        self.cart.remove_item(self.product_1.id)
        assert len(self.cart.items) == 0
    
    def test_empty_cart_total(self):
        """Проверка, что сумма пустой корзины по-прежнему ноль."""
        assert self.cart.calculate_total() == 0.0
    
    def test_cart_clear_functionality(self):
        """Проверка старого функционала очистки корзины."""
        self.cart.add_item(self.product_1)
        self.cart.add_item(self.product_2)
        self.cart.clear()
        assert self.cart.is_empty()

Стратегическая взаимосвязь

Эти виды тестирования выстроены в последовательную стратегию:

  1. Разработчики предоставляют новый билд.
  2. QA инженер или CI/CD пайплайн запускает Smoke-тест.
  3. Если Smoke-тест провален → билд отвергается, возвращается разработчикам. Экономим время.
  4. Если Smoke-тест пройден → билд считается стабильным для приёмочного тестирования новой функциональности и, что критично, для запуска автоматизированного регрессионного тест-сьюта.
  5. Регрессионное тестирование выявляет, не затронули ли изменения старый код. Его глубина зависит от стратегии (полная регрессия, выборочная, по приоритетам).

Итог: Smoke-тестирование — это быстрый "чек-ап" для билда, стража перед воротами. Регрессионное тестирование — это глубокое "обследование" системы на предмет побочных эффектов после "лечения" (изменений кода). Успешный Smoke-тест — необходимое условие для начала регрессионного.

В чём разница между регрессионным и Smoke тестирования? | PrepBro