【Python】Allureレポート導入ガイド|pytest × Playwright のテスト結果を美しく可視化する方法

テスト自動化

pytestでテスト自動化を行っていると、テスト結果をより見やすいレポートとして共有したくなることがあります。Allureレポートを導入すると、pytestのテスト結果をグラフ・スクリーンショット・ステップ付きのリッチなHTMLレポートとして出力できます。この記事では、Python × pytest環境にAllureを導入する方法から、スクリーンショット付きレポート作成、GitHub Actions連携まで実務レベルで解説します。

Allureレポートを導入すると、pytestのテスト結果をグラフ・スクリーンショット・ステップ詳細付きの美しいHTMLレポートとして出力でき、QAレポートの質が一段階上がります。

📌 この記事はこんな方におすすめ

  • pytest-htmlより見やすいテストレポートを作りたいQAエンジニア
  • Allureの導入手順を一から学びたい方
  • Playwright × pytestのテスト結果をチームや上司に共有したい方
  • CI/CDのレポートをもっとリッチにしたい方

✅ この記事を読むと得られること

  • AllureをPython/pytestに導入してレポートを生成できるようになる
  • テストにステップ・説明・スクリーンショットを追加する方法がわかる
  • GitHub ActionsでAllureレポートを自動生成・公開する方法がわかる

👤 この記事を書いた人

QAエンジニアとして実務でSelenium・Playwright・pytestを活用したテスト自動化に従事。Allureレポートも実際のプロジェクトで導入しており、ハマりやすいポイントを含めて現場目線で解説します。実装コードはGitHubで公開中:github.com/YOSHITSUGU728/automated-testing-portfolio

📌 結論:Allureでできる3つのこと

  • 美しいHTMLレポート:グラフ・円グラフ・テスト履歴が一目でわかるダッシュボード
  • テスト詳細の可視化:ステップ・スクリーンショット・ログを1テストごとに確認できる
  • CI/CD連携:GitHub Actionsで自動生成してGitHub Pagesで公開できる

pytest-htmlでも基本的なレポートは作れますが、テストが増えてくると次のような不満が出てきます。

  • どのテストが失敗したか一覧で把握しにくい
  • 失敗の原因をスクリーンショット付きで確認できない
  • テストの実行履歴・トレンドが見えない

Allureはこうした課題を解決する、テスト自動化の現場で最も広く使われているレポートフレームワークです。この記事ではインストールから実際のレポート生成・CI/CD連携まで一気通貫で解説します。

① pytest-html と Allure はどちらを使うべきか?違いと選び方

まずAllureとpytest-htmlの違いを整理します。

機能pytest-htmlAllure
セットアップの手軽さ⭐⭐⭐ pip install だけ⭐⭐ CLIの別途インストールが必要
レポートのビジュアルシンプルなHTML表グラフ・ダッシュボード・履歴付き
ステップ詳細❌ なし✅ @allure.step で追加可能
スクリーンショット添付🔺 限定的✅ allure.attach で簡単に追加
実行履歴・トレンド❌ なし✅ 過去の結果と比較できる
CI/CD連携✅ アーティファクト保存✅ GitHub Pages公開も可能
💡 使い分けの目安:テストが10〜20件程度の小規模や、ローカルでの確認用途ならpytest-htmlで十分です。チームへの共有・CI/CDへの組み込み・テスト件数が50件を超えてきたらAllureへの移行を検討するタイミングです。

② Python × pytest に Allure をインストールする方法

Allureは「PythonパッケージのAllureアダプター」と「レポートを生成するAllure CLI」の2つをインストールする必要があります。

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

まずpytestと連携するためのAllureアダプターをインストールします。

# allure-pytest をインストール
pip install allure-pytest

# requirements.txt に追加する場合
# allure-pytest

Allure CLI のインストール

次にHTMLレポートを生成するAllure CLIをインストールします。Allure CLIはJavaが必要です。OSごとのインストール方法を確認します。

# macOS(Homebrewを使う場合)
brew install allure

# Windows(Scoopを使う場合)
scoop install allure

# Linux(手動インストール)
# 1. Allure公式からzipをダウンロード
# 2. 展開して bin/ にPATHを通す

# インストール確認
allure --version
💡 Java不要の方法:CI環境(GitHub Actions)では allure-combineallurectl を使うとJavaなしでレポート生成できます。ローカルで手軽に確認したい場合は、後述のように pytest-html と併用するのもおすすめです。

③ pytestでAllureレポートを生成する基本的な使い方

Allureはテスト実行時にまず「結果ファイル」を生成し、その後CLIでHTMLレポートに変換する2ステップの流れです。

STEP 1:テスト実行(結果ファイルの生成)

--alluredir オプションを付けてpytestを実行すると、指定フォルダにAllure用の結果ファイルが出力されます。

# allure-results フォルダに結果ファイルを出力
pytest --alluredir=allure-results

# スモークテストだけ実行して結果を出力
pytest -m smoke --alluredir=allure-results

# 既存の結果ファイルをクリアして実行
pytest --alluredir=allure-results --clean-alluredir

STEP 2:HTMLレポートの生成・表示

結果ファイルが生成されたらAllure CLIでHTMLレポートに変換します。ローカル確認用と、CI/CD保存用の2つの方法があります。

# ブラウザで自動起動してレポートを表示(ローカルサーバー起動)
allure serve allure-results

# HTMLファイルとして出力(CI/CDでのアーティファクト保存用)
allure generate allure-results -o allure-report --clean

実行結果サンプル

$ pytest --alluredir=allure-results -v

========================= test session starts ==========================
collected 3 items

tests/smoke/test_login_smoke.py::test_ログイン_正常系      PASSED  [ 33%]
tests/smoke/test_login_smoke.py::test_ログイン_パスワード誤り  PASSED  [ 66%]
tests/smoke/test_login_smoke.py::test_ログイン_ロックアウト  PASSED  [100%]

========================== 3 passed in 5.34s ===========================

$ allure serve allure-results
Starting web server...
Server started at: http://127.0.0.1:PORT/

④ pytestテストにAllure情報(step・severity)を追加する方法

Allureの本領はテストコードにデコレータを追加することで、レポートに詳細情報を付加できる点です。

基本デコレータ

以下のデコレータを組み合わせることで、レポート上でテストを機能・重要度・ストーリーで分類できます。

import allure
import pytest
from pages.login_page import LoginPage

@allure.epic("認証機能")           # 大分類(プロダクト機能)
@allure.feature("ログイン")        # 中分類(機能名)
@allure.story("正常系ログイン")    # 小分類(ユーザーストーリー)
@allure.severity(allure.severity_level.CRITICAL)  # 重要度
@pytest.mark.smoke
def test_ログイン_正常系(page, base_url, valid_credentials):
    """正常なログイン情報でログインが成功することを確認"""

    with allure.step("ログインページに遷移"):
        login_page = LoginPage(page)
        login_page.navigate(f"https://{base_url}/")

    with allure.step("ログイン情報を入力して送信"):
        login_page.login(
            valid_credentials["username"],
            valid_credentials["password"]
        )

    with allure.step("ログイン後のURLを確認"):
        assert page.url.endswith("/inventory.html"), \
            f"ログイン後のURLが期待値と異なります: {page.url}"

severity(重要度)の種類

severity用途
BLOCKERこれが失敗するとリリース不可
CRITICAL基幹機能のテスト(ログイン・決済など)
NORMAL標準的な機能テスト
MINOR軽微な機能のテスト
TRIVIALUI細部・文言チェックなど

⑤ Playwright × Allureでスクリーンショットを自動添付する方法

Playwright × Allureの組み合わせで最も強力なのが、失敗時のスクリーンショット自動添付です。conftest.pyに書いておくと全テストに自動適用されます。

以下のコードを tests/conftest.py に追記します。テストが失敗したタイミングで自動的にスクリーンショットをキャプチャしてAllureレポートに添付します。

# tests/conftest.py に追記

import allure
import pytest

@pytest.hookimpl(tryfirst=True, hookwrapper=True)
def pytest_runtest_makereport(item, call):
    """テスト失敗時にスクリーンショットをAllureレポートに添付する"""
    outcome = yield
    report = outcome.get_result()

    # テストが失敗したとき
    if report.when == "call" and report.failed:
        # テストに page fixture が使われている場合のみ
        page = item.funcargs.get("page")
        if page:
            screenshot = page.screenshot()
            allure.attach(
                screenshot,
                name="失敗時のスクリーンショット",
                attachment_type=allure.attachment_type.PNG
            )

手動で任意のタイミングにスクリーンショットを添付したい場合は以下のように書きます:

import allure

def test_カート追加(logged_in_page):
    page = logged_in_page

    with allure.step("商品をカートに追加"):
        page.click("[data-test='add-to-cart-sauce-labs-backpack']")

        # 任意のタイミングでスクリーンショットを添付
        allure.attach(
            page.screenshot(),
            name="カート追加後の画面",
            attachment_type=allure.attachment_type.PNG
        )

    with allure.step("カートバッジの数を確認"):
        badge = page.locator(".shopping_cart_badge").text_content()
        assert badge == "1"

⑥ Allure用 pytest.ini の設定

pytest.iniにAllure用の設定を追加します。これで毎回 --alluredir オプションを手入力しなくて済みます。

# pytest.ini
[pytest]
testpaths = tests

addopts =
    -v
    --tb=short
    --alluredir=allure-results
    --clean-alluredir

markers =
    smoke: スモークテスト
    regression: 回帰テスト
    e2e: E2Eテスト
💡 ポイント--clean-alluredir を付けると毎回古い結果ファイルが削除されてから実行されるため、前回のテスト結果が混入しません。ただし履歴トレンドを保持したい場合は付けずに手動で管理するか、CI/CDのアーティファクト機能を使います。

⑦ GitHub Actions で Allure レポートを自動生成する方法

GitHub ActionsでAllureレポートを自動生成してアーティファクトとして保存する設定です。以下のYAMLファイルをそのままコピーして使えます。

# .github/workflows/allure.yml

name: E2E Tests with Allure Report

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

jobs:
  test:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v4

      - name: Python 3.11 をセットアップ
        uses: actions/setup-python@v5
        with:
          python-version: "3.11"

      - name: 依存パッケージをインストール
        run: |
          python -m pip install --upgrade pip
          pip install -r requirements.txt

      - name: Playwrightブラウザをインストール
        run: playwright install chromium --with-deps

      - name: テスト実行(Allure結果ファイルを出力)
        run: pytest --alluredir=allure-results
        continue-on-error: true   # テスト失敗してもレポート生成を続ける

      - name: Allure CLIをセットアップ
        uses: simple-elf/allure-setup-action@master
        with:
          allure_version: "2.27.0"

      - name: Allure HTMLレポートを生成
        run: allure generate allure-results -o allure-report --clean

      - name: レポートをアーティファクトとして保存
        uses: actions/upload-artifact@v4
        if: always()
        with:
          name: allure-report
          path: allure-report/
          retention-days: 30
💡 実務Tipcontinue-on-error: true をテスト実行ステップに付けると、テストが失敗してもその後のAllureレポート生成ステップが実行されます。失敗時こそレポートが必要なので必ず設定しましょう。

FAQ

Q. allure serve と allure generate の違いは何ですか?

allure serve はローカルサーバーを起動してブラウザで自動表示します。ファイルを残さないため確認用途に便利です。allure generate はHTMLファイルとして出力するので、CI/CDのアーティファクト保存やGitHub Pagesへのデプロイに使います。

Q. pytest-html と Allure は同時に使えますか?

はい、同時に使えます。addopts--alluredir=allure-results --html=reports/report.html --self-contained-html を並べて記述すると、両方のレポートを同時に生成できます。チームにAllureを展開しつつ、手軽な確認にpytest-htmlも残すという移行期の運用にも有効です。

Q. @allure.step は必ず書かないといけませんか?

必須ではありません。@allure.step がなくてもレポートは生成されます。ただし step を書くとレポート上でテストの各操作が階層表示され、どのステップで失敗したかが一目でわかります。特に複雑なE2Eテストや、チームへの共有用レポートには追記することをおすすめします。

Q. テスト履歴・トレンドを表示するにはどうすればいいですか?

allure generate 実行時に前回の allure-report/history フォルダを allure-results/history にコピーしてから生成すると、履歴グラフが表示されます。CI/CDでは前回のレポートをアーティファクトからダウンロードして history を引き継ぐ実装が一般的です。

⚠️ Allureレポート導入でよくあるはまりポイント7選

Allureは設定が多い分、つまずきやすいポイントも多いです。事前に把握しておくことで余計なデバッグ時間を省けます。

① allure-pytest をインストールしても allure コマンドが使えない

pip install allure-pytest はPythonのアダプター(テスト結果ファイルの生成)のみをインストールします。HTMLレポートを生成する allure コマンドは別途Allure CLIのインストールが必要です。pip だけではコマンドが使えないので注意してください。

② allure-results フォルダが空でも allure generate が成功してしまう

pytestの実行に失敗した(collected 0 items など)場合、allure-results フォルダは作られても中身が空になることがあります。その状態でも allure generate は成功しますが、生成されたレポートは空のダッシュボードになります。まず pytest が正常に実行されているかを確認しましょう。

③ allure serve がブラウザを開かず終了する

WSL(Windows Subsystem for Linux)やSSH接続した環境では allure serve がブラウザを自動起動できずにエラー終了することがあります。その場合は allure generate allure-results -o allure-report でHTMLファイルを生成し、ブラウザから直接 allure-report/index.html を開いてください。

④ index.html をダブルクリックで開いてもレポートが表示されない

Allureのレポートはローカルファイルをダブルクリックで開くと「ブラウザのセキュリティ制限」でJSが動かずに空白になります。必ず allure serve か、ローカルサーバー(python -m http.server など)経由で開いてください。

⑤ GitHub Actions で allure コマンドが見つからない

CI環境にはAllure CLIが入っていません。simple-elf/allure-setup-action などのアクションを使ってCIステップ内でAllure CLIをインストールする必要があります。pip install allure-pytest だけでは allure generate コマンドが使えないので注意してください。

⑥ テスト失敗時に continue-on-error を付け忘れてレポートが生成されない

GitHub Actionsではデフォルトでテストが失敗するとジョブが中断します。pytest ステップに continue-on-error: true を付けないと、テスト失敗時にその後の allure generate ステップが実行されずレポートが生成されません。失敗時こそレポートが必要なので必ず付けましょう。

⑦ –clean-alluredir を付けると履歴トレンドが消える

--clean-alluredir は毎回 allure-results を削除するため、履歴データも一緒に消えてしまいます。Allureのトレンドグラフを使いたい場合は、allure-report/historyallure-results/history にコピーしてから --clean-alluredir なしで実行するか、CI/CDでアーティファクトから履歴を引き継ぐ仕組みを組む必要があります。

📋 この記事のまとめ

  • Allure は2ステップ構成:pytest実行で結果ファイルを生成→ allure generate でHTMLに変換
  • @allure.step でテストの各操作をレポートに階層表示でき、失敗箇所の特定が容易になる
  • スクリーンショット自動添付 は conftest.py の pytest_runtest_makereport フックで全テストに適用できる
  • severity・epic・feature・story で分類するとレポートのフィルタリングが強力になる
  • GitHub Actions では continue-on-error: true とAllure CLIのセットアップアクションが必須

まずは pip install allure-pytest とAllure CLIをインストールして、pytest --alluredir=allure-resultsallure serve allure-results の2コマンドだけでレポートを確認してみましょう。そこからステップ追加・スクリーンショット添付と段階的に充実させていくのがおすすめです。

タイトルとURLをコピーしました