並列テストとテストの分割実行

Playwrightの「テストの自動化」における「並列テストとテストの分割実行」は、大規模なテストスイートの実行時間を短縮し、効率的なCI/CDパイプラインの構築において極めて重要な技術です。以下に、それぞれについて詳しく説明します。


1. 並列テスト(Parallel Testing)

概要

Playwright Testは、デフォルトで並列実行をサポートしており、マルチコアCPUを活用して複数のテストを同時に実行できます。これにより、テスト全体の実行時間を大幅に短縮できます。

実行方法

  • 並列数の制御は --workers オプションまたは設定ファイルで制御可能です。

bash
npx playwright test --workers=4

設定ファイル(playwright.config.ts)例

ts
import { defineConfig } from '@playwright/test'; export default defineConfig({ workers: 4, });

注意点

  • テスト間で状態(セッション、データベース、ファイルなど)を共有しないことが重要です。

  • 並列実行で競合やデータ汚染が起こらないよう、テストは独立性を保つ必要があります。


2. テストの分割実行(Sharding / Test Distribution)

概要

大規模プロジェクトでは、テストスイートを複数のマシンやCIジョブに**分割して実行(shard)**することで、全体のビルド時間を最小化できます。Playwrightでは、--shard オプションでこれを実現できます。

実行方法

bash
npx playwright test --shard=1/3 npx playwright test --shard=2/3 npx playwright test --shard=3/3

この例では、全テストを3つに分割し、それぞれのジョブで1/3ずつ実行しています。

典型的なCI設定例(GitHub Actionsなど)

yaml
jobs: test: runs-on: ubuntu-latest strategy: matrix: shardIndex: [1, 2, 3] steps: - uses: actions/checkout@v2 - name: Run Playwright tests run: npx playwright test --shard=${{ matrix.shardIndex }}/3

注意点

  • 各シャードは同一のテスト構成・依存関係を持つ必要があります。

  • テストの実行時間を均等にするためには、**実行時間ベースの分割(balancing)**をCIツール側で調整することが望ましいです(Playwright自体は静的分割)。


補足:分割実行と並列実行の併用

Playwrightは、1シャードごとに複数のワーカーを使って並列実行することが可能です。つまり、

  • 水平分割(シャーディング):複数のジョブに分割

  • 垂直分割(並列処理):各ジョブで複数テストを同時実行

この併用により、CI/CDパイプラインのパフォーマンスが最大化されます。


まとめ

項目 概要 メリット
並列テスト 1つのマシン内で複数のテストを同時実行 実行時間の短縮
テストの分割実行(sharding) テストを複数のマシンやCIジョブに分割 CIでのスケール効率化
併用 並列+分割で高速化最大化 大規模テストに最適

ChatGPT4o 生成日:2025/06/22