1. なぜ「パラメータ化」と「タグ付け」が必要か
-
パラメータ化テストは “入力データ × シナリオ” の掛け算をコードの重複なしに実現し、網羅性とメンテナンス性を両立させる手法です。
-
タグ付けはテスト群にメタ情報を付与し、実行対象の絞り込みやレポートの分類を容易にします。CI/CD では「高速スモークだけ」「回帰だけ」のように切り替えられるため、総実行時間を短縮できます。
2. パラメータ化テスト(データドリブンテスト)
| レイヤ | 主な用途 | 実装ポイント |
|---|---|---|
| テストレベル | 同一 spec 内で複数の入力値を回す | 配列 .forEach() / for…of で test() を動的生成する |
| プロジェクトレベル | ブラウザ・デバイス・ロケールなど環境差分 | playwright.config.ts の projects 配列に組み込む |
| フィクスチャ拡張 | “ユーザー種別”“権限”等の論理的パラメータ | base.extend() でオプション or fixture を宣言し、projects で値注入 |
2.1 テストレベルのパラメータ化
Playwright 公式は forEach ループの外側 に beforeEach/afterEach を配置することを推奨しています。フックをループ内部に書くと毎回実行され、テスト時間が増えるためです。playwright.dev
2.2 プロジェクトレベルのパラメータ化
npx playwright test で2プロジェクトが並列実行され、それぞれに person オプションが注入されます。playwright.dev
フィクスチャ拡張との組み合わせ
任意の値を fixture として受け取り、projects 側で上書きできます(多言語・多権限ユーザーなどに便利)。playwright.dev
2.3 ベストプラクティス
| テーマ | 推奨事項 |
|---|---|
| テスト名の一意性 | パラメータ文字列を test タイトルに含めて重複を避ける |
| フックの配置 | beforeAll/afterAll をループ外に置き、速度・安定性を確保 |
| 並列実行 | test.describe.parallel と併用しても OK だが、外部リソースが競合しないよう注意 |
| データ分離 | JSON/CSV から読み込み、テストロジックと分離するとメンテしやすい |
3. タグ付け(@smoke, @critical など)
3.1 付け方 ― 新旧2つのシンタックス
Playwright 公式ブログでも新形式が推奨されています。dev.to
グループ全体に付与する場合:
3.2 フィルタリング CLI
| 目的 | CLI 例 |
|---|---|
| 単一タグのみ実行 | npx playwright test --grep @smoke |
| タグを含むテストを除外 | --grep-invert @wip |
| タグ OR 条件 | `–grep “@smoke |
| タグ AND 条件 | --grep "(?=.*@mobile)(?=.*@slow)" |
| NOT 条件 (HTMLレポーター) | !@flaky (v1.52+ レポート UI) playwright.dev |
設定ファイルでも grep / grepInvert が使えるため、CI ブランチごとに異なるデフォルトフィルタを設けることができます。
3.3 タグの可視化
-
HTML Reporter/VS Code 拡張/UI Mode のラベルとして表示され、失敗テストの絞り込みが容易
-
testInfo.tags経由で カスタムレポーターからも取得でき、好きなフォーマットで出力可能
3.4 ベストプラクティス
| シーン | 例 |
|---|---|
| 粒度 | @smoke, @regression, @payment, @mobile のように“実行頻度 × ドメイン”で命名 |
| CI 戦略 | プッシュ時=@smoke、夜間=全テスト、リリース前=@critical だけ失敗ゼロ確認 |
| 命名衝突回避 | 全タグを小文字+英数字に統一し、スペースは使わず @ で始める |
4. 組み合わせ活用例
| 目的 | 具体例 |
|---|---|
| ブラウザ × データ × 優先度 マトリクス | projects で Chrome/Firefox/WebKit, ループで ユーザーデータ10件, タグで @smoke / @full を付与 |
| 段階的テスト | まず @api タグのユニットライクなテストを実行→通ったら @ui を含む E2E を実行 |
| 障害時の局所再実行 | --grep "@checkout" で該当機能だけ再テストし、デバッグを高速化 |
5. まとめ
-
パラメータ化テストは入力や環境の組合せをコードの重複なく網羅し、
projectsと fixture 拡張でさらに柔軟に。 -
タグ付けは実行フィルタとレポート分類を担う“軽量メタデータ”。新シンタックス(オブジェクト形式)が推奨です。
-
両者を併用すると、**「膨大なシナリオを高速に、必要なときだけ」**というテスト戦略を Playwright だけで完結できます。
これらを取り入れることで、CI/CD パイプラインの実行時間短縮とテストの保守性向上を同時に実現できます。
ChatGPT4o 生成日:2025/06/22