Что может быть причиной ошибки 500 при POST запросе и как это исправить
Что проверяют
Не знание кодов ответа, а то, как вы локализуете дефект. Тестировщик должен отделить проблему сервера от собственной ошибки в запросе, сузить условие до воспроизводимого минимума и отдать разработчику баг, который не вернётся с пометкой «не воспроизводится».
Как отвечать
Начните с главного: 500 всегда означает одно, сервер упал на обработке и не смог ответить осмысленно. Даже если тело запроса заведомо кривое, это дефект: на невалидные данные полагается 400 или 422 с описанием.
Дальше алгоритм:
- зафиксировать воспроизводимость: повторить тот же запрос, понять, падает всегда или через раз;
- сузить тело: убрать поля до минимума и добавлять по одному, пока не найдётся поле-триггер. Обычные кандидаты это
null, пустая строка, очень длинное значение, кириллица и эмодзи, число за границей диапазона, некорректная дата; - проверить обвязку:
Content-Type, кодировку, размер тела, токен, метод; - проверить состояние данных: повтор с тем же уникальным значением часто даёт 500 вместо 409, потому что ошибку от базы никто не обработал;
- взять идентификатор запроса из заголовков ответа и найти по нему стектрейс в логах, приложить к багу;
- сравнить с другим стендом и с предыдущей версией, чтобы понять, регрессия это или нет.
В баг идут шаги, точное тело запроса, полный ответ, время, идентификатор запроса и частота повторения.
Где спотыкаются
Списывают 500 на свои кривые данные и закрывают вопрос. Ответ сервера на любой ввод должен быть осмысленным, поэтому падение на мусорном поле это находка, а не ошибка тестировщика.
Заводят баг по одному наблюдению, без сужения и без следов из логов. Разработчик получает «иногда падает создание заказа», не воспроизводит и возвращает задачу, а время теряют обе стороны.
Не различают 500 и ответы шлюза. Коды 502, 503 и 504 указывают на прокси, перегрузку и таймаут, то есть на другой слой и другого адресата. И почти никто не проверяет, что осталось в системе после падения: недописанная запись часто ломает следующий же запрос.