T-CREATOR

Playwright と Allure でテストレポートを美しく可視化

Playwright と Allure でテストレポートを美しく可視化

モダンなWebアプリケーション開発において、テストの自動化は必須となっています。しかし、テスト結果を効果的に可視化し、チーム全体で共有できるレポートを作成することは、意外と見落とされがちな重要な要素です。

PlaywrightとAllureを組み合わせることで、従来の単調なテスト結果表示から一歩進んだ、美しく情報豊富なテストレポートを生成できます。開発者だけでなく、プロジェクトマネージャーや品質保証チームにとっても理解しやすい形で結果を提示できるでしょう。

背景

Playwrightテストの標準レポートの限界

Playwrightは優秀なE2Eテストフレームワークですが、標準のHTMLレポートでは限界があります。基本的な合格・不合格の情報は表示されますが、テストの全体像を把握するには情報が不足しているのが現状です。

mermaidflowchart TB
    test[Playwrightテスト実行] --> standard[標準HTMLレポート]
    standard --> limit1[基本的な成功/失敗のみ]
    standard --> limit2[テスト履歴の追跡困難]
    standard --> limit3[視覚的な情報整理不足]
    standard --> limit4[ステークホルダー向け情報不足]

標準レポートは開発者向けの情報が中心で、プロジェクト関係者全体での情報共有には適していません。

テストレポートの可視化がもたらす開発効率向上

テストレポートの可視化により、以下のような開発効率の向上が期待できます。

#効果項目詳細
1問題特定の高速化失敗したテストの原因を迅速に把握
2コミュニケーション改善非技術者にも理解しやすい形での結果共有
3品質トレンドの可視化継続的な品質改善の指標として活用
4開発プロセスの透明性向上ステークホルダーへの進捗報告の質向上

Allureが提供する豊富な可視化機能

Allureは、テストレポートの可視化において業界標準とも言える多機能なフレームワークです。単なる結果表示を超えて、テストの実行プロセス全体を詳細に記録し、美しいダッシュボード形式で表示できます。

mermaidflowchart LR
    allure[Allure Framework] --> dashboard[ダッシュボード表示]
    allure --> timeline[タイムライン表示]
    allure --> trend[トレンド分析]
    allure --> attachment[添付ファイル管理]
    
    dashboard --> overview[テスト概要]
    dashboard --> category[カテゴリ分類]
    timeline --> execution[実行時系列]
    trend --> history[履歴追跡]
    attachment --> screenshot[スクリーンショット]
    attachment --> video[動画記録]

Allureの強力な機能により、テスト結果の理解度と活用度が飛躍的に向上するでしょう。

課題

標準レポートでは情報が分散し把握困難

Playwrightの標準レポートでは、テストの実行結果が個別に表示されるため、全体的な品質状況を把握することが困難です。特に大規模なプロジェクトでは、数百から数千のテストケースが存在するため、重要な情報が埋もれてしまいがちです。

以下のような課題が頻繁に発生します:

  • テスト失敗の根本原因の特定に時間がかかる
  • 類似したエラーパターンの発見が困難
  • テストの実行時間やパフォーマンスの分析が不十分

テスト結果の共有とコミュニケーションの課題

開発チーム内でのテスト結果共有において、以下のような課題があります。

mermaidsequenceDiagram
    participant Dev as 開発者
    participant PM as プロジェクトマネージャー
    participant QA as QAチーム
    participant Stakeholder as ステークホルダー
    
    Dev->>PM: 「テストが123個中15個失敗しました」
    PM->>Dev: 「どの機能が影響を受けますか?」
    Dev->>QA: 「詳細なログを確認してください」
    QA->>Stakeholder: 「技術的な詳細は...」
    Stakeholder->>PM: 「結局リリースできるのですか?」
    
    Note over Dev,Stakeholder: 情報の伝達で誤解や遅延が発生

技術的な詳細と、プロジェクト全体への影響を分かりやすく伝える仕組みが不足しているのです。

継続的インテグレーションでの活用限界

CI/CDパイプラインでのテスト実行において、結果の活用に以下の限界があります:

  • 過去のテスト実行との比較分析が困難
  • テストの安定性や信頼性の評価指標不足
  • 自動化されたアラート機能の不備

解決策

Playwright Allure Reporterの導入手順

PlaywrightにAllure Reporterを統合するための基本的な手順をご紹介します。

パッケージのインストール

まず、必要なパッケージをインストールします。

javascript// package.jsonにallure-playwrightを追加
yarn add -D allure-playwright

Playwright設定ファイルの更新

次に、playwright.config.tsファイルを更新してAllureレポーターを有効にします。

typescript// playwright.config.ts
import { defineConfig } from '@playwright/test';

export default defineConfig({
  // 基本設定
  testDir: './tests',
  timeout: 30000,
  
  // Allureレポーター設定
  reporter: [
    ['html'],
    ['allure-playwright']
  ],
  
  use: {
    // スクリーンショット設定
    screenshot: 'only-on-failure',
    video: 'retain-on-failure',
  },
});

設定ファイルの最適化

Allureレポートをより効果的に活用するための設定を最適化しましょう。

詳細なレポーター設定

typescript// playwright.config.ts - 詳細設定
export default defineConfig({
  reporter: [
    ['html'],
    [
      'allure-playwright',
      {
        detail: true,
        suiteTitle: false,
        outputFolder: 'allure-results',
        environmentInfo: {
          framework: 'playwright',
          'test.environment': process.env.TEST_ENV || 'local'
        }
      }
    ]
  ],
});

環境変数の設定

環境情報をレポートに含めるための設定です。

javascript// .env.example
TEST_ENV=staging
APP_VERSION=1.2.3
BUILD_NUMBER=456

レポート生成の自動化設定

テスト実行からレポート生成までを自動化する設定をご紹介します。

package.jsonスクリプトの設定

json{
  "scripts": {
    "test": "playwright test",
    "test:report": "yarn test && allure generate allure-results --clean && allure open",
    "allure:generate": "allure generate allure-results --clean",
    "allure:serve": "allure serve allure-results"
  }
}

Allureコマンドラインツールのインストール

bash# Allure Command Line Tools のインストール
npm install -g allure-commandline

具体例

基本的なAllure設定とPlaywrightの統合

実際のプロジェクトでPlaywrightとAllureを統合する具体的な手順をご説明します。

プロジェクト構造の確認

luaproject/
├── tests/
│   ├── auth/
│   ├── api/
│   └── e2e/
├── playwright.config.ts
├── package.json
└── allure-results/

基本テストファイルの作成

Allureアノテーションを活用したテストファイルの例です。

typescript// tests/auth/login.spec.ts
import { test, expect } from '@playwright/test';
import { allure } from 'allure-playwright';

test.describe('ログイン機能', () => {
  test('正常なログインフロー', async ({ page }) => {
    await allure.epic('認証機能');
    await allure.feature('ログイン');
    await allure.story('正常ケース');
    
    await test.step('ログインページにアクセス', async () => {
      await page.goto('/login');
      await expect(page).toHaveTitle(/ログイン/);
    });
  });
});

カスタムアノテーションとステップの追加

Allureの豊富なアノテーション機能を活用して、より詳細な情報をレポートに含める方法です。

詳細なアノテーション設定

typescript// tests/utils/allure-helpers.ts
import { allure } from 'allure-playwright';

export class AllureHelpers {
  static async addEnvironmentInfo() {
    await allure.parameter('Browser', 'chromium');
    await allure.parameter('Environment', process.env.TEST_ENV || 'local');
    await allure.parameter('App Version', process.env.APP_VERSION || '1.0.0');
  }
  
  static async addTestData(data: Record<string, any>) {
    for (const [key, value] of Object.entries(data)) {
      await allure.parameter(key, String(value));
    }
  }
}

重要度と深刻度の設定

typescript// tests/critical/payment.spec.ts
import { test, expect } from '@playwright/test';
import { allure } from 'allure-playwright';

test('決済処理の完全テスト', async ({ page }) => {
  await allure.severity('critical');
  await allure.epic('決済機能');
  await allure.feature('オンライン決済');
  
  await test.step('商品をカートに追加', async () => {
    // 実装
  });
  
  await test.step('決済情報入力', async () => {
    // 実装
  });
});

スクリーンショット・動画の自動添付設定

テスト失敗時の状況を詳細に記録するための設定です。

カスタムフィクスチャーの作成

typescript// tests/fixtures/allure-fixture.ts
import { test as baseTest } from '@playwright/test';
import { allure } from 'allure-playwright';

export const test = baseTest.extend({
  page: async ({ page }, use) => {
    // テスト開始時にスクリーンショットを添付
    await test.step('テスト開始時の画面キャプチャ', async () => {
      const screenshot = await page.screenshot();
      await allure.attachment('開始時スクリーンショット', screenshot, 'image/png');
    });
    
    await use(page);
    
    // テスト終了時の状態保存
    await test.step('テスト終了時の状態保存', async () => {
      const screenshot = await page.screenshot();
      await allure.attachment('終了時スクリーンショット', screenshot, 'image/png');
    });
  },
});

失敗時の詳細情報収集

typescript// tests/utils/error-handler.ts
import { allure } from 'allure-playwright';
import type { Page } from '@playwright/test';

export async function captureFailureDetails(page: Page, error: Error) {
  // エラー詳細をテキストファイルとして添付
  await allure.attachment(
    'エラー詳細', 
    `エラーメッセージ: ${error.message}\nスタックトレース: ${error.stack}`, 
    'text/plain'
  );
  
  // ページの HTML を保存
  const html = await page.content();
  await allure.attachment('ページHTML', html, 'text/html');
  
  // コンソールログを保存
  const logs = await page.evaluate(() => {
    return JSON.stringify(console);
  });
  await allure.attachment('コンソールログ', logs, 'application/json');
}

CI/CDパイプラインでの自動レポート生成

継続的インテグレーション環境でAllureレポートを自動生成する設定をご紹介します。

GitHub Actionsでの設定例

yaml# .github/workflows/test.yml
name: E2E テスト & Allure レポート

on:
  push:
    branches: [ main, develop ]
  pull_request:
    branches: [ main ]

jobs:
  test:
    runs-on: ubuntu-latest
    
    steps:
    - uses: actions/checkout@v4
    
    - name: Node.js セットアップ
      uses: actions/setup-node@v4
      with:
        node-version: '18'
        cache: 'yarn'

テスト実行とレポート生成

yaml    - name: 依存関係インストール
      run: yarn install --frozen-lockfile
    
    - name: Playwright ブラウザインストール
      run: yarn playwright install
    
    - name: E2Eテスト実行
      run: yarn test
    
    - name: Allure レポート生成
      if: always()
      run: |
        yarn allure generate allure-results --clean

レポートのアーティファクト保存

yaml    - name: Allure レポートのアップロード
      if: always()
      uses: actions/upload-artifact@v4
      with:
        name: allure-report
        path: allure-report/
        retention-days: 30
    
    - name: Allure レポートの GitHub Pages デプロイ
      if: github.ref == 'refs/heads/main'
      uses: peaceiris/actions-gh-pages@v3
      with:
        github_token: ${{ secrets.GITHUB_TOKEN }}
        publish_dir: ./allure-report

GitHub Actionsを使用することで、プルリクエストやマージのたびに自動的にテストが実行され、美しいAllureレポートが生成されるようになります。

Docker環境での実行設定

dockerfile# Dockerfile.test
FROM mcr.microsoft.com/playwright:v1.40.0-focal

WORKDIR /app
COPY package.json yarn.lock ./
RUN yarn install --frozen-lockfile

COPY . .
CMD ["yarn", "test:report"]
yaml# docker-compose.test.yml
version: '3.8'
services:
  playwright-test:
    build:
      context: .
      dockerfile: Dockerfile.test
    volumes:
      - ./allure-results:/app/allure-results
      - ./allure-report:/app/allure-report
    environment:
      - TEST_ENV=docker

Docker環境でのテスト実行により、ローカル環境に依存しない一貫したテスト結果を得られます。

まとめ

PlaywrightとAllureの組み合わせにより、従来のテストレポートでは実現できない美しく情報豊富な可視化が可能になります。開発チーム全体での情報共有が改善され、テスト結果に基づく意思決定が迅速かつ正確に行えるようになるでしょう。

特に重要なポイントは以下の通りです:

  • 段階的な導入により、既存のワークフローへの影響を最小限に抑制
  • カスタムアノテーションとステップ分割による詳細な情報記録
  • CI/CDパイプラインとの統合による自動化の実現
  • ステークホルダー全体が理解しやすい形での結果表示

今回ご紹介した手法を活用することで、テスト品質の向上とプロジェクト全体のコミュニケーション改善を同時に実現できます。

関連リンク