Docker — это платформа для упаковки, доставки и запуска приложений в изолированных контейнерах. Контейнеризация обеспечивает воспроизводимость окружения, что особенно важно для автоматизированного тестирования веб-приложений с Cypress, где конфигурация браузеров, версий Node.js и зависимостей может существенно влиять на результаты тестов.
Контейнеры работают на основе образов (images), которые представляют собой слоистые файловые системы с предустановленным приложением и всеми зависимостями. Основное отличие от виртуальных машин заключается в том, что контейнеры используют ядро хоста, что делает их легковесными и быстрыми.
Для работы с Docker необходимо установить Docker Engine и Docker CLI. После установки основные команды включают:
docker pull <image> — загрузка образа из Docker
Hub.docker build -t <name> . — сборка образа из
Dockerfile.docker run -it <image> — запуск контейнера.docker ps — отображение запущенных контейнеров.docker stop <container> — остановка
контейнера.Для Cypress особенно полезны образы с предустановленным Node.js и
браузерами, например cypress/base или
cypress/included.
Dockerfile определяет инструкции по сборке образа. Пример полноценного Dockerfile для проекта с Cypress:
# Используем официальный Node.js образ
FROM cypress/base:18
# Устанавливаем зависимости
WORKDIR /app
COPY package.json package-lock.json ./
RUN npm ci
# Копируем весь проект
COPY . .
# Команда по умолчанию для запуска тестов
CMD ["npx", "cypress", "run"]
Ключевые моменты:
WORKDIR /app — устанавливает рабочую директорию внутри
контейнера.RUN npm ci — установка зависимостей в соответствии с
lock-файлом для воспроизводимости.CMD ["npx", "cypress", "run"] — стандартная команда для
запуска всех тестов Cypress без GUI.Для корректной работы Cypress в контейнере важно учитывать поддержку графического интерфейса для тестов с визуализацией. Существует несколько режимов:
Для headless режима чаще используют образы
cypress/included:<version>, которые уже содержат
установленный Cypress и браузеры.
Пример запуска тестов в контейнере:
docker run -it -v $PWD:/app -w /app cypress/included:12.0.0
Объяснение:
-v $PWD:/app — монтирование текущей директории в
контейнер.-w /app — установка рабочей директории.cypress/included:12.0.0 уже содержит Cypress 12 и
Chrome/Firefox.Docker идеально подходит для интеграции Cypress в пайплайны CI/CD. Примерная последовательность шагов:
Пример конфигурации для GitHub Actions:
jobs:
cypress-tests:
runs-on: ubuntu-latest
container:
image: cypress/included:12.0.0
steps:
- uses: actions/checkout@v3
- name: Install dependencies
run: npm ci
- name: Run Cypress tests
run: npx cypress run
- name: Upload artifacts
uses: actions/upload-artifact@v3
with:
name: cypress-artifacts
path: cypress/videos,cypress/screenshots
Использование контейнера гарантирует одинаковое окружение на локальной машине и CI/CD сервере.
Для проектов, где требуется база данных или API-сервисы, удобно
использовать Docker Compose. Пример
docker-compose.yml для Cypress с backend:
version: "3.9"
services:
web:
build: .
ports:
- "3000:3000"
cypress:
image: cypress/included:12.0.0
depends_on:
- web
working_dir: /app
volumes:
- .:/app
command: npx cypress run
Особенности:
depends_on обеспечивает запуск сервиса web
перед Cypress.volumes позволяет тестам
видеть актуальные файлы.package.json и package-lock.json отдельно,
чтобы npm ci выполнялся только при изменении
зависимостей.RUN для уменьшения размера.cypress/base:18-slim, если GUI не нужен.Docker и контейнеризация позволяют создать полностью изолированное, воспроизводимое окружение для Cypress, значительно упрощая локальное тестирование и интеграцию в CI/CD, а также снижая риск ошибок из-за различий в конфигурациях машин разработчиков и серверов.