Практика обхода пользовательского интерфейса при авторизации экономит существенное время выполнения тестов и снижает нестабильность, связанную с рендерингом форм, ожиданием селекторов и манипуляциями с DOM. Суть подхода заключается в том, чтобы получить токен или session cookie напрямую через запрос к API и установить его в браузер до открытия защищённых страниц.
Авторизация через UI включает заполнение полей, ожидание ответов и навигацию. При десятках тестов подобные действия создают лишнюю нагрузку. В отличие от UI-процесса, API логин опирается на программный вызов эндпоинта аутентификации. После успешного ответа тест помещает токены аутентификации в localStorage или cookies, затем загружает нужный маршрут приложения уже в авторизованном состоянии.
Для корректной работы необходим доступ к эндпоинтам аутентификации, а
также знание структуры ответов. Как правило, backend возвращает
JWT-токен или session-id. Cypress позволяет отправлять запросы через
cy.request(), передавая учётные данные и получая ответ без
необходимости визуального взаимодействия.
cy.request('POST', '/api/auth/login', {
email: 'user@example.com',
password: 'secret'
}).then((response) => {
const { token } = response.body;
window.localStorage.setItem('authToken', token);
});
После установки токена последующие посещения защищённых URL проходят без отображения страницы логина. Такой подход существенно ускоряет цепочки тестов, особенно когда требуется многократно входить под разными ролями.
Некоторые приложения используют cookie для идентификации сессии.
Cypress поддерживает чтение и установку cookies, что позволяет
имитировать состояние авторизованного пользователя. Если токен хранится
в localStorage, удобнее всего устанавливать значение перед
cy.visit(). Когда применяется cookie, бывает достаточно
задать её через cy.setCookie(), а затем перейти на
страницу.
Важно учитывать, что токен или cookie могут иметь срок действия. В сценариях длительных прогонов практикуется обновление токена через повторный запрос или запуск нового контекста авторизации. Если backend требует дополнительные заголовки, включая CSRF-токены, их также получают заранее и помещают в хранилище или cookie.
Использование API логина уменьшает количество потенциальных точек отказа в тестах: исчезают проблемы с анимациями, непредсказуемыми состояниями UI, медленные селекторы и всплывающие ошибки. На больших тестовых наборах выигрыш во времени измеряется минутами и часами, а количество флейковых падений заметно снижается.
В кодовой базе тестов полезно вынести механизм bypass в отдельную функцию или кастомную команду Cypress. Это повышает читаемость и снимает дублирование. При изменении эндпоинтов или формата ответа обновляется только эта команда, а сами тесты продолжают работать без изменений.
В SPA-приложениях (React, Vue, Angular) токен зачастую хранится в
localStorage. В классических серверных приложениях роль
состояния берет на себя cookie, которую сервер задает через
Set-Cookie. Cypress корректно обрабатывает оба случая, но
при работе с cookie иногда требуется выставить флаги
sameSite, secure или домен. Важно соблюдать ту
же доменную зону, что и у приложения, иначе браузер отклонит cookie.
После установки токена тест открывает защищенный маршрут напрямую. В
SPA при этом может потребоваться подождать инициализации приложения и
загрузки данных пользователя. Cypress обеспечивает возможность ожидания
через cy.intercept() и ожидание конкретных запросов к
backend, чтобы страница полностью отрисовала актуальное состояние.
Работа через bypass подразумевает хранение тестовых учётных данных в
конфигурации или переменных окружения. Для сокращения рисков пароли и
секреты переносят в CYPRESS_ переменные окружения, а также
используют закрытые тестовые окружения. Подмена данных при авторизации
позволяет моделировать разные роли и сценарии доступа без излишнего
UI-навигационного шума.
В CI системах bypass UI становится стандартной практикой. Тесты стартуют быстрее, а окружение выдерживает большие объёмы запросов. При масштабировании кластера тестов уменьшается вероятность локов на UI элементах и очередей в рендере, что особенно заметно на headless-прогонах.
Иногда backend реализует многошаговый логин: выдаёт CSRF-токен, затем
ожидает отправку формы, после чего устанавливает cookie. В подобных
сценариях последовательность шагов имитируется через несколько
cy.request(). Если требуется 2FA, для тестов
создают отдельный эндпоинт, возвращающий код сразу или отключающий
второй фактор, иначе bypass теряет преимущество.
Практика обхода UI при логине стала стандартом в автоматизации веб-тестирования с Cypress и используется как в небольших командах, так и в проектах корпоративного уровня, где важны скорость и надёжность.