Puppeteer предоставляет мощный инструмент для автоматизации браузера Chrome или Chromium через API на JavaScript. Одним из ключевых аспектов надежного тестирования является изоляция процессов, позволяющая запускать параллельные сценарии без взаимного влияния и обеспечивать стабильность тестов.
В Puppeteer основными единицами изоляции являются браузерные
контексты (BrowserContext) и
страницы (Page).
Page) – отдельная вкладка
браузера, имеющая собственный DOM, cookies, локальное хранилище и
JavaScript-окружение.
BrowserContext) –
изолированная область внутри одного экземпляра браузера. Каждый контекст
содержит свои страницы, cookies, кэш и sessionStorage.
Использование контекстов позволяет:
Пример создания изолированного контекста:
await page.goto(&
const browser = await puppeteer.launch(); const context = await browser.createIncognitoBrowserContext(); // инкогнито-контекст const page = await context.newPage();Инкогнито-контексты полностью независимы от основного браузерного профиля и других контекстов.
Параллельное тестирование
Для запуска тестов параллельно важно создавать отдельные контексты для каждого сценария:
const contexts = []; for (let i = 0; i < 5; i++) { const context = await browser.createIncognitoBrowserContext(); const page = await context.newPage(); await page.goto(`https://example.com/test${i}`); contexts.push({ context, page }); }Такой подход гарантирует, что:
Puppeteer управляет процессами браузера через Node.js. При запуске:
await context.close(); // освобождает ресурсы
Если нужно полностью изолировать тесты, можно запускать несколько экземпляров браузера:
const browser1 = await puppeteer.launch();
const browser2 = await puppeteer.launch();
Этот подход создаёт полностью отдельные процессы Chromium, что полезно для стресс-тестирования и сценариев с потенциальными утечками памяти.
Puppeteer позволяет указывать путь к профилю пользователя, что даёт возможность контролировать кэш, cookies и настройки:
const browser = await puppeteer.launch({
userDataDir: './tmp/profile1'
});
Каждый путь userDataDir создаёт отдельный набор данных
браузера. Это особенно важно для:
Изоляция процессов позволяет проще выявлять ошибки:
Изоляция процессов в Puppeteer является фундаментальным инструментом для надёжного и масштабируемого тестирования веб-приложений, обеспечивая независимость сценариев, безопасное использование данных и оптимальное управление ресурсами браузера.