azure-microsoft-playwright-testing-ts について
クラウドホスト型ブラウザーで Playwright テストを実行し、Azure ポータルでレポートする TypeScript 向けスキルです。サービス接続の設定やブラウザーへの手動接続に対応し、現行の @azure/playwright パッケージへの移行方法も説明します。
主な機能
- 01クラウドブラウザーでのテスト実行設定
- 02サービスブラウザーへの手動接続
- 03Azure ポータルレポートの追加
- 04Entra ID またはアクセストークン認証
- 05GitHub Actions と Azure Pipelines の統合
活用シーン
- 01クラウドワークスペースでのブラウザーテスト
- 02CI/CD での Playwright テスト実行
- 03Azure ポータルでのテスト実行確認
- 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"],
],
}
);
ベストプラクティス
- Entra ID 認証を使用する — アクセストークンよりも安全です
- 認証情報を明示的に指定する — 常に
credential: new DefaultAzureCredential()を渡します - アーティファクトを有効にする — 構成で
trace: "on-first-retry"、video: "retain-on-failure"を設定します - ワーカーをスケールする — 並列実行には
--workers=20以上を使用します - リージョンを選択する — テスト対象に最も近いリージョンを選びます
- HTML レポーターを先に指定する — Azure レポーターを使用する場合は、Azure レポーターより先に HTML レポーターを記述します
使用する場面
このスキルは、概要で説明されているワークフローまたはアクションを実行する場合に適用できます。
制限事項
- このスキルは、タスクが上記の説明範囲に明確に一致する場合にのみ使用してください。
- 出力を、環境固有の検証、テスト、または専門家によるレビューの代わりとして扱わないでください。
- 必要な入力、権限、安全上の境界、または成功基準が不足している場合は、作業を中断して確認してください。
リモートブラウザーは、exposeNetwork を通じて公開されたエンドポイントにアクセスでき、秘密情報を含むトレースやスクリーンショットをアップロードする可能性があります。接続する前に、ステージングホスト、テスト用認証情報、アーティファクトの保持期間、ワーカー数とコストの予算を設定してください。ループバックアクセスはネットワーク機能であり、隔離を意味するものではありません。信頼できないフォークのコードにクラウド認証情報を公開したり、これらのテストから本番環境への書き込みを実行したりしないでください。
コメント
Markdown 対応