HAR файлы для записи и воспроизведения трафика
Playwright предоставляет разработчикам и тестировщикам мощные инструменты для работы с веб-страницами, включая возможность записи и воспроизведения сетевого трафика. Одним из ключевых форматов для работы с сетевыми запросами является HAR (HTTP Archive) — формат файла, который позволяет сохранять подробную информацию о запросах и ответах между клиентом и сервером. Этот формат используется для анализа и отладки сетевого взаимодействия, а также может быть полезен при воспроизведении запросов в тестах.
HAR файл представляет собой JSON-объект, который включает в себя множество полезных данных о сетевых запросах. Основные разделы файла включают:
log: Основной объект, который содержит информацию о всех запросах.
Каждый объект в массиве entries описывает один запрос и
ответ и включает следующие ключевые поля:
HAR файлы полезны для анализа производительности, отладки и создания тестов для воспроизведения определённых сценариев трафика.
Для записи трафика с помощью Playwright необходимо использовать функциональность, которая позволяет отслеживать сетевые запросы во время выполнения теста. Чтобы записывать запросы в HAR файл, необходимо следовать нескольким простым шагам.
Для начала нужно создать контекст браузера и включить сетевой мониторинг. Playwright предоставляет встроенные методы для работы с запросами и ответами:
const { chromium } = require('playwright');
(async () => {
const browser = await chromium.launch();
const context = await browser.newContext();
// Создание HAR файла
const har = await context.tracing.start({ path: 'example.har' });
const page = await context.newPage();
await page.goto('https://example.com');
// Завершение записи и сохранение HAR файла
await context.tracing.stop();
await browser.close();
})();
В данном примере создается контекст браузера, который позволяет
записывать все запросы и ответы в HAR файл. Важно отметить, что для
записи используется метод tracing.start(), а результат
сохраняется в файл по указанному пути. После завершения работы с
контекстом необходимо вызвать tracing.stop() для завершения
записи.
Если требуется записать только сетевой трафик (без добавления
сведений о действиях на странице), можно использовать возможности
Playwright для отслеживания событий, связанных с запросами. Для этого
используется событие page.on('route'):
const { chromium } = require('playwright');
(async () => {
const browser = await chromium.launch();
const context = await browser.newContext();
const page = await context.newPage();
// Запись запросов
page.on('route', route => {
console.log(`Запрос: ${route.url()}`);
route.continue();
});
await page.goto('https://example.com');
await browser.close();
})();
Этот код позволяет отслеживать все запросы, которые выполняются при посещении страницы, и выводить их в консоль. Запросы можно сохранять в HAR файл, используя дополнительную логику.
После того как HAR файл был создан, его можно использовать для воспроизведения записанного трафика в тестах. Playwright не предоставляет прямого метода для “воспроизведения” HAR файлов, но возможно реализовать такую функциональность, перехватывая запросы и подставляя данные из HAR файла.
Для воспроизведения трафика из HAR файла необходимо сначала его прочитать и извлечь данные о запросах. После этого можно использовать Playwright для перехвата этих запросов и возвращения заранее заданных ответов.
Пример кода, который демонстрирует этот процесс:
const { chromium } = require('playwright');
const fs = require('fs');
(async () => {
const harData = JSON.parse(fs.readFileSync('example.har', 'utf8'));
const browser = await chromium.launch();
const context = await browser.newContext();
const page = await context.newPage();
// Перехват запросов и ответов
page.on('route', route => {
const entry = harData.log.entries.find(entry => entry.request.url === route.url());
if (entry) {
// Воспроизведение ответа из HAR файла
route.fulfill({
status: entry.response.status,
headers: entry.response.headers,
body: entry.response.content.text
});
} else {
route.continue();
}
});
await page.goto('https://example.com');
await browser.close();
})();
В этом примере происходит следующее:
fs.route перехватываются все сетевые
запросы.Таким образом, можно воссоздать трафик, записанный ранее, что полезно для тестирования, а также для работы с нестабильными или медленными внешними сервисами, которые не всегда можно использовать в тестах.
Использование HAR файлов в тестировании с Playwright имеет несколько преимуществ:
Однако есть и ограничения:
Использование HAR файлов с Playwright позволяет значительно улучшить тестирование веб-приложений, повысить стабильность тестов и упростить работу с внешними сервисами.