Что такое Sanity-тестирование (проверка работоспособности)?

Ответ

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

Ключевые характеристики:

  • Узкая направленность: Проверяется только измененный модуль или функция.
  • Неглубокое погружение: Нет детального тестирования всех сценариев.
  • Быстрое выполнение: Занимает минуты или часы.
  • Цель: Решить, можно ли передавать сборку на более глубокое (регрессионное) тестирование.
Отличие от Smoke-тестирования: Smoke-тестирование Sanity-тестирование
Проверка стабильности сборки в целом. Проверка рациональности конкретного изменения (логики).
Ответ на вопрос: "Запускается ли билд?" Ответ на вопрос: "Работает ли исправленная функция?"
Выполняется перед sanity-тестированием. Выполняется после успешного smoke-теста.

Пример: После исправления бага с расчетом скидки в корзине:

# Sanity-тест для проверки фикса
def test_cart_discount_sanity():
    cart = Cart()
    cart.add_item(price=1000, quantity=1)
    cart.apply_promo_code("SUMMER10")
    # Проверяем, что скидка применилась
    assert cart.total_price == 900  # 10% скидка
    # Проверяем, что базовая функциональность не сломана
    assert cart.items_count == 1

Ответ 18+ 🔞

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

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

Короче, суть:

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

А теперь, чтобы ты не путал, как последний мудак, вот тебе разница с дымовым тестом (smoke):

Smoke-тест (Дымовой) Sanity-тест (Вменяемость)
Это как поджечь бумажку под новой машиной. Дымится? Не взрывается? Ну, вроде можно заводить. Это как после замены колодок проехать 10 метров и нажать на тормоз. Машина остановилась? Отлично, логика ремонта верна.
Вопрос: "Сборка вообще запускается, блядь, или это просто куча битого кирпича?" Вопрос: "А та херня, которую мы чинили, теперь работает так, как мы задумали, или опять какая-то хуйня?"
Делается ПЕРВЫМ, прямо после сборки. Делается ПОСЛЕ того, как дымовой прошёл.

Ну и пример, чтобы совсем пиздец стало понятно. Пофиксили баг со скидкой в корзине. Раньше, если ввести промокод "ЛЕТО15", счёт становился минус пятнадцать тысяч, и магазин тебе ещё доплачивать должен был, хитрая жопа.

Вот саньти-тест:

# Саньти-тест для проверки фикса
def test_cart_discount_sanity():
    cart = Cart()
    cart.add_item(price=1000, quantity=1)
    cart.apply_promo_code("SUMMER10")
    # Проверяем, что скидка применилась (а не наебка какая-то)
    assert cart.total_price == 900  # 10% скидка
    # И заодно глянем, что мы вообще не сломали базовую хуйню
    assert cart.items_count == 1

Видишь? Мы не проверяем все 150 промокодов, не пытаемся применить скидку к уже скидочному товару, не проверяем корзину на 500 позиций. Мы просто смотрим: ага, фикс в принципе работает, и корзина не рассыпалась в пыль. Всё, sanity check пройден, можно нести эту версию тестерам, пусть они её уже ебут как хотят.