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

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

Проходите собеседования с ИИ помощником Hintsage

Краткий ответ

Отрицательный тест должен выявить, что сервис некорректно обрабатывает недопустимый вход: например, принимает его, возвращает неверный статус, раскрывает внутреннюю информацию или изменяет данные. Главный вывод — корректность системы проверяется не только на валидных сценариях, но и на ожидаемых ошибочных условиях.

Исторический контекст

Отрицательное тестирование сформировалось из практической необходимости проверять не только предусмотренный пользовательский путь, но и нарушения входных ограничений. Реальные пользователи, интеграции и внешние системы могут отправлять неполные, неверные или противоречивые данные.

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

Постановка проблемы

Если обязательное поле не задано, система должна предсказуемо отклонить запрос и сообщить о причине в согласованном формате. При отсутствии такой проверки возможны частично сохранённые данные, некорректные расчёты, непонятные сообщения пользователю или ошибка во внутреннем компоненте.

Особенно опасно молчаливое принятие невалидного запроса: внешне операция может выглядеть успешной, хотя данные уже повреждены. Такой дефект способен проявиться значительно позже и усложнить поиск первопричины.

Подробное решение

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

Ожидаемый результат обычно включает:

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

Отрицательный тест не означает отправку случайно испорченных данных во всех возможных формах. Набор следует строить по ограничениям требования: проверять отсутствие поля, пустое значение, неверный тип и пограничные недопустимые значения, если они имеют разные ожидаемые реакции.

У подхода есть компромисс: чрезмерное количество малозначимых невалидных комбинаций увеличивает стоимость тестирования. Приоритет следует отдавать нарушениям, которые могут привести к потере данных, обходу бизнес-правил, проблемам безопасности или сбою интеграции.

Ситуация из практики

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

Первый вариант дешевле, но может пропустить побочные эффекты. Второй лучше проверяет контракт, однако не обнаруживает изменения во внешних системах. Выбран третий вариант: запрос должен быть отклонён с понятной ошибкой, запись платежа и внешнее событие не должны появиться.

Такой выбор обоснован тем, что ошибочный платёж опаснее некорректного текста ответа. Проверка выявила дефект: сервис возвращал ошибку, но успевал создать незавершённую платёжную запись. Исправление валидации до изменения данных устранило риск накопления «осиротевших» операций.

Что кандидаты часто упускают

  1. Достаточно ли проверить, что невалидный запрос получил ошибку?

Нет. Нужно проверить отсутствие побочных эффектов и соответствие ошибки контракту. Сервис может вернуть ошибочный статус, но до этого записать данные или отправить событие, поэтому одной проверки ответа недостаточно.

  1. Чем отрицательное тестирование отличается от проверки обработки исключения?

Отрицательное тестирование шире: оно проверяет ожидаемую реакцию системы на нарушение входных или бизнес-условий. Исключение — лишь один возможный технический механизм; корректным результатом может быть контролируемый отказ без аварийного исключения.

  1. Нужно ли проверять все возможные невалидные значения обязательного поля?

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