你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
在本快速入门中,你将使用 Playwright Workspaces 设置持续端到端测试,以验证 Web 应用在每次提交代码时是否可以在不同浏览器和操作系统上正确运行,并使用服务仪表板轻松对测试进行故障排除。 了解如何将 Playwright 测试添加到持续集成 (CI) 工作流,例如 GitHub Actions、Azure Pipelines 或其他 CI 平台。
完成本快速入门后,你将拥有一个 CI 工作流,此工作流使用 Playwright Workspaces 大规模运行 Playwright 测试套件并帮助你轻松对测试进行故障排除。
先决条件
拥有有效订阅的 Azure 帐户。 如果没有 Azure 订阅,请在开始之前创建一个免费帐户。
Playwright 工作区。 完成快速入门:大规模运行 Playwright 测试,并创建工作区。
- GitHub 帐户。 如果没有 GitHub 帐户,可以免费创建一个。
- 包含 Playwright 测试规范和 GitHub Actions 工作流的 GitHub 存储库。 若要创建存储库,请参阅创建新存储库。
- GitHub Actions 工作流。 如需 GitHub Actions 入门方面的帮助,请参阅创建第一个工作流
- 设置从 GitHub Actions 到 Azure 的身份验证。 请参阅使用 GitHub Actions 连接到 Azure。
获取服务区域终结点 URL
在服务配置中,必须提供特定于区域的服务终结点。 终结点取决于在创建工作区时选择的 Azure 区域。
若要获取服务终结点 URL 并将其存储为 CI 工作流机密,请执行以下步骤:
使用 Azure 帐户登录到 Azure 门户,并导航到工作区。
选择“入门”页。
在“在设置中添加区域终结点”中,复制服务终结点 URL。
终结点 URL 与创建工作区时选择的 Azure 区域匹配。
将服务终结点 URL 存储在 CI 工作流机密中:
机密名称 价值 PLAYWRIGHT_SERVICE_URL 粘贴之前复制的终结点 URL。
添加服务配置文件
如果没有配置 Playwright 测试用于运行服务,请将服务配置文件添加到存储库。 下一步,在 Playwright CLI 上指定此服务配置文件。
连同
playwright.service.config.ts文件一起创建新文件playwright.config.ts。向新文件添加以下内容:
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(), }) );默认情况下,服务配置可让你使用云托管浏览器并行运行测试来加速构建管道。
保存文件并提交到源代码存储库。
更新 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>
设置服务配置
- 在项目的根目录中创建一个新文件
PlaywrightServiceNUnitSetup.cs。 此文件有助于使用服务对客户端进行身份验证。 - 向新文件添加以下内容:
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
}
}
- 保存文件并提交到源代码存储库。
设置身份验证
运行 Playwright 测试的 CI 计算机必须使用 Playwright Workspaces 服务进行身份验证,才能让浏览器运行测试。
该服务提供两种身份验证方法:Microsoft Entra ID 和访问令牌。 强烈建议使用 Microsoft Entra ID 对管道进行身份验证。
使用 Microsoft Entra ID 设置身份验证
如果使用 GitHub Actions,则可以使用 GitHub OpenID Connect 以连接到服务。 按照步骤设置集成:
先决条件
选项 1:Microsoft Entra 应用程序
在 Azure 门户、Azure CLI或 Azure PowerShell中创建具有服务主体的 Microsoft Entra 应用程序。
复制 客户端 ID、订阅 ID和 Directory(租户)ID 的值,以便在 GitHub Actions 工作流中稍后使用。
将
Owner或Contributor角色分配给在上一步中创建的服务主体。 必须在 Playwright 工作区上分配这些角色。 有关更多详细信息,请参阅如何管理访问权限。在 Microsoft Entra 应用程序上配置联合标识凭据 来信任由 GitHub Actions 颁发的令牌,用于您的 GitHub 存储库。
选项 2:用户分配的托管标识
复制 客户端 ID、订阅 ID和 Directory(租户)ID 的值,以便在 GitHub Actions 工作流中稍后使用。
将
Owner或Contributor角色分配给在上一步中创建的用户分配的托管标识。 必须在 Playwright 工作区上分配这些角色。 有关更多详细信息,请参阅如何管理访问权限。在用户分配的托管标识上配置联合标识凭据,以信任由 GitHub Actions 向你的 GitHub 仓库颁发的令牌。
创建 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 进行身份验证,因为它具有增强的安全性。 访问令牌虽然很方便使用,但其功能类似于长期密码,因此更容易泄露。
默认情况下,已禁用使用访问令牌的身份验证。 若要使用,请启用基于访问令牌的身份验证。
将访问令牌存储在 CI 工作流机密中,并将其用于 GitHub Actions 工作流或 Azure Pipeline yaml 文件中。
| 机密名称 | 价值 |
|---|---|
| PLAYWRIGHT_SERVICE_ACCESS_TOKEN | 粘贴之前创建的访问令牌的值。 |
更新工作流定义
更新 CI 工作流定义,以使用 Playwright CLI 运行 Playwright 测试。 将服务配置文件作为 Playwright CLI 的输入参数传递。 通过指定环境变量来配置环境。
打开 CI 工作流定义。
添加以下步骤以在 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 测试。 通过指定环境变量来配置环境。
打开 CI 工作流定义。
添加以下步骤以在 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
保存并提交更改。
触发 CI 工作流后,Playwright 测试将在云托管浏览器上的 Playwright 工作区中运行,并且将跨 20 个并行辅助角色运行。 结果将发布到服务,可在 Azure 门户中查看。
谨慎
使用 Playwright Workspaces 时,会根据消耗的总测试分钟数付费。 如果你是第一次使用或开始使用免费试用版,可以大规模运行单个测试(而不是完整测试套件),以避免耗尽免费测试分钟数。
验证测试是否成功运行后,可以使用服务运行更多测试以逐步增加测试负载。
可以使用以下命令行对服务运行单个测试:
npx playwright test {name-of-file.spec.ts} --config=playwright.service.config.ts
查看测试运行和结果
Playwright 可以在每次测试运行时收集丰富的测试项目,例如日志、跟踪和屏幕截图。 要了解如何在 CI 管道中查看测试项目,请参阅 Playwright 文档。
相关内容
你已成功设置一个持续端到端测试工作流,以便在云托管浏览器上大规模运行 Playwright 测试。