Кеширование зависимостей является критически важной практикой при автоматизированном тестировании с использованием Puppeteer. Оно позволяет ускорить запуск тестов, снизить нагрузку на сеть и гарантировать стабильность окружения. Puppeteer, являясь библиотекой для управления браузером Chromium или Chrome через протокол DevTools, имеет ряд особенностей, которые делают грамотное кеширование особенно полезным.
При каждом запуске Puppeteer по умолчанию создаёт временный профиль пользователя. Это означает, что все настройки, куки и кеши загружаются заново. Для уменьшения времени старта и повторного скачивания ресурсов можно использовать persistent context:
const puppeteer = require(&
(async () => {
const browser = await puppeteer.launch({
headless: false,
userDataDir: './user_data'
});
const page = await browser.newPage();
await page.goto('https://example.com');
})();
Пояснение ключевых моментов:
userDataDir указывает директорию, где будут храниться все
данные браузера: куки, локальное хранилище, кеш.
Puppeteer предоставляет возможности для интерсепта сетевых
запросов с целью их кеширования или повторного использования.
Для этого используется метод
page.setRequestInterception(true):
await page.setRequestInterception(true);
page.on('request', request => {
if (request.resourceType() === 'image') {
request.respond({
status: 200,
contentType: 'image/png',
body: '' // можно подставить закешированные данные
});
} else {
request.continue();
}
});
Особенности подхода:
Puppeteer распространяется через npm и автоматически скачивает Chromium при установке. Для больших CI/CD-пайплайнов повторная загрузка браузера может стать узким местом. Оптимизация возможна через:
Использование переменной окружения
PUPPETEER_SKIP_CHROMIUM_DOWNLOAD При установке:
PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true npm install puppeteer
Позволяет пропустить скачивание Chromium и использовать уже существующий браузер.
Настройка PUPPETEER_EXECUTABLE_PATH
Указывает путь к локально установленному браузеру:
const browser = await puppeteer.launch({
executablePath: '/usr/bin/chromium-browser'
});
Эти подходы экономят сетевой трафик и ускоряют сборку тестового окружения.
В системах непрерывной интеграции критически важно разделять кеши:
Кеш npm-зависимостей Большинство CI-систем (GitHub
Actions, GitLab CI) поддерживают кеширование каталога
node_modules или папки с пакетами npm
(~/.npm). Это снижает время установки Puppeteer и его
зависимостей.
Кеш браузера Сохранение папки с загруженным Chromium
(.local-chromium) позволяет использовать один и тот же
бинарник в разных сборках.
Кеш тестовых данных и сетевых ресурсов Можно сохранять JSON-ответы API, статические изображения и другие ресурсы, чтобы повторно не загружать их с внешних серверов.
Эффективное кеширование в Puppeteer тестировании обычно строится на следующих принципах:
Для оценки влияния кеширования на тесты учитываются:
userDataDir.
Эти метрики помогают обосновать необходимость кеширования в проектах с большим количеством автоматизированных тестов.
Использование этих инструментов позволяет минимизировать время выполнения тестов и сделать тестовое окружение более предсказуемым.