Azure Microsoft Playwright Testing Ts

作者 microsoft354361d83247MIT收录于 2026年10月8日更新于 2026年10月8日

Run Playwright tests at scale using Azure Playwright Workspaces (formerly Microsoft Playwright Testing). Use when scaling browser tests across cloud-hosted browsers, integrating with CI/CD pipelines, or publishing test results to the Azure portal.

AI 生成的概览

指导在 Azure Playwright Workspaces 上使用云端浏览器大规模运行 Playwright 测试并发布门户报告。

功能
该技能提供配置 @azure/playwright TypeScript SDK 的说明,使 Playwright 测试在 Azure Playwright Workspaces 的云端浏览器上运行。内容涵盖安装、环境变量、Microsoft Entra 与自定义凭据认证、服务配置、运行测试、Azure 报告器、手动浏览器连接、配置选项,以及 GitHub Actions 和 Azure Pipelines 的 CI/CD 集成。它还说明了如何从已停用的 @azure/microsoft-playwright-testing 包迁移到 @azure/playwright。
适用场景
适用于跨云端浏览器扩展浏览器测试、将 Playwright 测试集成到 CI/CD 流水线,或将测试结果发布到 Azure 门户的场景。也适合从旧版 Microsoft Playwright Testing 包迁移的项目。
运行要求
需要 Node.js 和 npm、Playwright 1.47+(Azure 报告器功能需 1.57+),以及 @azure/playwright、@playwright/test 和 @azure/identity 包。需要 Azure Playwright Workspaces 服务 URL、Azure 凭据(例如通过 az login 或托管标识)以及访问 Azure 的网络。该技能不包含脚本,仅为说明文档。

Azure Playwright Workspaces SDK for TypeScript

Run Playwright tests at scale with cloud-hosted browsers and integrated Azure portal reporting.

Migration Notice: @azure/microsoft-playwright-testing is retired on March 8, 2026. Use @azure/playwright instead. See migration guide.

Installation

bash
# Recommended: Auto-generates confignpm init @azure/playwright@latest
# Manual installationnpm install @azure/playwright --save-devnpm install @playwright/test@^1.47 --save-devnpm install @azure/identity --save-dev

Requirements:

  • Playwright version 1.47+ (basic usage)
  • Playwright version 1.57+ (Azure reporter features)

Environment Variables

bash
PLAYWRIGHT_SERVICE_URL=wss://eastus.api.playwright.microsoft.com/playwrightworkspaces/{workspace-id}/browsersAZURE_TOKEN_CREDENTIALS=prod # Required only if DefaultAzureCredential is used in production

Authentication

Microsoft Entra Token Credential (Recommended)

bash
# Sign in with Azure CLIaz login
typescript
// playwright.service.config.tsimport { defineConfig } from "@playwright/test";import { createAzurePlaywrightConfig, ServiceOS } from "@azure/playwright";import { DefaultAzureCredential, ManagedIdentityCredential } from "@azure/identity";import config from "./playwright.config";
// Local dev: DefaultAzureCredential. Production: set AZURE_TOKEN_CREDENTIALS=prod or AZURE_TOKEN_CREDENTIALS=<specific_credential>const credential = new DefaultAzureCredential({requiredEnvVars: ["AZURE_TOKEN_CREDENTIALS"]});// Or use a specific credential directly in production:// See https://learn.microsoft.com/javascript/api/overview/azure/identity-readme?view=azure-node-latest#credential-classes// const credential = new ManagedIdentityCredential();
export default defineConfig(  config,  createAzurePlaywrightConfig(config, {    os: ServiceOS.LINUX,    credential,  }));

Custom Credential

typescript
import { ManagedIdentityCredential } from "@azure/identity";import { createAzurePlaywrightConfig } from "@azure/playwright";
export default defineConfig(  config,  createAzurePlaywrightConfig(config, {    credential: new ManagedIdentityCredential(),  }));

Core Workflow

Service Configuration

typescript
// playwright.service.config.tsimport { 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({requiredEnvVars: ["AZURE_TOKEN_CREDENTIALS"]}),  }));

Run Tests

bash
npx playwright test --config=playwright.service.config.ts --workers=20

With Azure Reporter

typescript
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({requiredEnvVars: ["AZURE_TOKEN_CREDENTIALS"]}),  }),  {    reporter: [      ["html", { open: "never" }],      ["@azure/playwright/reporter"],    ],  });

Manual Browser Connection

typescript
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();});

Configuration Options

typescript
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

typescript
import { ServiceOS } from "@azure/playwright";
// Available valuesServiceOS.LINUX   // "linux" - defaultServiceOS.WINDOWS // "windows"

ServiceAuth Enum

typescript
import { ServiceAuth } from "@azure/playwright";
// Available valuesServiceAuth.ENTRA_ID      // Recommended - uses credentialServiceAuth.ACCESS_TOKEN  // Use PLAYWRIGHT_SERVICE_ACCESS_TOKEN env var

CI/CD Integration

GitHub Actions

yaml
name: playwright-tson: [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

yaml
- 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

Key Types

typescript
import {  createAzurePlaywrightConfig,  getConnectOptions,  ServiceOS,  ServiceAuth,  ServiceEnvironmentVariable,} from "@azure/playwright";
import type {  OsType,  AuthenticationType,  BrowserConnectOptions,  PlaywrightServiceAdditionalOptions,} from "@azure/playwright";

Migration from Old Package

Old (@azure/microsoft-playwright-testing)New (@azure/playwright)
getServiceConfig()createAzurePlaywrightConfig()
timeout optionconnectTimeout option
runId optionrunName option
useCloudHostedBrowsers optionRemoved (always enabled)
@azure/microsoft-playwright-testing/reporter@azure/playwright/reporter
Implicit credentialExplicit credential parameter

Before (Old)

typescript
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"]],  });

After (New)

typescript
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({requiredEnvVars: ["AZURE_TOKEN_CREDENTIALS"]}),  }),  {    reporter: [      ["html", { open: "never" }],      ["@azure/playwright/reporter"],    ],  });

Best Practices

  1. Use Microsoft Entra Token Credential — More secure than access tokens
  2. Use DefaultAzureCredential for local development; use ManagedIdentityCredential or WorkloadIdentityCredential for production
  3. Enable artifacts — Set trace: "on-first-retry", video: "retain-on-failure" in config
  4. Scale workers — Use --workers=20 or higher for parallel execution
  5. Region selection — Choose region closest to your test targets
  6. HTML reporter first — When using Azure reporter, list HTML reporter before Azure reporter

来源与署名

来源:microsoft/skills位于.github/plugins/azure-sdk-typescript/skills/azure-microsoft-playwright-testing-ts提交354361d

许可证: MIT

内容归原作者所有。SourceWeft 从公开仓库中收录这些内容。

举报或申请下架