Как будешь исследовать ошибку, если работающий ранее запрос через время перестал работать?

«Как будешь исследовать ошибку, если работающий ранее запрос через время перестал работать?» — вопрос из категории API тестирование, который задают на 24% собеседований AQA / Automation. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

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

  1. Воспроизведение и первичный анализ:

    • Запускаю упавший запрос вручную через Postman или cURL, чтобы убедиться, что проблема не в тестовом скрипте.
    • Фиксирую точный HTTP-статус код и тело ответа. Ошибка 5xx указывает на сервер, 4xx — на клиентскую сторону (авторизация, неверные данные).
      curl -v "https://api.example.com/v1/users" -H "Authorization: Bearer <token>"
  2. Проверка входных данных и окружения:

    • Данные запроса: Не изменились ли обязательные параметры, заголовки (особенно Content-Type), тело запроса? Сравниваю с работавшим ранее примером.
    • Аутентификация: Не истек ли токен? Не изменились ли права доступа у используемой учетной записи?
    • Окружение: На каком стенде падает (dev, staging, prod)? Возможно, деплой на одном из них привел к изменениям.
  3. Анализ изменений:

    • API-контракт: Сверяюсь с Swagger/OpenAPI документацией. Не было ли обновления версии API (/v1 -> /v2)?
    • История репозитория: Ищу коммиты, связанные с этим эндпоинтом, за период, когда тест начал падать. Возможно, изменилась бизнес-логика или валидация.
  4. Исследование серверной части:

    • Логи приложения: Запрашиваю логи (Kibana, Grafana Loki) по идентификатору запроса (X-Request-ID) или по времени ошибки. Ищу исключения (Exceptions, Stack Traces).
    • Логи инфраструктуры: Проверяю логи балансировщика (Nginx, Apache) на предмет таймаутов или ошибок подключения к бэкенду.
    • Метрики и мониторинг (Grafana, Prometheus): Были ли скачки нагрузки, исчерпание памяти, повышенное количество ошибок?
  5. Проверка зависимостей и сети:

    • Сторонние сервисы: Не зависает ли запрос к внешнему API или базе данных? Проверяю их статус.
    • Сетевая доступность: Использую telnet или nc, чтобы проверить, доступен ли хост и порт из тестового окружения. Не изменились ли firewall-правила?

После локализации проблемы (например, истекший токен или изменение формата поля в ответе) я:

  1. Фиксирую баг в трекере (Jira) с полными данными для воспроизведения.
  2. Обновляю автотест: Если изменение было запланированным (например, новая валидация), корректирую тестовые данные и проверки. Если это баг — добавляю тест на этот негативный сценарий, чтобы он отслеживался в будущем.