Что такое критерии входа (Entry Criteria) в тестировании?

Ответ

Критерии входа (Entry Criteria) — это набор обязательных условий, которые должны быть выполнены до начала определённого этапа тестирования (например, старта тест-рана или нового спринта). Их цель — гарантировать, что тестирование начинается в управляемых и готовых условиях, что повышает его эффективность.

Типичные критерии входа включают:

  1. Готовность тестируемого объекта:
    • Стабильная сборка (build), прошедшая smoke-тесты.
    • Отсутствие критических блокирующих дефектов в базовой функциональности.
  2. Готовность тестовой среды:
    • Тестовое окружение (серверы, БД, сторонние сервисы) развёрнуто, настроено и доступно.
    • Проведены health-чеки среды.
  3. Готовность тестовых артефактов:
    • Утверждённые и актуальные требования/спецификации.
    • Подготовленные и ревьюированные тест-кейсы, чек-листы или тест-скрипты.
    • Наличие необходимых тестовых данных.
  4. Готовность команды:
    • Тестировщики ознакомлены с требованиями и обладают необходимыми доступом и инструментами.

Практический пример (для API-тестирования): Перед запуском полного набора API-тестов можно автоматизировать проверку критериев входа:

import requests

# Критерий 1: API доступно
health_response = requests.get("https://api.example.com/health", timeout=5)
assert health_response.status_code == 200, "API недоступно"

# Критерий 2: База данных подключена
db_status = health_response.json().get("database")
assert db_status == "connected", "Нет подключения к БД"

# Критерий 3: Ключевой эндпоинт возвращает ожидаемую структуру
smoke_response = requests.get("https://api.example.com/v1/users/1")
assert smoke_response.status_code in [200, 404], "Ключевой эндпоинт нестабилен"
assert "id" in smoke_response.json(), "Неверный формат ответа"

print("Критерии входа выполнены. Можно начинать тестирование.")

Зачем это нужно? Запуск тестов без выполнения критериев входа ведёт к ложным срабатываниям, трате времени на отладку проблем окружения, а не функциональности, и в целом снижает доверие к результатам тестирования.

Ответ 18+ 🔞

Да ты послушай, что эти ваши «критерии входа» вытворяют! Это ж как священный ритуал, блядь, без которого к тестам подступаться — себя не уважать. Представь: ты такой весь воодушевлённый, щас начнёшь баги ловить, а тебе говорят — стопэ, дружок-пирожок, сначала докажи, что мир не рухнет.

Критерии входа — это, по сути, список ультиматумов, которые должны быть выполнены до того, как ты вообще пальцем пошевелишь, чтобы начать тестировать что-то серьёзное. Чтобы не получилось, как в том анекдоте: «начали строить, а потом чертежи потеряли». Цель — не начинать в ебучем хаосе, а в чём-то управляемом, иначе вся работа — в помойку.

Что обычно в этом священном списке?

  1. Чтобы тестируемая хрень была хоть немного адекватна:
    • Сборка (build) не разваливается при запуске, smoke-тесты прошла. Не та, что «ой, мы забыли половину файлов закоммитить».
    • Нет таких дефектов, которые сразу всё кладут. То есть дверь в приложение должна хотя бы открываться, а не вываливаться с ошибкой «простите, мы всё сломали».
  2. Чтобы среда тестовая не была похожа на декорацию к фильму ужасов:
    • Сервера не горят синим пламенем, база данных не отвечает философским «я есть ничто». Всё поднято, доступно и не падает от чиха.
    • Health-чеки пройдены, а не как в той басне — «работает у меня всё, вы что».
  3. Чтобы у тебя были хоть какие-то карты для этого плавания:
    • Требования, которые уже не менялись пять минут назад. Хотя бы утверждённая версия, блядь.
    • Тест-кейсы или чек-листы, которые кто-то уже глазами видел, а не сгенерировал рандомно.
    • Тестовые данные, а не «придумай сам, мы веруем в твою креативность».
  4. Чтобы команда была в курсе, где она находится:
    • Тестировщики не сидят с пустыми экранами, глядя в потолок. У них есть доступ, инструменты и хотя бы смутное понимание, что тестировать.

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

import requests

# Критерий 1: API вообще живо?
health_response = requests.get("https://api.example.com/health", timeout=5)
assert health_response.status_code == 200, "API недоступно, иди разбирайся, почему оно труп"

# Критерий 2: А база данных-то подключена?
db_status = health_response.json().get("database")
assert db_status == "connected", "База данных в отлучке. Тесты будут плакать."

# Критерий 3: Ключевой эндпоинт хоть что-то вменяемое возвращает?
smoke_response = requests.get("https://api.example.com/v1/users/1")
assert smoke_response.status_code in [200, 404], "Ключевой эндпоинт ведёт себя как истеричка"
assert "id" in smoke_response.json(), "Формат ответа — полная абстракция, ни хуя не понятно"

print("Критерии входа выполнены. Можно начинать тестирование, пока всё не сломалось.")

А зачем весь этот цирк? Да затем, ёпта, чтобы не тратить три часа на выяснение, почему твои тесты не работают, а потом охуеть, что API вообще лежало с утра. Чтобы результаты были хоть чуть-чуть предсказуемы, а не как лотерея. Чтобы доверия к процессу было больше, чем ноль ебать. Иначе получается чистый театр абсурда: все делают вид, что работают, а по факту — мартышлюшка с гранатой.