Docker Compose предоставляет удобный способ для организации многоконтейнерных приложений, и в контексте тестирования с использованием Playwright он становится незаменимым инструментом. Многоконтейнерные приложения часто требуют взаимодействия с различными сервисами, такими как базы данных, очереди сообщений или сторонние API, что усложняет настройку и запуск тестов в различных средах. В таких случаях Docker Compose помогает автоматизировать создание и управление всеми необходимыми контейнерами, обеспечивая быстрый и гибкий способ запуска интеграционных тестов.
Docker Compose — это инструмент для дефинирования и запуска
многоконтейнерных Docker-приложений. Он использует файл конфигурации
docker-compose.yml, в котором описываются все контейнеры,
их настройки, зависимости и сети. В случае с Playwright, Docker Compose
может быть использован для настройки контейнеров с браузерами, а также
для создания окружений с различными зависимостями, такими как базы
данных или кэши.
Для начала работы с Docker Compose необходимо иметь установленный Docker и Docker Compose. Если они еще не установлены, следует выполнить установку через официальные источники.
docker-compose.yml для PlaywrightДля начала следует подготовить файл docker-compose.yml,
в котором будет описана вся инфраструктура для тестирования. Пример
базового конфигурационного файла для Playwright может выглядеть
следующим образом:
version: '3.8'
services:
playwright:
image: mcr.microsoft.com/playwright:v1.17.0-focal
container_name: playwright-container
volumes:
- ./tests:/tests
working_dir: /tests
environment:
- PLAYWRIGHT_BROWSERS_PATH=/ms-playwright
command: ["npx", "playwright", "test"]
depends_on:
- webapp
- postgres
webapp:
image: node:14-alpine
container_name: webapp
environment:
- DATABASE_URL=postgres://user:password@postgres:5432/dbname
ports:
- "3000:3000"
networks:
- test-network
postgres:
image: postgres:13-alpine
container_name: postgres
environment:
- POSTGRES_USER=user
- POSTGRES_PASSWORD=password
- POSTGRES_DB=dbname
volumes:
- postgres-data:/var/lib/postgresql/data
networks:
- test-network
networks:
test-network:
volumes:
postgres-data:
playwright: Это контейнер, в котором запускаются тесты Playwright. В качестве образа используется официальный контейнер Playwright с предустановленными браузерами. Внутри контейнера запускается команда для тестирования с помощью Playwright.
volumes монтирует локальную директорию с тестами в
контейнер.working_dir указывает рабочую директорию для выполнения
тестов.depends_on гарантирует, что контейнеры
webapp и postgres будут запущены до того, как
начнется выполнение тестов.webapp: Это контейнер с веб-приложением, которое будет тестироваться. В данном случае это приложение на Node.js, которое подключается к базе данных PostgreSQL. Порты контейнера пробрасываются для доступа к приложению.
postgres: Контейнер с PostgreSQL базой данных, которая используется веб-приложением. Данные сохраняются в volume, чтобы база данных сохранялась между перезапусками контейнеров.
networks и volumes: Эти параметры создают сеть для соединения контейнеров и volume для хранения данных базы данных.
Чтобы запустить все контейнеры, достаточно выполнить команду:
docker-compose up --build
Команда создаст и запустит контейнеры в соответствии с конфигурацией
docker-compose.yml. В процессе работы Docker Compose
автоматически подтянет необходимые образы, если они не были
предварительно загружены.
Если нужно запустить контейнеры в фоновом режиме, можно использовать
параметр -d:
docker-compose up -d --build
После запуска контейнеров можно подключиться к контейнеру с тестами Playwright и вручную выполнить тесты с помощью:
docker-compose exec playwright bash
npx playwright test
Docker Compose позволяет создать идеальные условия для разработки и тестирования. При разработке тестов с Playwright можно интегрировать тесты с реальными сервисами, такими как веб-приложение и база данных, что значительно улучшает качество тестирования. Контейнеры позволяют изолировать зависимости и минимизировать риск проблем, связанных с несовместимостью версий.
Для тестирования взаимодействия с веб-приложением и базой данных можно создать интеграционный тест. Пример теста Playwright, который проверяет, что приложение корректно отображает данные из базы, может выглядеть так:
import { test, expect } from '@playwright/test';
test('Web app loads data from the database', async ({ page }) => {
await page.goto('http://webapp:3000');
const dataElement = await page.locator('.data-item');
expect(await dataElement.innerText()).toBe('Expected data from database');
});
В этом примере тест запускается внутри контейнера Playwright, который
взаимодействует с контейнером webapp. С помощью Playwright
можно автоматизировать не только проверку UI, но и взаимодействие с API,
что делает такие тесты удобными для проверки интеграций.
После внесения изменений в конфигурацию контейнеров или тестов, Docker Compose позволяет легко обновлять и перезапускать контейнеры. Для перезапуска всех контейнеров достаточно выполнить команду:
docker-compose restart
Для очистки всех ресурсов, включая контейнеры, сети и тома, можно использовать команду:
docker-compose down -v
Этот процесс позволяет поддерживать чистоту тестового окружения, что критично для эффективного тестирования.
Изолированное окружение: Все зависимости, включая браузеры, веб-приложение и базу данных, запускаются в отдельных контейнерах, что обеспечивает стабильность тестов и предотвращает возможные конфликты.
Гибкость: Docker Compose позволяет легко изменять настройки окружения для разных типов тестирования. Можно добавить новые сервисы или изменить параметры существующих.
Автоматизация: Все контейнеры можно запускать, обновлять и управлять ими с помощью простых команд Docker Compose, что упрощает процессы CI/CD.
Воспроизводимость: Окружение, созданное с помощью Docker Compose, полностью воспроизводимо на любой машине. Это гарантирует, что тесты будут проходить одинаково в разных средах, что критично для успешного тестирования.
Использование Docker Compose в сочетании с Playwright позволяет эффективно управлять сложными сценариями тестирования, где необходимо взаимодействовать с несколькими сервисами.