Network conditions

Puppeteer предоставляет возможность управлять сетевыми условиями браузера, что позволяет эмулировать различные сценарии работы веб-приложений. Это важно для тестирования производительности, проверки поведения при медленном соединении, симуляции оффлайн-режима и анализа реакций приложения на нестабильные сети.

Основные возможности управления сетью

Puppeteer позволяет:

  • Эмулировать скорость интернет-соединения (throttling)
  • Переключать браузер в оффлайн-режим
  • Перехватывать и модифицировать сетевые запросы
  • Отслеживать сетевую активность и задержки

Для работы с сетевыми условиями используется объект page, а также методы DevTools Protocol через page._client().


Эмуляция скорости сети

Сетевое замедление помогает тестировать загрузку страниц при различных типах соединений: 3G, 4G, медленный Wi-Fi.

Пример настройки сети для медленного 3G:

const puppeteer = require(&

(async () => {
    const browser = await puppeteer.launch();
    const page = await browser.newPage();
    
    const client = await page.target().createCDPSession();

    // Включение сетевого замедления
    await client.send('Network.enable');
    await client.send('Network.emulateNetworkConditions', {
        offline: false,
        downloadThroughput: 500 * 1024 / 8, // 500 Кбит/с
        uploadThroughput: 500 * 1024 / 8,   // 500 Кбит/с
        latency: 200                         // Задержка 200 мс
    });

    await page.goto('https://example.com');
    await browser.close();
})();

Ключевые параметры emulateNetworkConditions:

  • offline – true/false, переключение в оффлайн-режим.
  • latency – задержка в миллисекундах.
  • downloadThroughput – скорость скачивания в байтах/с.
  • uploadThroughput – скорость загрузки в байтах/с.

Эти параметры позволяют имитировать реальные условия мобильного интернета и проверять устойчивость интерфейса к медленным соединениям.


Эмуляция оффлайн-режима

Оффлайн-тестирование необходимо для проверки PWA-приложений и кеширования.

await client.send('Network.emulateNetworkConditions', {
    offline: true,
    downloadThroughput: 0,
    uploadThroughput: 0,
    latency: 0
});

После этого все сетевые запросы будут падать с ошибкой, как при реальной потере соединения. Это помогает убедиться, что приложение корректно обрабатывает отсутствие интернета.


Перехват и модификация запросов

Puppeteer позволяет перехватывать запросы и изменять их параметры, например, подменять ответы API или блокировать сторонние ресурсы.

await page.setRequestInterception(true);

page.on('request', request => {
    if (request.url().includes('analytics')) {
        request.abort(); // блокировка трекинга
    } else {
        request.continue();
    }
});

Эта функциональность полезна для тестирования работы приложения без внешних зависимостей или имитации ошибок сервера.


Мониторинг сетевой активности

Отслеживание сетевых событий позволяет анализировать время загрузки ресурсов, выявлять узкие места и оптимизировать производительность.

page.on('request', request => {
    console.log('Запрос:', request.url());
});

page.on('response', response => {
    console.log('Ответ:', response.url(), 'Статус:', response.status());
});

Использование этих событий в связке с emulateNetworkConditions позволяет создавать реалистичные сценарии тестирования при различных сетевых условиях.


Практические рекомендации

  • Для тестов производительности использовать разные профили сети (Slow 3G, Fast 3G, DSL) для выявления проблем на медленных соединениях.
  • Совмещать сетевое замедление с перехватом запросов для комплексного тестирования.
  • Использовать оффлайн-режим для проверки работы кеша и сервис-воркеров.
  • Логировать запросы и ответы для анализа влияния сетевых условий на поведение приложения.

Эффективное использование сетевых возможностей Puppeteer позволяет создавать реалистичные тестовые сценарии, выявлять ошибки, недоступные при обычной локальной разработке, и повышать качество веб-приложений.