Что такое неидемпотентный метод в контексте HTTP и тестирования?

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

Ответ

Неидемпотентный HTTP-метод — это метод, при повторном выполнении которого с теми же данными состояние системы может измениться, или результат может быть разным. Это критично для тестирования, так как повторные запросы (например, из-за retry-логики или повторного запуска теста) могут привести к нежелательным побочным эффектам.

Основные примеры:

  • HTTP POST (создание нового ресурса) — каждый вызов обычно создает новую сущность.
  • HTTP PATCH (частичное обновление) — может быть неидемпотентным в зависимости от реализации.

Пример для тестирования API:

POST /api/orders
Content-Type: application/json

{"productId": 123, "quantity": 2}

Повторная отправка этого запроса, скорее всего, создаст два идентичных заказа, что является ошибкой, если это не предполагается бизнес-логикой.

На что обращать внимание QA:

  1. Проектирование тестов: Для неидемпотентных операций (создание, списание) нужно обеспечить изоляцию данных (уникальные идентификаторы, очистка перед/после теста).
  2. Тестирование безопасности: Проверка, как система обрабатывает дублирующиеся запросы (защита от повторных списаний).
  3. Верификация побочных эффектов: После выполнения такого запроса нужно проверять не только ответ, но и итоговое состояние системы (количество записей в БД, баланс).