Тестовые сценарии с Puppeteer нередко требуют сохранения браузерного состояния между запусками. К такому состоянию относят файл-куки, параметры локального хранилища и сессионного хранилища, а также созданные контексты аутентификации. Резервный бэкап этих данных позволяет ускорить тесты, избегать повторной авторизации и восстанавливать контексты после сбоев.
Cookies. Наиболее частая цель бэкапа. Содержат токены аутентификации, настройки региона, флаги пользовательских предпочтений.
LocalStorage. Подходит для сохранения пользовательских настроек интерфейса и данных, которые приложение кэширует локально.
SessionStorage. Имеет смысл при воспроизведении шагов внутри одной сессии. В тестировании применяется реже, но в сложных сценариях также может требоваться.
User Data Directory. Полный каталог данных Chromium: базы IndexedDB, LocalStorage, куки, настройки браузера. Резервирование каталога полезно при интеграционных тестах, где требуется многократное воспроизведение сложной среды.
Puppeteer предоставляет средства сериализации куки и локального
хранилища через API страницы и контекста браузера. Для получения набора
куки вызывается page.cookies(), для установки —
page.setCookie(). Работа с LocalStorage требует выполнения
скрипта в контексте страницы.
// Извлечение состояния
const cookies = await page.cookies();
const localStorageData = await page.evaluate(() => {
const data = {};
for (let i = 0; i < localStorage.length; i++) {
const key = localStorage.key(i);
data[key] = localStorage.getItem(key);
}
return data;
});
Полученные структуры сериализуются в JSON-файл, который и служит резервной копией. Аналогично при восстановлении тест загружает данные из файла и устанавливает их в окружение браузера:
// Восстановление состояния
await page.setCookie(...cookiesFromBackup);
await page.evaluate(data => {
Object.keys(data).forEach(key => localStorage.setItem(key, data[key]));
}, localStorageFromBackup);
При необходимости бэкап дополняется сессионным хранилищем. Процесс
идентичен работе с LocalStorage, но со ссылкой на
sessionStorage.
Полная резервная копия директории пользовательских данных удобна при
повторной прогонке больших интеграционных сценариев. Puppeteer позволяет
запускать браузер с параметром userDataDir, указывающим
внешний каталог. Копирование каталога на файловом уровне создаёт бэкап
всех внутренних хранилищ Chromium, включая IndexedDB, WebSQL, связку
сертификатов и профильные настройки.
Копирование выполняется стандартными средствами ОС. Перед сохранением директории процесс Chromium должен быть завершён, иначе возможна порча файлов. Восстановление производится обратным копированием перед запуском нового тестового процесса.
При работе с защищёнными ресурсами существенным становится бэкап контекста аутентификации. Для большинства веб-приложений он представляет собой токены, записанные в куки или LocalStorage. После первичной авторизации в ручном режиме тест фиксирует состояние и использует его в последующих прогонах. Такой подход сокращает длительность тестов и устраняет сетевые задержки, связанные со входом.
Отдельного внимания требует ротация токенов. Некоторые системы обновляют токены по истечении срока или при каждом запросе. В подобных случаях бэкап состояния должен дополняться проверкой валидности и механизмом обновления бэкапа.
Полная резервная копия может быть избыточной для частых прогонов.
Оптимизировать процесс помогает выборочная сериализация: сохранение
только изменённых ключей LocalStorage, свежих куки или отдельных файлов
каталога userDataDir. Применяется при нагрузочном
тестировании или CI-интеграции, когда сотни прогонов требуют
минимального времени на подготовку среды.
Хранилище бэкапов должно учитывать контекст тестирования. Для интеграционных тестов удобны локальные файлы проекта, синхронизируемые через системы контроля версий. Для нагрузочного и регрессионного тестирования — внешние артефакты CI, прикрепляемые к сборкам.
Важный момент — разделение бэкапов по веткам разработки, окружениям и типам тестов. Такая структура предотвращает конфликт версий состояния и ускоряет диагностику ошибок при изменении функционала приложения.
При автоматизированных прогонах тесты читают бэкап из артефактов прошлой сборки или из преднастроенного пакета. Восстановление выполняется перед запуском браузера: сначала копируется каталог или загружаются данные JSON, затем поднимается браузер с этим состоянием. Если приложение обновилось и состояние стало несовместимо, тестовая система генерирует новый бэкап до следующего цикла.
Совместимость версий браузера. Бэкапы
userDataDir завязаны на версию Chromium. Обновление
Puppeteer может сделать старый бэкап непригодным.
Безопасность. В бэкапе могут присутствовать токены и персональные данные. Требуется шифрование и контроль доступа, особенно при хранении в CI.
Детерминизм. Восстановление состояния должно давать стабильный результат. Если приложение генерирует псевдослучайные ключи в LocalStorage или применяет одноразовые токены, бэкап теряет ценность.
Сложные офлайн-кэши. IndexedDB и сервис-воркеры создают дополнительный слой состояния. При необходимости офлайн-тестирования резервируется весь профиль браузера.
Бэкап и восстановление состояния в Puppeteer позволяют моделировать долгоживущие пользовательские сессии, ускорять тестовые циклы и повышать устойчивость тестов к внешним факторам. Грамотная стратегия резервирования делает автоматизацию более предсказуемой и приближенной к реальным пользовательским сценариям.