关于 azure-resource-manager-playwright-dotnet
用于通过 Azure Resource Manager 管理 Microsoft Playwright Testing 工作区的 .NET 技能,涵盖资源配置与管理,不负责运行测试。
主要功能
- 01创建和更新工作区
- 02获取和列出工作区
- 03检查工作区名称可用性
- 04查看订阅及工作区配额
- 05删除工作区
适用场景
- 01配置 Playwright Testing 工作区
- 02查看工作区状态和数据平面 URI
- 03配置前检查配额
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ sickn33/ agentic-awesome-skills --skill azure-resource-manager-playwright-dotnet安装后在 Claude Code 中输入/azure-resource-manager-playwright-dotnet确认已加载。
详细介绍
Azure.ResourceManager.Playwright(.NET)
用于通过 Azure Resource Manager 配置和管理 Microsoft Playwright Testing 工作区的管理平面 SDK。
⚠️ 管理与测试执行
- 此 SDK(Azure.ResourceManager.Playwright):创建工作区、管理配额、检查名称可用性
- 测试执行 SDK(Azure.Developer.MicrosoftPlaywrightTesting.NUnit):在云端浏览器上大规模运行 Playwright 测试
版本与资源配置边界
这些是历史 SDK 片段,并非经过验证的当前程序包或服务版本。配置资源前,请确认当前 Microsoft 服务生命周期、程序包迁移指南和目标资源提供程序;如果指定的服务已停用或不可用,请停止操作。请根据部署环境审慎选择生产凭据,不要假定 DefaultAzureCredential 的每种来源都适用。请确认订阅、资源组、区域、预算和删除范围;创建资源会产生费用,且不代表授权远程测试执行或上传私有测试制品。
安装
dotnet add package Azure.ResourceManager.Playwright
dotnet add package Azure.Identity
示例版本说明:v1.0.0 / v1.0.0-beta.1 是历史参考;使用前请确认受支持的程序包。
环境变量
AZURE_SUBSCRIPTION_ID=<your-subscription-id>
# For service principal auth (optional)
AZURE_TENANT_ID=<tenant-id>
AZURE_CLIENT_ID=<client-id>
AZURE_CLIENT_SECRET=<client-secret>
身份验证
using Azure.Identity;
using Azure.ResourceManager;
using Azure.ResourceManager.Playwright;
// Always use DefaultAzureCredential
var credential = new DefaultAzureCredential();
var armClient = new ArmClient(credential);
// Get subscription
var subscriptionId = Environment.GetEnvironmentVariable("AZURE_SUBSCRIPTION_ID");
var subscription = armClient.GetSubscriptionResource(
new ResourceIdentifier($"/subscriptions/{subscriptionId}"));
资源层次结构
ArmClient
└── SubscriptionResource
├── PlaywrightQuotaResource (subscription-level quotas)
└── ResourceGroupResource
└── PlaywrightWorkspaceResource
└── PlaywrightWorkspaceQuotaResource (workspace-level quotas)
核心工作流
1. 创建 Playwright 工作区
using Azure.ResourceManager.Playwright;
using Azure.ResourceManager.Playwright.Models;
// Get resource group
var resourceGroup = await subscription
.GetResourceGroupAsync("my-resource-group");
// Define workspace
var workspaceData = new PlaywrightWorkspaceData(AzureLocation.WestUS3)
{
// Optional: Configure regional affinity and local auth
RegionalAffinity = PlaywrightRegionalAffinity.Enabled,
LocalAuth = PlaywrightLocalAuth.Enabled,
Tags =
{
["Team"] = "Dev Exp",
["Environment"] = "Production"
}
};
// Create workspace (long-running operation)
var workspaceCollection = resourceGroup.Value.GetPlaywrightWorkspaces();
var operation = await workspaceCollection.CreateOrUpdateAsync(
WaitUntil.Completed,
"my-playwright-workspace",
workspaceData);
PlaywrightWorkspaceResource workspace = operation.Value;
// Get the data plane URI for running tests
Console.WriteLine($"Data Plane URI: {workspace.Data.DataplaneUri}");
Console.WriteLine($"Workspace ID: {workspace.Data.WorkspaceId}");
2. 获取现有工作区
// Get by name
var workspace = await workspaceCollection.GetAsync("my-playwright-workspace");
// Or check if exists first
bool exists = await workspaceCollection.ExistsAsync("my-playwright-workspace");
if (exists)
{
var existingWorkspace = await workspaceCollection.GetAsync("my-playwright-workspace");
Console.WriteLine($"Workspace found: {existingWorkspace.Value.Data.Name}");
}
3. 列出工作区
// List in resource group
await foreach (var workspace in workspaceCollection.GetAllAsync())
{
Console.WriteLine($"Workspace: {workspace.Data.Name}");
Console.WriteLine($" Location: {workspace.Data.Location}");
Console.WriteLine($" State: {workspace.Data.ProvisioningState}");
Console.WriteLine($" Data Plane URI: {workspace.Data.DataplaneUri}");
}
// List across subscription
await foreach (var workspace in subscription.GetPlaywrightWorkspacesAsync())
{
Console.WriteLine($"Workspace: {workspace.Data.Name}");
}
4. 更新工作区
var patch = new PlaywrightWorkspacePatch
{
Tags =
{
["Team"] = "Dev Exp",
["Environment"] = "Staging",
["UpdatedAt"] = DateTime.UtcNow.ToString("o")
}
};
var updatedWorkspace = await workspace.Value.UpdateAsync(patch);
5. 检查名称可用性
using Azure.ResourceManager.Playwright.Models;
var checkRequest = new PlaywrightCheckNameAvailabilityContent
{
Name = "my-new-workspace",
ResourceType = "Microsoft.LoadTestService/playwrightWorkspaces"
};
var result = await subscription.CheckPlaywrightNameAvailabilityAsync(checkRequest);
if (result.Value.IsNameAvailable == true)
{
Console.WriteLine("Name is available!");
}
else
{
Console.WriteLine($"Name unavailable: {result.Value.Message}");
Console.WriteLine($"Reason: {result.Value.Reason}");
}
6. 获取配额信息
// Subscription-level quotas
await foreach (var quota in subscription.GetPlaywrightQuotasAsync(AzureLocation.WestUS3))
{
Console.WriteLine($"Quota: {quota.Data.Name}");
Console.WriteLine($" Limit: {quota.Data.Limit}");
Console.WriteLine($" Used: {quota.Data.Used}");
}
// Workspace-level quotas
var workspaceQuotas = workspace.Value.GetAllPlaywrightWorkspaceQuota();
await foreach (var quota in workspaceQuotas.GetAllAsync())
{
Console.WriteLine($"Workspace Quota: {quota.Data.Name}");
}
7. 删除工作区
// Delete (long-running operation)
await workspace.Value.DeleteAsync(WaitUntil.Completed);
关键类型参考
| 类型 | 用途 |
|---|---|
ArmClient | 所有 ARM 操作的入口点 |
PlaywrightWorkspaceResource | 表示一个 Playwright Testing 工作区 |
PlaywrightWorkspaceCollection | 工作区 CRUD 集合 |
PlaywrightWorkspaceData | 工作区创建/响应负载 |
PlaywrightWorkspacePatch | 工作区更新负载 |
PlaywrightQuotaResource | 订阅级配额信息 |
PlaywrightWorkspaceQuotaResource | 工作区级配额信息 |
PlaywrightExtensions | ARM 资源的扩展方法 |
PlaywrightCheckNameAvailabilityContent | 名称可用性检查请求 |
工作区属性
| 属性 | 描述 |
|---|---|
DataplaneUri | 运行测试的 URI(例如,https://api.dataplane.{guid}.domain.com) |
WorkspaceId | 唯一的工作区标识符(GUID) |
RegionalAffinity | 启用/禁用测试执行的区域亲和性 |
LocalAuth | 启用/禁用本地身份验证(访问令牌) |
ProvisioningState | 当前配置状态(Succeeded、Failed 等) |
最佳实践
- 对必须完成后才能继续的操作使用
WaitUntil.Completed - 需要手动轮询或并行运行操作时使用
WaitUntil.Started - 始终使用
DefaultAzureCredential— 切勿将密钥硬编码 - 处理
RequestFailedException,以应对 ARM API 错误 - 对幂等操作使用
CreateOrUpdateAsync - 通过
Get*方法遍历层次结构(例如,resourceGroup.GetPlaywrightWorkspaces()) - 创建工作区后保存 DataplaneUri,用于配置测试执行
错误处理
using Azure;
try
{
var operation = await workspaceCollection.CreateOrUpdateAsync(
WaitUntil.Completed, workspaceName, workspaceData);
}
catch (RequestFailedException ex) when (ex.Status == 409)
{
Console.WriteLine("Workspace already exists");
}
catch (RequestFailedException ex) when (ex.Status == 400)
{
Console.WriteLine($"Bad request: {ex.Message}");
}
catch (RequestFailedException ex)
{
Console.WriteLine($"ARM Error: {ex.Status} - {ex.ErrorCode}: {ex.Message}");
}
与测试执行集成
创建工作区后,使用 DataplaneUri 配置 Playwright 测试:
// 1. Create workspace (this SDK)
var workspace = await workspaceCollection.CreateOrUpdateAsync(
WaitUntil.Completed, "my-workspace", workspaceData);
// 2. Get the service URL
var serviceUrl = workspace.Value.Data.DataplaneUri;
// 3. Set environment variable for test execution
Environment.SetEnvironmentVariable("PLAYWRIGHT_SERVICE_URL", serviceUrl.ToString());
// 4. Run tests using Azure.Developer.MicrosoftPlaywrightTesting.NUnit
// (separate package for test execution)
相关 SDK
| SDK | 用途 | 安装 |
|---|---|---|
Azure.ResourceManager.Playwright | 管理平面(此 SDK) | dotnet add package Azure.ResourceManager.Playwright |
Azure.Developer.MicrosoftPlaywrightTesting.NUnit | 大规模运行 NUnit Playwright 测试 | dotnet add package Azure.Developer.MicrosoftPlaywrightTesting.NUnit --prerelease |
Azure.Developer.Playwright | Playwright 客户端库 | dotnet add package Azure.Developer.Playwright |
API 信息
- 资源提供程序:
Microsoft.LoadTestService - 默认 API 版本:
2025-09-01 - 资源类型:
Microsoft.LoadTestService/playwrightWorkspaces
文档链接
适用场景
当需要执行概览中描述的工作流或操作时,可使用此技能。
限制
- 仅当任务明确符合上述范围时,才使用此技能。
- 请勿将输出视为环境特定验证、测试或专家审查的替代品。
- 如果缺少必要的输入、权限、安全边界或成功标准,请暂停并请求澄清。
评论
支持 Markdown