你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

快速入门:使用 Playwright Workspaces 设置持续端到端测试

在本快速入门中,你将使用 Playwright Workspaces 设置持续端到端测试,以验证 Web 应用在每次提交代码时是否可以在不同浏览器和操作系统上正确运行,并使用服务仪表板轻松对测试进行故障排除。 了解如何将 Playwright 测试添加到持续集成 (CI) 工作流,例如 GitHub Actions、Azure Pipelines 或其他 CI 平台。

完成本快速入门后,你将拥有一个 CI 工作流,此工作流使用 Playwright Workspaces 大规模运行 Playwright 测试套件并帮助你轻松对测试进行故障排除。

先决条件

获取服务区域终结点 URL

在服务配置中,必须提供特定于区域的服务终结点。 终结点取决于在创建工作区时选择的 Azure 区域。

若要获取服务终结点 URL 并将其存储为 CI 工作流机密,请执行以下步骤:

  1. 使用 Azure 帐户登录到 Azure 门户,并导航到工作区。

  2. 选择“入门”页

    显示如何导航到“入门”页面的屏幕截图。

  3. 在“在设置中添加区域终结点”中,复制服务终结点 URL

    终结点 URL 与创建工作区时选择的 Azure 区域匹配。

  4. 将服务终结点 URL 存储在 CI 工作流机密中:

    机密名称 价值
    PLAYWRIGHT_SERVICE_URL 粘贴之前复制的终结点 URL。

添加服务配置文件

如果没有配置 Playwright 测试用于运行服务,请将服务配置文件添加到存储库。 下一步,在 Playwright CLI 上指定此服务配置文件。

  1. 连同 playwright.service.config.ts 文件一起创建新文件 playwright.config.ts

    (可选)使用playwright.service.config.ts中的 文件。

  2. 向新文件添加以下内容:

    import { defineConfig } from '@playwright/test';
    import { createAzurePlaywrightConfig, ServiceOS } from '@azure/playwright';
    import { DefaultAzureCredential } from '@azure/identity';
    import config from './playwright.config';
    
    /* Learn more about service configuration at https://aka.ms/pww/docs/config */
    export default defineConfig(
      config,
      createAzurePlaywrightConfig(config, {
        exposeNetwork: '<loopback>',
        connectTimeout: 3 * 60 * 1000, // 3 minutes
        os: ServiceOS.LINUX,
        credential: new DefaultAzureCredential(),
      })
    );
    

    默认情况下,服务配置可让你使用云托管浏览器并行运行测试来加速构建管道。

  3. 保存文件并提交到源代码存储库。

更新 package.json 文件

更新存储库中的 package.json 文件,以在 devDependencies 节中添加有关 Playwright Workspaces 包的详细信息。

"devDependencies": {
    "@azure/playwright": "latest"
}

安装服务包

在项目中,安装 Playwright Workspaces 包。

dotnet add package Azure.Developer.Playwright.NUnit

该命令会通过将服务包详细信息添加到 csproj 部分来更新项目的 ItemGroup 文件。 请记得提交这些更改。

  <ItemGroup>
    <PackageReference Include="Azure.Developer.Playwright.NUnit" Version="1.0.0" />
  </ItemGroup>

设置服务配置

  1. 在项目的根目录中创建一个新文件 PlaywrightServiceNUnitSetup.cs。 此文件有助于使用服务对客户端进行身份验证。
  2. 向新文件添加以下内容:
using Azure.Developer.Playwright.NUnit;
using Azure.Identity;
using System.Runtime.InteropServices;
using System;

namespace PlaywrightService.SampleTests; // Remember to change this as per your project namespace

[SetUpFixture]
public class PlaywrightServiceNUnitSetup : PlaywrightServiceBrowserNUnit
{
    public PlaywrightServiceNUnitSetup() : base(
        credential: new DefaultAzureCredential(),
    )
    {
        // no-op
    }
}
  1. 保存文件并提交到源代码存储库。

设置身份验证

运行 Playwright 测试的 CI 计算机必须使用 Playwright Workspaces 服务进行身份验证,才能让浏览器运行测试。

该服务提供两种身份验证方法:Microsoft Entra ID 和访问令牌。 强烈建议使用 Microsoft Entra ID 对管道进行身份验证。

使用 Microsoft Entra ID 设置身份验证

如果使用 GitHub Actions,则可以使用 GitHub OpenID Connect 以连接到服务。 按照步骤设置集成:

先决条件

选项 1:Microsoft Entra 应用程序

选项 2:用户分配的托管标识

创建 GitHub 机密
  • 将上一步中获取的值作为机密添加到 GitHub 存储库。 请参阅设置 GitHub Action 机密。 后续步骤中的 GitHub Action 工作流中会使用这些变量。
GitHub 机密 源(Microsoft Entra 应用程序或托管标识)
AZURE_CLIENT_ID 客户 ID
AZURE_SUBSCRIPTION_ID 订阅编号
AZURE_TENANT_ID 目录(租户)ID

注释

为了增强安全性,强烈建议使用 GitHub 机密来存储敏感值,而不是将它们直接包含在工作流文件中。

使用访问令牌设置身份验证

谨慎

我们强烈建议使用 Microsoft Entra ID 对该服务进行身份验证。 如果使用访问令牌,请参阅如何管理访问令牌

可以从 Playwright 工作区生成访问令牌并在设置中使用它。 但是,我们强烈建议使用 Microsoft Entra ID 进行身份验证,因为它具有增强的安全性。 访问令牌虽然很方便使用,但其功能类似于长期密码,因此更容易泄露。

  1. 默认情况下,已禁用使用访问令牌的身份验证。 若要使用,请启用基于访问令牌的身份验证

  2. 使用访问令牌设置身份验证

  3. 将访问令牌存储在 CI 工作流机密中,并将其用于 GitHub Actions 工作流或 Azure Pipeline yaml 文件中。

机密名称 价值
PLAYWRIGHT_SERVICE_ACCESS_TOKEN 粘贴之前创建的访问令牌的值。

更新工作流定义

更新 CI 工作流定义,以使用 Playwright CLI 运行 Playwright 测试。 将服务配置文件作为 Playwright CLI 的输入参数传递。 通过指定环境变量来配置环境。

  1. 打开 CI 工作流定义。

  2. 添加以下步骤以在 Playwright Workspaces 中运行 Playwright 测试。

    以下步骤介绍了 GitHub Actions 或 Azure Pipelines 的工作流更改。 同样,可以在其他 CI 平台中使用 Playwright CLI 运行 Playwright 测试。

    
      # This step is to sign-in to Azure to run tests from GitHub Action workflow. 
      # Choose how to set up authentication to Azure from GitHub Actions. This is one example. 
      name: Playwright Tests (Playwright Workspaces)
      on:
        push:
          branches: [main, master]
        pull_request:
          branches: [main, master]
    
      permissions: # Required when using Microsoft Entra ID to authenticate
        id-token: write
        contents: read
    
      jobs:
        test:
          timeout-minutes: 60
          runs-on: ubuntu-latest
          steps:
            - uses: actions/checkout@v4
    
            - name: Login to Azure with AzPowershell (enableAzPSSession true)
              uses: azure/login@v2
              with:
                client-id: ${{ secrets.AZURE_CLIENT_ID }} # GitHub Open ID connect values copied in previous steps
                tenant-id: ${{ secrets.AZURE_TENANT_ID }}
                subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
                enable-AzPSSession: true
    
            - name: Install dependencies
              working-directory: path/to/playwright/folder # update accordingly
              run: npm ci
    
            - name: Run Playwright tests
              working-directory: path/to/playwright/folder # update accordingly
              env:
                # Regional endpoint for Playwright Workspaces
                PLAYWRIGHT_SERVICE_URL: ${{ secrets.PLAYWRIGHT_SERVICE_URL }}
                # PLAYWRIGHT_SERVICE_ACCESS_TOKEN: ${{ secrets.PLAYWRIGHT_SERVICE_ACCESS_TOKEN }} # Not recommended, use Microsoft Entra ID authentication. 
              run: npx playwright test -c playwright.service.config.ts --workers=20
    
            - name: Upload Playwright report
              uses: actions/upload-artifact@v3
              if: always()
              with:
                name: playwright-report
                path: path/to/playwright/folder/playwright-report/ # update accordingly
                retention-days: 10
    

更新 CI 工作流定义,以使用 Playwright NUnit CLI 运行 Playwright 测试。 通过指定环境变量来配置环境。

  1. 打开 CI 工作流定义。

  2. 添加以下步骤以在 Playwright Workspaces 中运行 Playwright 测试。

    以下步骤介绍了 GitHub Actions 或 Azure Pipelines 的工作流更改。 同样,可以在其他 CI 平台中使用 Playwright CLI 运行 Playwright 测试。

    on:
      push:
        branches: [ main, master ]
      pull_request:
        branches: [ main, master ]
    permissions: # Required when using AuthType as EntraId
      id-token: write
      contents: read
    jobs:
      test:
        timeout-minutes: 60
        runs-on: ubuntu-latest
          steps:
          - uses: actions/checkout@v4
        # This step is to sign-in to Azure to run tests from GitHub Action workflow. 
        # Choose how to set up authentication to Azure from GitHub Actions. This is one example. 
    
          - name: Login to Azure with AzPowershell (enableAzPSSession true) 
            uses: azure/login@v2 
            with: 
              client-id: ${{ secrets.AZURE_CLIENT_ID }} # GitHub Open ID connect values copied in previous steps
              tenant-id: ${{ secrets.AZURE_TENANT_ID }}  
              subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}  
              enable-AzPSSession: true 
    
          - name: Setup .NET
            uses: actions/setup-dotnet@v4
            with:
              dotnet-version: 8.0.x
    
          - name: Restore dependencies
            run: dotnet restore
            working-directory: path/to/playwright/folder # update accordingly
    
          - name: Build
            run: dotnet build --no-restore
            working-directory: path/to/playwright/folder # update accordingly
    
          - name: Run Playwright tests
              working-directory: path/to/playwright/folder # update accordingly
            env:
              # Regional endpoint for Playwright Workspaces
              PLAYWRIGHT_SERVICE_URL: ${{ secrets.PLAYWRIGHT_SERVICE_URL }}
              # PLAYWRIGHT_SERVICE_ACCESS_TOKEN: ${{ secrets.PLAYWRIGHT_SERVICE_ACCESS_TOKEN }} # Not recommended, use Microsoft Entra ID authentication. 
            run: dotnet test -- NUnit.NumberOfTestWorkers=20
    
          - name: Upload Playwright report
            uses: actions/upload-artifact@v3
            if: always()
            with:
              name: playwright-report
              path: path/to/playwright/folder/playwright-report/ # update accordingly
              retention-days: 10
    
  1. 保存并提交更改。

    触发 CI 工作流后,Playwright 测试将在云托管浏览器上的 Playwright 工作区中运行,并且将跨 20 个并行辅助角色运行。 结果将发布到服务,可在 Azure 门户中查看。

谨慎

使用 Playwright Workspaces 时,会根据消耗的总测试分钟数付费。 如果你是第一次使用或开始使用免费试用版,可以大规模运行单个测试(而不是完整测试套件),以避免耗尽免费测试分钟数。

验证测试是否成功运行后,可以使用服务运行更多测试以逐步增加测试负载。

可以使用以下命令行对服务运行单个测试:

npx playwright test {name-of-file.spec.ts} --config=playwright.service.config.ts

查看测试运行和结果

Playwright 可以在每次测试运行时收集丰富的测试项目,例如日志、跟踪和屏幕截图。 要了解如何在 CI 管道中查看测试项目,请参阅 Playwright 文档

你已成功设置一个持续端到端测试工作流,以便在云托管浏览器上大规模运行 Playwright 测试。