«Протестируй форму регистрации на сайте» или «как бы ты тестировал интернет-магазин» проверяют, видишь ли ты веб целиком: не только функции, но и браузеры, экраны, сессии, безопасность и доступность.
Функциональность и формы
- Позитивные сценарии целиком, включая письма и редиректы.
- Каждое поле: классы и границы, пустое значение, пробелы, спецсимволы, эмодзи, очень длинные строки.
- Сообщения об ошибках: рядом с полем, понятные, не стирают введённое.
- Двойная отправка: быстрый двойной клик по «Оформить» не создаёт два заказа. Защита нужна на фронте (кнопка блокируется) и на бэке (идемпотентность).
- Ссылки, навигация «Назад» и «Вперёд», обновление страницы посреди сценария.
- Страница 404 отдаёт код 404, а не 200 с текстом «не найдено».
Кроссбраузерность
Браузеры отличаются движками:
| Движок | Браузеры |
|---|---|
| Blink (Chromium) | Chrome, Edge, Opera, Яндекс Браузер |
| Gecko | Firefox |
| WebKit | Safari |
Три браузера на Chromium почти не расширяют покрытие. Минимальный набор: Chrome, Firefox, Safari, а точный список берут из аналитики своих пользователей.
На iOS браузеры по правилам Apple используют WebKit (кроме отдельных регионов вроде ЕС), поэтому Chrome на iPhone обычно ведёт себя как Safari, а не как Chrome на Android.
Адаптивность
Эмуляция устройств в DevTools быстро проверяет ширины и точки перелома вёрстки. Но она не воспроизводит настоящий мобильный браузер, клавиатуру и производительность, поэтому основные сценарии повторяют на реальных устройствах или в облачных фермах.
Сессия и хранилища
- Выход уничтожает сессию на сервере. Кнопка «Назад» после выхода не показывает личные данные (страницы отдаются с запретом кеширования).
- Сессия истекает по таймауту, работа в двух вкладках, вход с двух устройств, смена пароля завершает другие сессии.
- Флаги куки сессии:
| Атрибут | Зачем |
|---|---|
HttpOnly | JavaScript не читает куку, меньше ущерб от XSS |
Secure | Только по HTTPS |
SameSite | Ограничивает отправку с чужих сайтов, защита от CSRF |
- Хранилища: cookie уходит на сервер с каждым запросом,
localStorageживёт до очистки и общий для вкладок,sessionStorageживёт с вкладкой, IndexedDB для больших данных. Всё видно во вкладке Application.
Базовая безопасность для тестировщика
Это не пентест, но несколько проверок обязательны. Только на своих стендах и с разрешения.
- XSS: ввести в поле
<img src=x onerror=alert(1)>и посмотреть страницу, где текст выводится. Правильно: текст показан буквально. - SQL-инъекция: символ
'в поиске не должен давать 500 с текстом ошибки базы. - IDOR: подставить чужой номер заказа в адрес
/orders/10452и в запрос API. Правильно: 403 или 404. - Обход фронта: ограничения интерфейса повторить запросом в API.
- Пароль не уходит в URL и логи, всё идёт по HTTPS.
Доступность
- Пройти сценарий только клавиатурой: Tab, Shift+Tab, Enter, пробел, Escape. Фокус виден.
- Контраст текста по WCAG уровня AA: 4,5:1 для обычного текста, 3:1 для крупного.
- У картинок есть
alt, у полей есть подписи. - Lighthouse в DevTools даёт быстрый автоматический отчёт, но не заменяет ручную проверку.
Время и локализация
Часовые пояса частый источник багов. «Акция до 23:59 31 октября по Москве» проверяй у пользователя из Екатеринбурга в 01:30 1 ноября по местному времени: это 23:30 по Москве, акция ещё действует. Также проверь форматы дат, валют и длинные переводы, которые ломают вёрстку.
Частые ошибки
- Тестировать только в Chrome.
- Проверять адаптивность только эмуляцией.
- Считать ограничения интерфейса защитой.
- Забывать про двойную отправку и кнопку «Назад».
Что спросят на собесе
- Как протестировать форму регистрации?
- Какие браузеры выбрать для тестирования и почему?
- Что проверить в сессии и куках?
- Какие простые проверки безопасности ты делаешь?
- Как проверить доступность без специальных инструментов?