Playwright предоставляет мощные возможности для тестирования веб-приложений, включая эмуляцию различных сетевых условий. Это позволяет моделировать разные сценарии использования, такие как низкая скорость интернета, высокая задержка или потеря пакетов, что помогает более точно проверять производительность и стабильность приложения в условиях нестабильного соединения.
Playwright поддерживает эмуляцию различных сетевых параметров, таких как:
Для настройки этих параметров Playwright использует интерфейс
browserContext.setOffline,
browserContext.setNetworkConditions и другие методы.
setNetworkConditionsМетод setNetworkConditions предоставляет простой способ
для эмуляции различных сетевых сценариев. Он позволяет указать такие
параметры, как скорость загрузки, выгрузки, задержку и процент потерь
пакетов. Рассмотрим пример кода, который демонстрирует базовую настройку
эмуляции сетевых условий.
const { chromium } = require('playwright');
(async () => {
const browser = await chromium.launch();
const context = await browser.newContext();
// Эмуляция сетевых условий
await context.setNetworkConditions({
offline: false, // Отключение интернета
downloadThroughput: 500 * 1024, // Скорость загрузки (500 Kbps)
uploadThroughput: 500 * 1024, // Скорость выгрузки (500 Kbps)
latency: 100, // Задержка (100 мс)
offline: false
});
const page = await context.newPage();
await page.goto('https://example.com');
await page.screenshot({ path: 'example.png' });
await browser.close();
})();
Скорость загрузки и выгрузки задается в битах в секунду (bps). Эти параметры позволяют имитировать соединения с различной пропускной способностью. Например, для эмуляции мобильных сетей можно использовать значения в пределах нескольких сотен килобит в секунду. Важным моментом является то, что скорость загрузки и выгрузки задается отдельно, что позволяет точно настроить условия, приближенные к реальной сети.
Задержка сети в Playwright задается в миллисекундах и моделирует время, необходимое для передачи данных между клиентом и сервером. Эмуляция задержки полезна для тестирования пользовательского опыта при медленных интернет-соединениях или в условиях большого расстояния между сервером и клиентом.
Хотя Playwright не предоставляет прямую функцию для симуляции потери пакетов, можно настроить сетевые условия таким образом, чтобы эмулировать поведение, аналогичное потере пакетов. Например, при эмуляции плохих сетевых условий с высокой задержкой и низкой пропускной способностью можно наблюдать явления, схожие с потерей пакетов, поскольку они приводят к медленной загрузке страниц и возможному повторному запросу данных.
Playwright также предлагает несколько предустановленных профилей, которые эмулируют условия распространенных сетевых соединений. Эти профили могут быть полезны для быстрого тестирования приложения в условиях различных типов интернет-соединений:
Пример использования предустановленного профиля:
const { chromium } = require('playwright');
(async () => {
const browser = await chromium.launch();
const context = await browser.newContext();
// Использование предустановленного профиля сети
await context.setNetworkConditions({
offline: false,
downloadThroughput: 1.6 * 1024 * 1024, // 1.6 Mbps
uploadThroughput: 1.6 * 1024 * 1024, // 1.6 Mbps
latency: 40 // 40 ms
});
const page = await context.newPage();
await page.goto('https://example.com');
await page.screenshot({ path: 'example.png' });
await browser.close();
})();
Playwright также поддерживает эмуляцию состояния оффлайн-соединения.
Для этого используется метод setOffline, который позволяет
отключить интернет-соединение для всех запросов в рамках текущего
контекста браузера. Это полезно для тестирования работы приложения в
условиях отсутствия сети.
Пример:
const { chromium } = require('playwright');
(async () => {
const browser = await chromium.launch();
const context = await browser.newContext();
// Отключение интернета
await context.setOffline(true);
const page = await context.newPage();
await page.goto('https://example.com');
// Этот запрос будет завершаться ошибкой, так как интернет отключен
await page.screenshot({ path: 'example.png' });
await browser.close();
})();
Playwright позволяет тестировать работу приложения в случае возникновения различных сетевых ошибок. Например, можно эмулировать ошибки сети, такие как ошибки тайм-аута, сервера недоступен, или ошибки DNS. Эти ошибки полезны для проверки корректной обработки исключений на стороне клиента, а также для того, чтобы убедиться, что приложение адекватно реагирует на проблемы с сетью.
const { chromium } = require('playwright');
(async () => {
const browser = await chromium.launch();
const context = await browser.newContext();
// Настройка для эмуляции ошибки сети
context.on('route', route => {
if (route.request().url().includes('example.com')) {
route.abort(); // Эмуляция ошибки запроса
} else {
route.continue();
}
});
const page = await context.newPage();
await page.goto('https://example.com'); // Этот запрос будет прерван
await page.screenshot({ path: 'example.png' });
await browser.close();
})();
Эмуляция сетевых условий в Playwright позволяет тестировать веб-приложения в различных реальных сценариях, что помогает выявить потенциальные проблемы производительности и стабильности при слабом интернет-соединении. Это особенно важно для мобильных приложений и приложений, предназначенных для использования в странах с ограниченными или нестабильными интернет-ресурсами.