mcpField
A
azure-microsoft-playwright-testing-ts

azure-microsoft-playwright-testing-ts

github.com/sickn33テスト・品質48.7k63 回インストール今日更新
リポジトリ

azure-microsoft-playwright-testing-ts について

クラウドホスト型ブラウザーで Playwright テストを実行し、Azure ポータルでレポートする TypeScript 向けスキルです。サービス接続の設定やブラウザーへの手動接続に対応し、現行の @azure/playwright パッケージへの移行方法も説明します。

主な機能

  1. 01クラウドブラウザーでのテスト実行設定
  2. 02サービスブラウザーへの手動接続
  3. 03Azure ポータルレポートの追加
  4. 04Entra ID またはアクセストークン認証
  5. 05GitHub Actions と Azure Pipelines の統合

活用シーン

  1. 01クラウドワークスペースでのブラウザーテスト
  2. 02CI/CD での Playwright テスト実行
  3. 03Azure ポータルでのテスト実行確認
  4. 04廃止済みパッケージからの移行

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/sickn33/agentic-awesome-skills --skill azure-microsoft-playwright-testing-ts

インストール後、Claude Code で/azure-microsoft-playwright-testing-tsを入力して読み込まれたか確認します。

詳細

Azure Playwright Workspaces SDK for TypeScript

クラウドホスト型ブラウザーと Azure ポータルの統合レポート機能を使用して、Playwright テストを大規模に実行します。

移行に関するお知らせ: @azure/microsoft-playwright-testing は 2026 年 3 月 8 日に廃止されます。代わりに @azure/playwright を使用してください。移行ガイドをご覧ください。

インストール

# Recommended: Auto-generates config
npm init @azure/playwright@latest

# Manual installation
npm install @azure/playwright --save-dev
npm install @playwright/test@^1.47 --save-dev
npm install @azure/identity --save-dev

要件:

  • Playwright バージョン 1.47 以降(基本的な使用)
  • Playwright バージョン 1.57 以降(Azure レポーター機能)

環境変数

PLAYWRIGHT_SERVICE_URL=wss://eastus.api.playwright.microsoft.com/playwrightworkspaces/{workspace-id}/browsers

認証

Microsoft Entra ID(推奨)
# Sign in with Azure CLI
az login
// playwright.service.config.ts
import { defineConfig } from "@playwright/test";
import { createAzurePlaywrightConfig, ServiceOS } from "@azure/playwright";
import { DefaultAzureCredential } from "@azure/identity";
import config from "./playwright.config";

export default defineConfig(
  config,
  createAzurePlaywrightConfig(config, {
    os: ServiceOS.LINUX,
    credential: new DefaultAzureCredential(),
  })
);
カスタム認証情報
import { ManagedIdentityCredential } from "@azure/identity";
import { createAzurePlaywrightConfig } from "@azure/playwright";

export default defineConfig(
  config,
  createAzurePlaywrightConfig(config, {
    credential: new ManagedIdentityCredential(),
  })
);

基本的なワークフロー

サービスの構成
// playwright.service.config.ts
import { defineConfig } from "@playwright/test";
import { createAzurePlaywrightConfig, ServiceOS } from "@azure/playwright";
import { DefaultAzureCredential } from "@azure/identity";
import config from "./playwright.config";

export default defineConfig(
  config,
  createAzurePlaywrightConfig(config, {
    os: ServiceOS.LINUX,
    connectTimeout: 30000,
    exposeNetwork: "<loopback>",
    credential: new DefaultAzureCredential(),
  })
);
テストの実行
npx playwright test --config=playwright.service.config.ts --workers=20
Azure レポーターを使用する
import { defineConfig } from "@playwright/test";
import { createAzurePlaywrightConfig, ServiceOS } from "@azure/playwright";
import { DefaultAzureCredential } from "@azure/identity";
import config from "./playwright.config";

export default defineConfig(
  config,
  createAzurePlaywrightConfig(config, {
    os: ServiceOS.LINUX,
    credential: new DefaultAzureCredential(),
  }),
  {
    reporter: [
      ["html", { open: "never" }],
      ["@azure/playwright/reporter"],
    ],
  }
);
ブラウザーへの手動接続
import playwright, { test, expect, BrowserType } from "@playwright/test";
import { getConnectOptions } from "@azure/playwright";

test("manual connection", async ({ browserName }) => {
  const { wsEndpoint, options } = await getConnectOptions();
  const browser = await (playwright[browserName] as BrowserType).connect(wsEndpoint, options);
  const context = await browser.newContext();
  const page = await context.newPage();

  await page.goto("https://example.com");
  await expect(page).toHaveTitle(/Example/);

  await browser.close();
});

構成オプション

type PlaywrightServiceAdditionalOptions = {
  serviceAuthType?: "ENTRA_ID" | "ACCESS_TOKEN";  // Default: ENTRA_ID
  os?: "linux" | "windows";                        // Default: linux
  runName?: string;                                // Custom run name for portal
  connectTimeout?: number;                         // Default: 30000ms
  exposeNetwork?: string;                          // Default: <loopback>
  credential?: TokenCredential;                    // REQUIRED for Entra ID
};
ServiceOS Enum
import { ServiceOS } from "@azure/playwright";

// Available values
ServiceOS.LINUX   // "linux" - default
ServiceOS.WINDOWS // "windows"
ServiceAuth Enum
import { ServiceAuth } from "@azure/playwright";

// Available values
ServiceAuth.ENTRA_ID      // Recommended - uses credential
ServiceAuth.ACCESS_TOKEN  // Use PLAYWRIGHT_SERVICE_ACCESS_TOKEN env var

CI/CD 統合

GitHub Actions
name: playwright-ts
on: [push, pull_request]

permissions:
  id-token: write
  contents: read

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Azure Login
        uses: azure/login@v2
        with:
          client-id: ${{ secrets.AZURE_CLIENT_ID }}
          tenant-id: ${{ secrets.AZURE_TENANT_ID }}
          subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}

      - run: npm ci
      
      - name: Run Tests
        env:
          PLAYWRIGHT_SERVICE_URL: ${{ secrets.PLAYWRIGHT_SERVICE_URL }}
        run: npx playwright test -c playwright.service.config.ts --workers=20
Azure Pipelines
- task: AzureCLI@2
  displayName: Run Playwright Tests
  env:
    PLAYWRIGHT_SERVICE_URL: $(PLAYWRIGHT_SERVICE_URL)
  inputs:
    azureSubscription: My_Service_Connection
    scriptType: pscore
    inlineScript: |
      npx playwright test -c playwright.service.config.ts --workers=20
    addSpnToEnvironment: true

主な型

import {
  createAzurePlaywrightConfig,
  getConnectOptions,
  ServiceOS,
  ServiceAuth,
  ServiceEnvironmentVariable,
} from "@azure/playwright";

import type {
  OsType,
  AuthenticationType,
  BrowserConnectOptions,
  PlaywrightServiceAdditionalOptions,
} from "@azure/playwright";

古いパッケージからの移行

旧 (@azure/microsoft-playwright-testing)新 (@azure/playwright)
getServiceConfig()createAzurePlaywrightConfig()
timeout オプションconnectTimeout オプション
runId オプションrunName オプション
useCloudHostedBrowsers オプション削除済み(常に有効)
@azure/microsoft-playwright-testing/reporter@azure/playwright/reporter
暗黙的な認証情報明示的な credential パラメーター
変更前(旧)
import { getServiceConfig, ServiceOS } from "@azure/microsoft-playwright-testing";

export default defineConfig(
  config,
  getServiceConfig(config, {
    os: ServiceOS.LINUX,
    timeout: 30000,
    useCloudHostedBrowsers: true,
  }),
  {
    reporter: [["@azure/microsoft-playwright-testing/reporter"]],
  }
);
変更後(新)
import { createAzurePlaywrightConfig, ServiceOS } from "@azure/playwright";
import { DefaultAzureCredential } from "@azure/identity";

export default defineConfig(
  config,
  createAzurePlaywrightConfig(config, {
    os: ServiceOS.LINUX,
    connectTimeout: 30000,
    credential: new DefaultAzureCredential(),
  }),
  {
    reporter: [
      ["html", { open: "never" }],
      ["@azure/playwright/reporter"],
    ],
  }
);

ベストプラクティス

  1. Entra ID 認証を使用する — アクセストークンよりも安全です
  2. 認証情報を明示的に指定する — 常に credential: new DefaultAzureCredential() を渡します
  3. アーティファクトを有効にする — 構成で trace: "on-first-retry"、video: "retain-on-failure" を設定します
  4. ワーカーをスケールする — 並列実行には --workers=20 以上を使用します
  5. リージョンを選択する — テスト対象に最も近いリージョンを選びます
  6. HTML レポーターを先に指定する — Azure レポーターを使用する場合は、Azure レポーターより先に HTML レポーターを記述します

使用する場面

このスキルは、概要で説明されているワークフローまたはアクションを実行する場合に適用できます。

制限事項

  • このスキルは、タスクが上記の説明範囲に明確に一致する場合にのみ使用してください。
  • 出力を、環境固有の検証、テスト、または専門家によるレビューの代わりとして扱わないでください。
  • 必要な入力、権限、安全上の境界、または成功基準が不足している場合は、作業を中断して確認してください。

リモートブラウザーは、exposeNetwork を通じて公開されたエンドポイントにアクセスでき、秘密情報を含むトレースやスクリーンショットをアップロードする可能性があります。接続する前に、ステージングホスト、テスト用認証情報、アーティファクトの保持期間、ワーカー数とコストの予算を設定してください。ループバックアクセスはネットワーク機能であり、隔離を意味するものではありません。信頼できないフォークのコードにクラウド認証情報を公開したり、これらのテストから本番環境への書き込みを実行したりしないでください。

コメント