English | 日本語
E2E Testing with Playwright¶
このプロジェクトでは、E2E テスト用に専用のコンテナを使用しています。
アーキテクチャ¶
- web: 本番アプリケーションコンテナ(Playwright 不要)
- e2e: E2E テスト専用コンテナ(Playwright + Chromium 含む)
- db: MySQL データベース
E2E テストの実行方法¶
方法 1: 専用コンテナで実行(推奨)¶
# E2Eコンテナを起動してテスト実行
docker compose --profile e2e run --rm e2e
# 特定のテストファイルのみ実行
docker compose --profile e2e run --rm e2e python -m pytest tests/e2e/test_login.py -v
# 全テスト(ユニット+統合+E2E)を実行
docker compose --profile e2e run --rm e2e python -m pytest tests/ -v
方法 2: web コンテナで実行(開発時)¶
web コンテナでも E2E 以外のテストは実行可能です:
# ユニット・統合・APIテストのみ
docker compose exec web python -m pytest tests/test_models.py tests/test_integration.py tests/test_api.py tests/test_views.py -v
なぜ分離するのか?¶
- 本番環境の軽量化: web コンテナには Playwright や Chromium が含まれないため、イメージサイズが小さくなります
- セキュリティ: 本番環境に不要なブラウザバイナリを含めません
- 保守性: テスト環境と本番環境を明確に分離できます
- Rails のベストプラクティス: Rails でも同様に chromium コンテナを分離しています
技術選択について¶
なぜ Selenium Grid ではなく Playwright 内蔵ブラウザを使うのか?¶
Rails ではseleniarm/standalone-chromiumのような Selenium Grid 用のコンテナを使いますが、
このプロジェクトでは Playwright 内蔵の Chromium を使用しています。
理由:
- Playwright の設計思想: Playwright は独自のブラウザバイナリを管理し、Selenium Grid とは互換性がありません
- シンプルさ: 外部ブラウザコンテナとの通信設定が不要
- 軽量: E2E コンテナのみで完結し、追加のブラウザコンテナが不要
- 速度: ローカルブラウザの方が通信オーバーヘッドがない
Selenium Grid を使いたい場合:
- Playwright の代わりに Selenium WebDriver を使用してください
- または、複数ブラウザでの並列テストが必要な場合のみ Playwright の実験的な Grid サポートを検討
現在のアーキテクチャの利点:
- Dockerfile.e2e のみで完結
- 設定がシンプル
- 本番用 web コンテナは完全にクリーン
Docker Compose Profiles¶
profiles: [e2e]を使用することで、通常のdocker compose upでは起動せず、
明示的に--profile e2eを指定した時のみ E2E コンテナが起動します。