Всегда ли статус 200 означает успешный ответ
Что проверяют
Проверяете ли вы результат по существу или останавливаетесь на коде ответа. Для тестировщика это вопрос про глубину проверок.
Как отвечать
Нет. Код 200 говорит только о том, что HTTP-обмен состоялся и сервер отдал ответ. Что внутри, он не гарантирует.
Типичные случаи, когда 200 не означает успех:
- ошибка в теле:
{"success": false, "error": "недостаточно прав"}с кодом 200. Так делают самодельные API и почти всегда SOAP, где ошибка приезжает какsoap:Faultс кодом 200; - пустой или неполный результат: список пришёл, но без части данных, потому что смежный сервис не ответил, а обработка это проглотила;
- страница ошибки вместо данных: сервер отдал HTML с текстом «что-то пошло не так» и кодом 200. Для поисковика это мягкая ошибка, для теста ложный успех;
- операция принята, но не выполнена: асинхронный сценарий, где 200 означает «положили в очередь», а результат появится позже;
- не тот ресурс: редирект увёл на другой адрес, автотест прошёл, хотя данные не те.
Что из этого следует для проверок: код это только первая ступень. Дальше сверяют структуру и содержимое тела (лучше по схеме), заголовки, наличие ожидаемых полей, а для асинхронных операций доводят проверку до конечного состояния в системе-получателе.
Полезно добавить обратную сторону: не-200 тоже не всегда ошибка. 204 это успех без тела, 301 и 302 нормальные перенаправления, 304 означает, что данные не изменились и это штатное поведение кеша.
Где спотыкаются
Пишут автотест с единственной проверкой кода ответа и считают ручку покрытой.
Заводят дефект на 404 при обращении к несуществующей записи, хотя это корректное поведение.
Не отличают «принято» от «выполнено» в асинхронных сценариях.