Playwright + Docker: стабильное окружение в CI "У меня локально тест проходит" — любимая фраза, которую убивает Docker.
Разные версии Chromium на ноуте и в CI, отличающиеся системные шрифты, разные таймзоны — всё это источники нестабильности, которые исчезают с одной строкой в Dockerfile.
Базовый Dockerfile:
#Используем официальный образ — браузеры уже внутриFROM mcr.microsoft.com/playwright:v1.44.0-jammy
WORKDIR /app
#Сначала зависимости (кэш слой)COPY package*.json ./ RUN npm ci
#Потом исходникиCOPY . .
#Запуск тестовCMD ["npx", "playwright", "test"]
Официальный образ mcr.microsoft.com/playwright включает нужные версии Chromium, Firefox и WebKit. Никакого npx playwright install — всё уже там.
Критичные флаги при запуске: docker run --ipc=host # Chromium требует shared memory --user pwuser # Не root — безопасность и стабильность -v $(pwd)/results:/app/test-results # Монтируем отчёты playwright-tests
--ipc=host — это не опционально. Без него Chromium падает с SIGSEGV из-за нехватки shared memory. Трачу на поиск этой ошибки 40 минут при первой настройке — теперь вы не потратите.
Docker Compose для локальной разработки: services: tests: build: . ipc: host user: pwuser volumes:
- ./test-results:/app/test-results environment:
- CI=true
В GitHub Actions:
- name: Run tests in Docker run: | docker build -t pw-tests . docker run --ipc=host --user pwuser -v ${{ github.workspace }}/results:/app/test-results pw-tests
Отлаживать тесты внутри контейнера можно через docker run -it --entrypoint bash — получите интерактивный шелл с тем же окружением, что и в CI.
Используете Docker для тестов или запускаете напрямую на раннерах CI? Я перешёл на Docker после третьего «у меня работает» подряд — и не пожалел.
#playwright #docker #ci_cd #sdet #github_actions @haradkou_sdet
· 27.04
«у меня локально проходит» - универсальная боль. у меня с pytest + Docker похожая история: тесты падали в CI из-за разных версий postgresql и разного timezone. решение то же - зафиксировать образ postgres и явно прописать TZ в Dockerfile. принцип идентичный, просто другой стек
ответить
коммент удалён