Что ожидается от сервиса при запросе с несуществующим городом и как проверять его поведение
Что проверяют
Пойдёте ли вы за ожидаемым результатом в требования вместо того, чтобы угадывать код ответа, и умеете ли разложить негативный сценарий на классы проверок, а не ограничиться одним запросом.
Как отвечать
Первое: ожидаемое поведение задаёт контракт, а не интуиция тестировщика. Если случай в спецификации не описан, это уже дефект требований, и вопрос идёт аналитику и разработчику.
Дальше есть два разумных варианта, и они различаются смыслом:
- поиск или список: города нет, значит результат пустой, ответ 200 с пустым массивом;
- адресация ресурса, когда город стоит в пути: 404 с телом об ошибке.
Код 400 уместен, когда значение не проходит проверку формата: пустое, слишком длинное, с запрещёнными символами. Ответ 500 в любом случае дефект.
Что проверять кроме кода:
- стабильное тело ошибки с машинно-читаемым кодом, а не только с текстом;
- отсутствие технических подробностей в ответе: стек, запрос, имя таблицы;
- заголовки и формат: тип содержимого, кодировка, запрет кеширования ошибки;
- классы значений: опечатка в существующем городе, другой регистр, кириллица против латиницы, пробелы, спецсимволы, очень длинная строка, пустой параметр, параметр не передан вовсе;
- время ответа: отсутствие результата не должно упираться в таймаут;
- запись в лог и поведение интерфейса: понятное сообщение вместо пустого экрана.
Где спотыкаются
Заявляют, что должно быть 404, как единственно верный вариант. Для поискового метода пустой результат это нормальный 200, и разработчик справедливо закроет такой отчёт с формулировкой «работает как задумано».
Второе: проверяют только код ответа. В теле может прийти null вместо объекта ошибки или текст на другом языке, и клиент падает именно на этом. Схему ответа проверяют наравне со статусом.
Третье: останавливаются на одном значении. Рядом живут опечатка, одноимённый город в другой стране и настоящий город, которого нет в справочнике конкретного поставщика данных. Последний случай чаще всего и всплывает в продакшене.