Урок по треку Основы тестирования и тест-дизайн 6 мин

Тестирование веб-приложений за 7 минут

Формы, кроссбраузерность, адаптив, куки и сессии, базовая безопасность и доступность.

«Протестируй форму регистрации на сайте» или «как бы ты тестировал интернет-магазин» проверяют, видишь ли ты веб целиком: не только функции, но и браузеры, экраны, сессии, безопасность и доступность.

Функциональность и формы

  • Позитивные сценарии целиком, включая письма и редиректы.
  • Каждое поле: классы и границы, пустое значение, пробелы, спецсимволы, эмодзи, очень длинные строки.
  • Сообщения об ошибках: рядом с полем, понятные, не стирают введённое.
  • Двойная отправка: быстрый двойной клик по «Оформить» не создаёт два заказа. Защита нужна на фронте (кнопка блокируется) и на бэке (идемпотентность).
  • Ссылки, навигация «Назад» и «Вперёд», обновление страницы посреди сценария.
  • Страница 404 отдаёт код 404, а не 200 с текстом «не найдено».

Кроссбраузерность

Браузеры отличаются движками:

ДвижокБраузеры
Blink (Chromium)Chrome, Edge, Opera, Яндекс Браузер
GeckoFirefox
WebKitSafari

Три браузера на Chromium почти не расширяют покрытие. Минимальный набор: Chrome, Firefox, Safari, а точный список берут из аналитики своих пользователей.

На iOS браузеры по правилам Apple используют WebKit (кроме отдельных регионов вроде ЕС), поэтому Chrome на iPhone обычно ведёт себя как Safari, а не как Chrome на Android.

Адаптивность

Эмуляция устройств в DevTools быстро проверяет ширины и точки перелома вёрстки. Но она не воспроизводит настоящий мобильный браузер, клавиатуру и производительность, поэтому основные сценарии повторяют на реальных устройствах или в облачных фермах.

Сессия и хранилища

  • Выход уничтожает сессию на сервере. Кнопка «Назад» после выхода не показывает личные данные (страницы отдаются с запретом кеширования).
  • Сессия истекает по таймауту, работа в двух вкладках, вход с двух устройств, смена пароля завершает другие сессии.
  • Флаги куки сессии:
АтрибутЗачем
HttpOnlyJavaScript не читает куку, меньше ущерб от 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.
  • Проверять адаптивность только эмуляцией.
  • Считать ограничения интерфейса защитой.
  • Забывать про двойную отправку и кнопку «Назад».

Что спросят на собесе

  • Как протестировать форму регистрации?
  • Какие браузеры выбрать для тестирования и почему?
  • Что проверить в сессии и куках?
  • Какие простые проверки безопасности ты делаешь?
  • Как проверить доступность без специальных инструментов?

Закрепите за 5 минут

После урока в тренажёре 3-5 проверочных вопросов, дальше модуль уходит в повторения.