最終更新:2026年10月31日。

GitHub ActionsでマルチリージョンのPlaywrightテストを実行する方法

ECサイトは、訪問者の接続元によって通貨、地域URL、市場固有のコンテンツを出し分けることがあります。1つのネットワークロケーションからだけテストすると、こうした地域体験の振る舞いを把握しにくくなります。

本ガイドでは、Python、Playwright、Pytest、GitHub Actions、国別住宅型プロキシを使い、同じGeoIPテストを米国・英国・ドイツから実行します。

テスト対象はGeolizr Shopifyデモストア で、テストスクリプトはKindProxy GeoIP Benchmarkリポジトリ のtests/test_geolizr_geoip.py です。

本稿ではそのGeolizr用の単一テストスクリプトを使います。リージョンのスケジューリングはGitHub Actionsが担当し、ブラウザ検証はPythonテストが担当します。汎用の別ファイルtest_region.pyや、2つ目のマルチサイト実装は作成しません。

目次

ワークフローの内容

ワークフローは、設定したリージョンごとに1つのジョブを実行します。

リージョン想定プロキシ国想定市場通貨
米国USUSD
英国GBGBP
ドイツDEEUR

各ジョブは次を行います。

  1. 同じGitHubリポジトリをチェックアウトする。
  2. Pythonの依存関係とChromiumをインストールする。
  3. そのリージョン用のプロキシ認証情報をGitHub Secretsから読み込む。
  4. tests/test_geolizr_geoip.pyを実行する。
  5. ジョブ終了後に確認できるよう、Pytestの結果ファイルをアップロードする。

テストは、プロキシで観測された出口国と、サイトのローカライズ挙動を分けて確認します。この区別は重要です。ブラウザのロケールを変えても公開IPは変わらず、IP照会だけでは期待どおりの市場コンテンツが表示されたことの証明にはなりません。

1. プロジェクトを取得する

リポジトリをクローンします。

git clone https://github.com/kindproxy/kindproxy-geoip-benchmark.git
cd kindproxy-geoip-benchmark

関連するテストファイルは次です。

tests/test_geolizr_geoip.py

リポジトリには依存関係リスト、Pytest設定、環境設定の例も含まれます。テストの2つ目のコピーを作らず、リポジトリ内の現行ファイルを正としてください。

2. テスト環境を理解する

テストは、同じGeolizrデモストアに対して3つの住宅型プロキシロケーションを比較します。

ブラウザコンテキストは、プロキシ接続とは別に設定します。プロキシがネットワーク経路と公開出口IPを決めます。Playwrightのブラウザコンテキストは、ロケールやタイムゾーンなどのブラウザ設定を制御します。

意味のある比較のため、リージョン実行間でブラウザ設定は揃えてください。ロケールやタイムゾーンがリージョンごとに変わると、差がプロキシロケーション由来なのかブラウザ設定由来なのか判別しにくくなります。

また、このテストは実行ごとに新しいブラウザコンテキストを使い、保存済みCookieやローカルストレージが結果に影響しにくくしています。

3. 依存関係をローカルにインストールする

Pythonの仮想環境を作成して有効化します。

python -m venv .venv

macOSまたはLinuxの場合:

source .venv/bin/activate

Windows PowerShellの場合:

.venv\Scripts\Activate.ps1

依存関係とChromiumをインストールします。

python -m pip install -r requirements.txt
python -m playwright install chromium

新規のLinuxマシンでは、ChromiumにOSパッケージも必要な場合があります。ブラウザが起動しないときは、Playwright Pythonのインストールドキュメント に従って必要なブラウザ依存関係を入れてください。

4. GitHubでプロキシ認証情報を設定する

ワークフローには、リージョンごとのプロキシゲートウェイと認証情報が必要です。GitHubリポジトリ、できれば専用のGitHub Environmentに追加してください。

例として、Settings → Environmentsでgeo-testsというEnvironmentを作成します。ワークフローが参照する名前でシークレットを追加します。

分かりやすい命名例は次のとおりです。

KP_PROXY_USERNAME_US
KP_PROXY_PASSWORD_US
KP_PROXY_USERNAME_UK
KP_PROXY_PASSWORD_UK
KP_PROXY_USERNAME_DE
KP_PROXY_PASSWORD_DE

共有プロキシゲートウェイはEnvironment変数として追加します。

KP_PROXY_SERVER

プロキシプロバイダーが提供するゲートウェイのホスト名、ポート、プロトコル、国ターゲティング用認証情報をそのまま使ってください。ユーザー名形式や国選択の構文はプロバイダーごとに異なります。

マルチリージョンテスト用の住宅型プロキシが必要ですか?

異なるロケーションでのサイトの振る舞いをテストするには、信頼性の高い国ターゲティング付き住宅型プロキシ接続が必要です。

KindProxyの住宅型プロキシは、国ターゲティング対応のHTTP/HTTPS住宅型エンドポイントを提供します。PlaywrightやSeleniumなどのブラウザ自動化を、異なるネットワークロケーションから実行できます。ダッシュボードでゲートウェイ、ユーザー名、パスワードを設定し、その値をローカルの.envファイルまたはGitHub Secretsに渡してください。

KindProxyの住宅型プロキシを見る

リポジトリの現行.env.exampleやテストスクリプトが別の環境変数名を使っている場合は、テストスクリプト・ローカル設定・ワークフローでその名前を揃えてください。1か所だけリネームしないでください。

実際のプロキシ認証情報を、ワークフローYAML、ソースコード、README、スクリーンショット、テスト出力に置かないでください。 ローカルの.envはGitに含めず、.gitignoreで除外されていることを確認してください。

GitHubドキュメント:

5. GitHub Actionsワークフローを追加する

リポジトリに次のワークフローファイルを作成します。

.github/workflows/geo-playwright.yml

以下のワークフローは、マトリクス構造とリージョン別シークレットの対応を示します。使う前に、envセクションの環境変数名を、tests/test_geolizr_geoip.pyが実際に読み取り、リポジトリの.env.exampleに記載されている名前と揃えてください。 ワークフローはテストが期待する設定を渡す必要があり、2つ目の設定インターフェースを持ち込まないでください。

name: Multi-region Geolizr Playwright tests

on:
  workflow_dispatch:
  push:
    branches:
      - main

permissions:
  contents: read

jobs:
  geolizr-geo-test:
    name: Geolizr GeoIP test (${{ matrix.region }})
    runs-on: ubuntu-latest
    environment: geo-tests
    timeout-minutes: 15

    strategy:
      fail-fast: false
      max-parallel: 3
      matrix:
        include:
          - region: US
            username_secret: KP_PROXY_USERNAME_US
            password_secret: KP_PROXY_PASSWORD_US
          - region: UK
            username_secret: KP_PROXY_USERNAME_UK
            password_secret: KP_PROXY_PASSWORD_UK
          - region: DE
            username_secret: KP_PROXY_USERNAME_DE
            password_secret: KP_PROXY_PASSWORD_DE

    steps:
      - name: Check out repository
        uses: actions/checkout@v6

      - name: Set up Python
        uses: actions/setup-python@v6
        with:
          python-version: "3.12"
          cache: pip

      - name: Install dependencies
        run: |
          python -m pip install --upgrade pip
          pip install -r requirements.txt
          python -m playwright install --with-deps chromium

      - name: Run Geolizr test
        env:
          TEST_REGION: ${{ matrix.region }}
          PROXY_SERVER: ${{ vars.KP_PROXY_SERVER }}
          PROXY_USERNAME: ${{ secrets[matrix.username_secret] }}
          PROXY_PASSWORD: ${{ secrets[matrix.password_secret] }}
        run: |
          pytest -v tests/test_geolizr_geoip.py \
            --junitxml="test-results-${TEST_REGION}.xml"

      - name: Upload test result
        if: always()
        uses: actions/upload-artifact@v4
        with:
          name: geolizr-result-${{ matrix.region }}
          path: test-results-${{ matrix.region }}.xml
          if-no-files-found: ignore

重要: ワークフローを実際のテストスクリプトに合わせる

上記のマトリクスは、リージョン固有の認証情報の選び方を示しています。テストスクリプトがリージョン設定を受け取り、プロキシサーバー・ユーザー名・パスワードを環境変数から読む前提です。

ワークフローをコミットする前に、実際のtest_geolizr_geoip.pyを確認してください。

  • スクリプトがすでにリージョン変数を読むなら、その正確な変数名でマトリクス値を渡す。
  • リージョンごとの別環境変数を期待するなら、ワークフローでその正確な変数をマッピングする。
  • Pytestのパラメータやコマンドラインオプションでリージョンを選ぶなら、既存のインターフェースを使う。
  • Pythonスクリプトが実際に読まない限り、ワークフローにTEST_REGIONやPROXY_SERVERなどの名前を追加しない。

ワークフローとテストスクリプトは設定契約で一致している必要があります。リポジトリ内のテストファイルが正です。

fail-fast: falseは、1つのリージョンが失敗しても他のリージョンジョブを完了させます。max-parallel: 3は設定した3ジョブの同時実行を許可します。timeout-minutesは停止したテストがランナーを無限に占有しないようにします。

6. CI有効化前にローカルでテストを実行する

GitHub Actionsに頼る前に、既存テストがローカルで動くことを確認してください。

リポジトリの.env.exampleとREADMEにある変数名と設定形式に従い、次を実行します。

pytest -v tests/test_geolizr_geoip.py

一度に1リージョンだけ試す場合は、テストスクリプトにすでに実装されているリージョン選択の仕組みを使ってください。コードに存在しない変数やコマンドラインオプションを仮定しないでください。

ローカルで成功すれば、テストコードやプロキシ設定の問題と、GitHub Actions設定の問題を切り分けやすくなります。

7. GitHub Actionsで結果を確認する

リポジトリのActionsタブを開き、ワークフロー実行を選択します。

3リージョンマトリクスでは、次の別ジョブが表示されるはずです。

  • Geolizr GeoIP test (US)
  • Geolizr GeoIP test (UK)
  • Geolizr GeoIP test (DE)

各ジョブを開き、Pytest出力を確認してください。テストが結果ファイルを生成した場合、ワークフローはリージョンごとにJUnit XMLアーティファクトもアップロードします。

次のターミナル風の結果画像は、Geolizrテスト実行でのリージョン観測を示します。テスト出力の要約であり、GitHub Actions画面のスクリーンショットではありません。

米国

Playwright GeoIP Pytestのターミナル出力。米国住宅型プロキシの国検出とUSDローカライズを示す

英国

Playwright GeoIP Pytestのターミナル出力。英国住宅型プロキシ検出、GBPローカライズ、en-gbへの地域リダイレクトを示す

ドイツ

Playwright GeoIP Pytestのターミナル出力。ドイツ住宅型プロキシの国検出とEURローカライズを示す

Pytestのケースがパスしたことは、スクリプトが定義したアサーションが成功したことを意味します。ページ上のあらゆる通貨シグナルが一致することや、最終チェックアウト金額まで検証済みであることを意味しません。特に、テストステータスだけを根拠にせず、詳細な観測結果を確認してください。

異なる国からウェブサイトをテストする

これらの結果は、複数のネットワークロケーションからテストする重要性を示しています。ウェブサイトは、リクエストに使った住宅型IPのロケーションによって訪問者を異なる方法で識別することがあります。

独自のGeoIP確認、ローカライズQA、リージョン別ブラウザワークフローに住宅型IPが必要な場合、KindProxyは複数国にわたる住宅型プロキシアクセスを提供します。同じKindProxy GeoIP Benchmark のテストパターンを、自分の認証情報で再利用できます。

KindProxyを始める

8. よくあるGitHub Actionsの問題

症状確認すること
プロキシ認証情報が空geo-tests Environmentにシークレットがあり、ワークフローが正しい名前を参照しているか確認する。
ブラウザが起動できないPlaywrightのインストールステップと、必要なLinuxブラウザ依存関係を確認する。
プロキシ認証が失敗するゲートウェイのプロトコル、ホスト名、ポート、ユーザー名、パスワード、プロバイダー側のアクセス規則を確認する。
観測された国が想定外国ターゲティング設定を確認し、プロキシ経路が誤っていると断定する前に別のGeoIP照会ソースと比較する。
サイトが想定の市場を表示しないサイトの現行挙動、Cookie、保存済み市場設定、デモストアの変更を確認する。
1リージョンだけ失敗し他は成功そのリージョンのジョブログを開く。fail-fast: falseなら他のマトリクスジョブは完了できる。
ワークフローがテストを見つけられないリポジトリパスが正確にtests/test_geolizr_geoip.pyで、コマンドがリポジトリルートから実行されているか確認する。

アサーション失敗は、自動的にプロキシ不良を意味しません。GeoIPデータベースは食い違うことがあり、サイトのローカライズロジックは変わり得て、デモストアのストアフロント挙動も更新され得ます。

9. 認証情報を保護し、不要なトラフィックを避ける

プロキシ認証付きブラウザテストを実行するときは、次の運用を守ってください。

  • 認証情報はGitHub Secretsまたは保護されたEnvironmentに保存する。
  • 信頼できないプルリクエストのコードにプロキシ認証情報を公開しない。
  • 認証付きテストは信頼できるブランチ、または手動承認したワークフローからのみ実行する。
  • リージョン実行ごとに新しいブラウザコンテキストを使う。
  • 並列ジョブ数とリクエスト頻度は妥当な範囲に保つ。
  • 所有またはアクセス権限のあるウェブサイトだけをテストする。
  • 完全なプロキシ認証情報、認可ヘッダー、Cookie、その他の機密データをCIログに出力しない。

例のワークフローはmainへのpushと手動ディスパッチを使います。信頼できないコードがシークレットを露出し得るpull_requestイベントでは、認証付きテストを実行しません。

FAQ

GitHub Actionsで住宅型プロキシ経由のPlaywrightテストを実行できますか?

はい。GitHub Actionsのジョブは、環境変数またはGitHub Secrets経由でプロキシゲートウェイと認証情報をPlaywrightに渡せます。ワークフローとPythonテストは、まったく同じ環境変数名を使う必要があります。

複数の国を並列でテストできますか?

はい。GitHub Actionsのマトリクスで、米国・英国・ドイツ向けに別ジョブを作成できます。各ジョブは同じテストスクリプトを実行しつつ、国固有のプロキシ認証情報を使えます。

Playwrightのロケールを変えるとプロキシの国も変わりますか?

いいえ。プロキシがネットワーク経路と公開出口IPを制御します。Playwrightのロケールとタイムゾーンはブラウザ設定であり、ネットワークロケーションは変えません。

検出された国が正しくない場合、何を確認すべきですか?

まずプロキシゲートウェイ、認証情報、国ターゲティング設定を確認します。次に観測された公開出口IPを確認し、別のGeoIP照会ソースと比較してください。GeoIPデータベースによって結果が異なることがあります。

GitHub Actionsでプロキシ認証情報をどう保護すべきですか?

認証情報はGitHub Secretsまたは保護されたGitHub Environmentに保存してください。信頼できないプルリクエストのコードに公開したり、ワークフローYAMLに直接書いたり、CIログに出力したりしないでください。

まとめ

GitHub Actionsは、マトリクスを使って同じPlaywrightテストを複数のリージョンプロキシ設定から実行できます。本プロジェクトでは、各マトリクスジョブが既存のtests/test_geolizr_geoip.pyを、異なる住宅型プロキシロケーション経由でGeolizr Shopifyデモストアに対して実行します。

これにより焦点が保てます。テストスクリプトは1つ、対象サイトは1つ、米国・英国・ドイツのCIジョブは別々。 GitHub Actions自動化のためだけに、汎用のリージョンテストを複製する必要はありません。

テストコードとプロジェクト設定はKindProxy GeoIP Benchmarkリポジトリ にあります。

ストアフロントでテストが何を観測したかを知りたい場合は、関連レポートを参照してください。住宅型プロキシはECの価格と通貨を変えるか?Playwright GeoIPテスト 。

自分でマルチリージョンのプロキシテストを実行する

異なる国からウェブサイトをテストする準備はできましたか?

GitHub Actionsワークフローはこのガイドを使い、PlaywrightテストスクリプトはKindProxy GeoIP Benchmark プロジェクトをクローンし、国ターゲティング付き住宅型IPが必要な実行ではKindProxyの住宅型プロキシを使ってください。

住宅型プロキシプランを見る

関連記事