Playwright предоставляет возможность взаимодействовать с
HTTP-запросами и ответами в процессе тестирования. Это полезно для
проверки правильности работы сетевых запросов, симуляции различных
условий или анализа производительности веб-приложения. В Playwright
события request и response позволяют
отслеживать, изменять или даже блокировать HTTP-запросы и ответы во
время выполнения тестов.
Событие request срабатывает, когда браузер отправляет
HTTP-запрос. Это событие предоставляет подробную информацию о запросе,
включая URL, метод (GET, POST и другие), заголовки, тело запроса и т. д.
Можно использовать это событие для мониторинга запросов, проверки их
содержимого или модификации запроса перед его отправкой.
const { webkit } = require('playwright');
(async () => {
const browser = await webkit.launch();
const page = await browser.newPage();
// Обработчик события request
page.on('request', request => {
console.log('Запрос отправлен:', request.method(), request.url());
});
await page.goto('https://example.com');
await browser.close();
})();
В этом примере, когда страница загружает ресурсы, мы выводим информацию о каждом отправленном запросе. Это может быть полезно для анализа запросов, например, чтобы проверить, отправляется ли правильный запрос к серверу.
В Playwright можно не только отслеживать запросы, но и изменять их
перед отправкой. Для этого используется метод route в
сочетании с событиями request. Этот метод позволяет
перехватывать запросы и менять их содержимое.
const { webkit } = require('playwright');
(async () => {
const browser = await webkit.launch();
const page = await browser.newPage();
// Перехватить запрос и изменить его
await page.route('**/api/**', (route, request) => {
const modifiedRequest = request.continue({
headers: {
...request.headers(),
'Authorization': 'Bearer custom_token',
},
});
});
await page.goto('https://example.com');
await browser.close();
})();
В данном примере перехватываются все запросы, которые содержат
api в URL. Мы добавляем заголовок
Authorization в запрос, чтобы передать авторизационный
токен.
Событие response срабатывает, когда браузер получает
ответ на HTTP-запрос. Это событие предоставляет информацию о статусе
ответа, его заголовках и теле. Оно полезно для анализа ответов сервера,
проверки корректности полученных данных и тестирования обработки
различных состояний ответов, например, 404 или 500.
const { webkit } = require('playwright');
(async () => {
const browser = await webkit.launch();
const page = await browser.newPage();
// Обработчик события response
page.on('response', response => {
console.log('Ответ получен:', response.status(), response.url());
});
await page.goto('https://example.com');
await browser.close();
})();
Этот код выводит информацию о каждом полученном ответе, включая статусный код и URL. Такой подход полезен для мониторинга того, какие ответы приходят от сервера в процессе тестирования.
Для дальнейшего анализа можно извлечь тело ответа. В зависимости от типа ответа (например, JSON или HTML) его можно обработать соответствующим образом.
const { webkit } = require('playwright');
(async () => {
const browser = await webkit.launch();
const page = await browser.newPage();
// Обработчик события response
page.on('response', async response => {
if (response.url().includes('api')) {
const data = await response.json();
console.log('Ответ JSON:', data);
}
});
await page.goto('https://example.com');
await browser.close();
})();
В данном примере, если ответ от сервера содержит данные в формате JSON, мы выводим их в консоль. Это может быть полезно для тестирования API или других сервисов, возвращающих данные в формате JSON.
Для более сложных тестов можно использовать оба события —
request и response — совместно. Например,
можно перехватывать запросы, проверять их параметры и затем
анализировать ответы, чтобы убедиться, что сервер возвращает ожидаемые
данные.
const { webkit } = require('playwright');
(async () => {
const browser = await webkit.launch();
const page = await browser.newPage();
// Перехват запроса и анализ ответа
page.on('request', request => {
if (request.url().includes('api')) {
console.log('Отправлен запрос на API:', request.url());
}
});
page.on('response', async response => {
if (response.url().includes('api')) {
const data = await response.json();
console.log('Получен ответ от API:', data);
}
});
await page.goto('https://example.com');
await browser.close();
})();
Здесь запросы, содержащие api в URL, отслеживаются и
анализируются вместе с ответами. Такой подход позволяет проводить
комплексное тестирование взаимодействия с сервером.
В Playwright можно не только перехватывать и модифицировать запросы, но и блокировать их. Это полезно, например, для тестирования работы страницы без загрузки определённых ресурсов или для эмуляции сбоев в сети.
const { webkit } = require('playwright');
(async () => {
const browser = await webkit.launch();
const page = await browser.newPage();
// Блокировка определённых запросов
await page.route('**/image/**', route => {
route.abort();
});
await page.goto('https://example.com');
await browser.close();
})();
В этом примере все запросы, связанные с загрузкой изображений, блокируются. Это может быть полезно для тестирования страниц с отключенными внешними ресурсами.
События request и response в Playwright
предоставляют мощные возможности для мониторинга и модификации сетевого
трафика. С их помощью можно отслеживать и изменять запросы,
анализировать ответы от сервера, а также проводить более глубокое
тестирование взаимодействия клиента с сервером. Использование этих
событий позволяет создавать более сложные и гибкие тесты, а также
эмулировать различные условия работы сети, что является важным аспектом
при тестировании веб-приложений.