В тестировании веб-приложений важной частью является проверка того,
как приложение взаимодействует с сетевыми запросами. Playwright
предоставляет мощный инструмент для перехвата и контроля HTTP-запросов и
ответов, позволяя тестировщикам изменять их, анализировать или
блокировать. Один из таких инструментов — метод route,
который используется для перехвата и манипуляции с запросами на
определенные URL.
routeМетод route в Playwright позволяет перехватывать сетевые
запросы и дает возможность вмешиваться в их обработку до того, как они
будут отправлены или получены. При вызове route,
тестировщик может определить поведение запросов и ответов через
несколько различных методов, таких как изменение URL, изменение тела
запроса, блокировка или подмена ответов.
Пример синтаксиса:
page.route('**/api/v1/users', route => {
route.continue(); // продолжить выполнение запроса
});
В данном примере перехватываются все запросы, адресуемые на API
/api/v1/users, и на них применяется метод
continue, который позволяет запросу продолжить
выполнение.
Перехват запросов с помощью route позволяет
тестировщикам анализировать и управлять запросами, которые отправляются
браузером. Это может быть полезно для проверки, выполняются ли нужные
запросы, что передается в заголовках или теле запроса.
page.route('**/api/v1/data', route => {
console.log(route.request().url()); // Выводит URL перехваченного запроса
route.continue(); // Позволяет запросу продолжить выполнение
});
Здесь метод route.request() используется для получения
информации о запросе, а метод route.continue() сообщает
Playwright продолжить выполнение запроса.
Одной из сильных сторон использования route является
возможность модификации запросов перед их отправкой. Это может быть
полезно для тестирования различных сценариев, таких как отправка
измененных данных или добавление новых заголовков.
page.route('**/api/v1/data', route => {
const modifiedRequest = route.request().clone(); // Клонируем запрос для изменения
modifiedRequest.headers()['Authorization'] = 'Bearer new_token'; // Меняем заголовок
route.continue({ request: modifiedRequest }); // Применяем изменения
});
В этом примере заголовок Authorization изменяется перед
отправкой запроса, что позволяет имитировать сценарии с авторизацией или
тестировать доступ для различных пользователей.
Иногда в процессе тестирования может быть полезно заблокировать определенные запросы, чтобы проверить, как приложение ведет себя в условиях отсутствия данных или с неудачным ответом от сервера.
page.route('**/api/v1/data', route => {
route.abort(); // Блокирует запрос
});
При использовании abort, Playwright прекращает
выполнение запроса, и приложение не получает ответа. Это может быть
полезно для проверки обработки ошибок в случае отсутствия сетевого
соединения или когда сервер недоступен.
Вместо того, чтобы отправлять реальные запросы на сервер, можно
использовать метод route.fulfill для подмены ответов. Это
позволяет тестировщикам использовать заранее подготовленные данные для
проверки функциональности приложения, не загружая их с удаленного
сервера.
page.route('**/api/v1/data', route => {
route.fulfill({
status: 200,
contentType: 'application/json',
body: JSON.stringify({ success: true, data: [1, 2, 3] })
});
});
В данном примере запрос на получение данных будет перехвачен, и вместо ответа от сервера будет возвращен заранее подготовленный JSON с успешным статусом и данными.
Так же, как и с запросами, Playwright позволяет модифицировать ответы перед их отправкой в приложение. Это может быть полезно для имитации различных условий, например, тестирования обработки ошибок или изменения данных в ответах от сервера.
page.route('**/api/v1/data', route => {
route.continue({
body: JSON.stringify({ error: 'Internal Server Error' }),
status: 500
});
});
В данном примере перехватывается запрос, и в ответ возвращается ошибка с кодом 500, что позволяет проверить, как приложение обрабатывает сбой на сервере.
Метод route также позволяет фильтровать запросы с
помощью различных паттернов URL. Это особенно полезно, когда нужно
перехватывать запросы только определенных типов или с конкретными
параметрами.
page.route('**/*.{jpg,png}', route => {
route.abort(); // Блокируем все запросы на изображения
});
В данном примере блокируются все запросы, которые касаются
изображений (файлы с расширениями .jpg и
.png).
Playwright поддерживает использование регулярных выражений для более гибкой фильтрации запросов. Это позволяет перехватывать запросы по более сложным паттернам.
page.route(/.*\/api\/v1\/[a-z]+/, route => {
route.continue(); // Перехватываем все запросы, содержащие /api/v1/ и буквы в конце
});
Этот код перехватывает все запросы, адресуемые на API с динамической частью URL, которая может содержать любые латинские буквы.
routeroute позволяет
перехватывать и изменять как запросы, так и ответы, что дает
тестировщику большую свободу в манипуляциях с сетевыми
взаимодействиями.Метод route является мощным инструментом для работы с
сетевыми запросами в Playwright. С помощью этого метода можно
перехватывать, изменять, блокировать или подменять запросы и ответы, что
значительно расширяет возможности тестирования. Манипуляция с сетевыми
взаимодействиями позволяет создать более гибкие и устойчивые тесты, а
также улучшить процесс отладки и мониторинга работы веб-приложений.