Почему Тестирование Обработки Ошибок Важно
Пользователи неизбежно столкнутся с ошибками — удалённые страницы, невалидные формы, сетевые таймауты и серверные сбои. Как приложение обрабатывает ошибки, определяет доверие пользователей и устойчивость к атакам.
Обработка ошибок — одна из наиболее часто упускаемых областей тестирования. Разработчики фокусируются на happy path, а ошибки тестируются в последнюю очередь.
Категории HTTP-Кодов
| Диапазон | Категория | Значение |
|---|---|---|
| 2xx | Успех | Запрос выполнен |
| 3xx | Перенаправление | Клиент должен предпринять действие |
| 4xx | Ошибка клиента | Запрос невалиден |
| 5xx | Ошибка сервера | Сервер не смог выполнить валидный запрос |
Ключевые Коды для Тестирования
| Код | Значение | Когда тестировать |
|---|---|---|
| 200 | OK | Каждый успешный запрос |
| 301 | Перемещено навсегда | Миграции URL, HTTPS-редиректы |
| 400 | Плохой запрос | Невалидные данные |
| 401 | Не авторизован | Отсутствующая/невалидная аутентификация |
| 403 | Запрещено | Валидная auth, но недостаточно прав |
| 404 | Не найдено | Несуществующие URL |
| 429 | Слишком много запросов | Rate limiting |
| 500 | Внутренняя ошибка | Необработанные исключения |
| 503 | Сервис недоступен | Обслуживание, перегрузка |
Тестирование Кастомных Страниц Ошибок
Страница 404
- Несуществующий URL показывает кастомную 404 (не дефолтную серверную)
- Сохраняется брендинг сайта (шапка, подвал, стили)
- Навигация доступна
- Строка поиска присутствует
- Ссылки на популярные страницы
- Возвращается HTTP-код 404 (не 200)
- Работает на всех поддерживаемых языках
Страница 500
- Дружественное сообщение без технических деталей
- Нет stack traces, ошибок БД, путей к файлам
- Контактная информация или ссылка на поддержку
Страница 403
- Объясняет отказ в доступе без раскрытия причин
- Предлагает войти в систему
Тестирование Ошибок Валидации Форм
Клиентская Валидация
| Сценарий | Ожидаемое поведение |
|---|---|
| Обязательное поле пустое | «Это поле обязательно» рядом с полем |
| Невалидный формат email | «Введите корректный email» |
| Слишком короткий пароль | «Пароль должен содержать минимум 8 символов» |
| Пароли не совпадают | «Пароли не совпадают» |
Серверная Валидация
- Отключение JavaScript и отправка форм по-прежнему показывает ошибки
- Прямые API-запросы возвращают корректные сообщения
Безопасность
Что НЕ должны раскрывать ответы об ошибках: stack traces, SQL-ошибки, пути к файлам, версии сервера, внутренние IP.
Логин должен говорить «Неверный email или пароль» (не «Email не найден»).
Упражнение: Аудит Обработки Ошибок
Протестируйте обработку ошибок веб-приложения.
Часть 1: Страницы HTTP-Ошибок
| Тест | URL/Действие | Ожидаемо | Фактически | Статус |
|---|---|---|---|---|
| Страница 404 | /несуществующая-страница | Кастомная 404 с навигацией | ||
| 404 возвращает код | Проверить response code | HTTP 404 | ||
| 404 на другом языке | /ru/несуществующая | 404 на корректном языке | ||
| Страница 403 | Доступ к админке без auth | Кастомная 403 или redirect | ||
| Страница 500 | Вызвать серверную ошибку | 500 без stack trace |
Часть 2: Валидация Форм
| Поле | Значение | Ожидаемое сообщение |
|---|---|---|
| пусто | «Email обязателен» | |
| «не-email» | «Введите корректный email» | |
| Пароль | «123» | «Минимум 8 символов» |
| Обязательное поле | пропустить | «Это поле обязательно» |
Часть 3: Безопасность Сообщений
| Проверка | Пройдено/Нет |
|---|---|
| Нет stack traces ни в одном ответе | |
| Нет ошибок БД видимых пользователям | |
| Нет путей к файлам | |
| Нет версии сервера в заголовках | |
| Ошибка логина не раскрывает существование email |
Решение: Типичные Баги Обработки Ошибок
Баг 1: Страница 404 возвращает HTTP 200. Поисковые системы индексируют «не найдено» как реальный контент.
Баг 2: Stack trace виден на продакшене при 500. Серверная ошибка раскрывала полный стек.
Баг 3: Ошибки валидации исчезают при скролле. Ошибки вверху формы пропадали.
Баг 4: Логин раскрывает существование email. «Аккаунт не найден» помогает атакующим.
Баг 5: API возвращает SQL-запрос. Невалидный запрос раскрывал детали БД.
Баг 6: Страница ошибки без навигации. Только «Страница не найдена» без ссылок.
Автоматизация
test('страница 404 возвращает корректный код', async ({ page }) => {
const response = await page.goto('/несуществующая-страница');
expect(response.status()).toBe(404);
await expect(page.locator('nav')).toBeVisible();
});
Ключевые Выводы
- Обработка ошибок часто недотестирована — включайте её в стандартный план тестирования
- Кастомные страницы ошибок должны сохранять брендинг и предоставлять навигацию
- Сообщения об ошибках должны быть понятными: объяснять проблему и как исправить
- Никогда не раскрывайте технические детали в продакшен-ответах
- Предотвращайте утечку информации через ответы об ошибках
- Проверяйте, что HTTP-коды соответствуют типу ошибки