Что означает код ответа сервера 500 при отправке запроса?
Что проверяют
Отличаете ли вы ошибку сервера от ошибки клиента и знаете ли, что делает с таким ответом тестировщик. Проверяют не заучивание кода, а действия: заводить дефект или искать причину у себя.
Как отвечать
500 Internal Server Error означает, что сервер не смог обработать запрос из-за собственной проблемы, чаще всего из-за необработанного исключения. Весь класс 5xx это ответственность сервера, 4xx это ответственность клиента. Вывод для тестировщика жёсткий: 500 это дефект всегда, даже если запрос был заведомо кривой. На кривой ввод положено отвечать 400 или 422 с понятным телом, а не падать.
Порядок действий:
- зафиксировать полный запрос: метод, путь, заголовки, тело, время и идентификатор запроса из ответа или трассировки;
- проверить воспроизводимость и сократить запрос до минимального падающего варианта;
- заглянуть в логи сервиса за это время, приложить фрагмент к дефекту;
- отделить соседей по классу: 502 значит, что шлюз получил негодный ответ, 503 что сервис недоступен или перегружен, 504 что истёк таймаут за шлюзом. Причины и ответственные у них разные;
- проверить, что наружу не уходит стек вызовов и строки подключения, это отдельный дефект безопасности.
Типичные причины стоит назвать самому: пустое поле там, где его не ждали, недоступная база, не накатанная миграция, исчерпанный пул соединений, ошибка разбора ответа стороннего сервиса.
Где спотыкаются
Списывают 500 на окружение и просто повторяют запрос. Ошибка при этом никуда не девается и уезжает в релиз, а история про нестабильный стенд повторяется каждый спринт.
Пишут в дефекте одну строку про полученный код. Без запроса, времени, окружения и идентификатора разработчик ищет иголку в логах, и дефект возвращается с резолюцией о невоспроизводимости.
Проверяют только успешные сценарии. Невалидный формат тела, пропущенное обязательное поле, слишком длинная строка, чужой идентификатор, повтор того же запроса: именно здесь вместо 400 и 403 чаще всего вылезает 500.