Что такое идемпотентность данных?

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

Ответ

Идемпотентность — это свойство операции, при котором её многократное выполнение приводит к тому же результату, что и однократное. В контексте баз данных и API это критически важно для обеспечения надёжности и предсказуемости.

Пример в SQL:

-- Идемпотентная операция UPSERT (MERGE в некоторых СУБД)
MERGE INTO users AS target
USING (SELECT 1 AS id, 'Alex' AS name) AS source
ON target.id = source.id
WHEN MATCHED THEN
    UPDATE SET target.name = source.name
WHEN NOT MATCHED THEN
    INSERT (id, name) VALUES (source.id, source.name);
-- Повторный вызов этого запроса не изменит конечное состояние данных.

Значение для тестирования (QA):

  • Идемпотентные тесты: Автоматизированные тесты (особенно интеграционные и end-to-end) должны быть спроектированы так, чтобы их можно было запускать многократно без накопления побочных эффектов. Это основа стабильного CI/CD-конвейера.
  • Восстановление состояния: Перед каждым тестовым прогоном часто используется идемпотентный сброс базы данных к известному начальному состоянию (например, через фикстуры или скрипты миграции).
  • Тестирование API: При тестировании REST API методы GET, PUT, DELETE должны быть идемпотентными. Это ключевой пункт проверки в тест-кейсах.