mcpField
A
azure-resource-manager-playwright-dotnet

azure-resource-manager-playwright-dotnet

github.com/sickn33云与 DevOps48.7k51 次安装今天更新
代码仓库

关于 azure-resource-manager-playwright-dotnet

用于通过 Azure Resource Manager 管理 Microsoft Playwright Testing 工作区的 .NET 技能,涵盖资源配置与管理,不负责运行测试。

主要功能

  1. 01创建和更新工作区
  2. 02获取和列出工作区
  3. 03检查工作区名称可用性
  4. 04查看订阅及工作区配额
  5. 05删除工作区

适用场景

  1. 01配置 Playwright Testing 工作区
  2. 02查看工作区状态和数据平面 URI
  3. 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工作区级配额信息
PlaywrightExtensionsARM 资源的扩展方法
PlaywrightCheckNameAvailabilityContent名称可用性检查请求

工作区属性

属性描述
DataplaneUri运行测试的 URI(例如,https://api.dataplane.{guid}.domain.com)
WorkspaceId唯一的工作区标识符(GUID)
RegionalAffinity启用/禁用测试执行的区域亲和性
LocalAuth启用/禁用本地身份验证(访问令牌)
ProvisioningState当前配置状态(Succeeded、Failed 等)

最佳实践

  1. 对必须完成后才能继续的操作使用 WaitUntil.Completed
  2. 需要手动轮询或并行运行操作时使用 WaitUntil.Started
  3. 始终使用 DefaultAzureCredential — 切勿将密钥硬编码
  4. 处理 RequestFailedException,以应对 ARM API 错误
  5. 对幂等操作使用 CreateOrUpdateAsync
  6. 通过 Get* 方法遍历层次结构(例如,resourceGroup.GetPlaywrightWorkspaces())
  7. 创建工作区后保存 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.PlaywrightPlaywright 客户端库dotnet add package Azure.Developer.Playwright

API 信息

  • 资源提供程序:Microsoft.LoadTestService
  • 默认 API 版本:2025-09-01
  • 资源类型:Microsoft.LoadTestService/playwrightWorkspaces

文档链接

适用场景

当需要执行概览中描述的工作流或操作时,可使用此技能。

限制

  • 仅当任务明确符合上述范围时,才使用此技能。
  • 请勿将输出视为环境特定验证、测试或专家审查的替代品。
  • 如果缺少必要的输入、权限、安全边界或成功标准,请暂停并请求澄清。

评论

支持 Markdown