opção
LarLar Skill DevOps e CI/CD azure-resource-manager-playwright-dotnet

azure-resource-manager-playwright-dotnet

microsoft/skills microsoft/skills

Gerencie espaços de trabalho do Microsoft Playwright Testing por meio do Azure Resource Manager: crie, atualize e exclua espaços de trabalho, verifique a disponibilidade de nomes e gerencie cotas usando o SDK .NET.

...Expandir tudo
0
Tempo atualizado 19 de Setembro de 2026

Azure.ResourceManager.Playwright (.NET)

SDK do plano de gerenciamento para provisionar e gerenciar espaços de trabalho de testes do Microsoft Playwright por meio do Azure Resource Manager.

⚠️ Gerenciamento vs. Execução de Testes

  • Este SDK (Azure.ResourceManager.Playwright): Criar espaços de trabalho, gerenciar cotas, verificar disponibilidade de nomes
  • SDK de Execução de Testes (Azure.Developer.MicrosoftPlaywrightTesting.NUnit): Executar testes do Playwright em escala em navegadores na nuvem

Instalação

dotnet add package Azure.ResourceManager.Playwright
dotnet add package Azure.Identity

Versões Atuais: Estável v1.0.0, Prévia v1.0.0-beta.1

Variáveis de Ambiente

AZURE_SUBSCRIPTION_ID=<your-subscription-id>  # Obrigatório: ID da assinatura do Azure
AZURE_TOKEN_CREDENTIALS=prod  # Obrigatório apenas se DefaultAzureCredential for usado em produção
AZURE_TENANT_ID=<tenant-id>  # Para autenticação de principal de serviço (opcional)
AZURE_CLIENT_ID=<client-id>  # Para autenticação de principal de serviço (opcional)
AZURE_CLIENT_SECRET=<client-secret>  # Para autenticação de principal de serviço (opcional)
</client-secret></client-id></tenant-id></your-subscription-id>

Autenticação

using Azure.Identity;
using Azure.ResourceManager;
using Azure.ResourceManager.Playwright;

// Desenvolvimento local: DefaultAzureCredential. Produção: defina AZURE_TOKEN_CREDENTIALS=prod ou AZURE_TOKEN_CREDENTIALS=<specific_credential>
var credential = new DefaultAzureCredential(
    DefaultAzureCredential.DefaultEnvironmentVariableName
);
// Ou use uma credencial específica diretamente em produção:
// Consulte https://learn.microsoft.com/dotnet/api/overview/azure/identity-readme?view=azure-dotnet#credential-classes
// var credential = new ManagedIdentityCredential();
var armClient = new ArmClient(credential);

// Obter assinatura
var subscriptionId = Environment.GetEnvironmentVariable("AZURE_SUBSCRIPTION_ID");
var subscription = armClient.GetSubscriptionResource(
    new ResourceIdentifier($"/subscriptions/{subscriptionId}"));
</specific_credential>

Hierarquia de Recursos

ArmClient
└── SubscriptionResource
    ├── PlaywrightQuotaResource (cotass em nível de assinatura)
    └── ResourceGroupResource
        └── PlaywrightWorkspaceResource
            └── PlaywrightWorkspaceQuotaResource (cotass em nível de espaço de trabalho)

Fluxo de Trabalho Principal

1. Criar Espaço de Trabalho do Playwright

using Azure.ResourceManager.Playwright;
using Azure.ResourceManager.Playwright.Models;

// Obter grupo de recursos
var resourceGroup = await subscription
    .GetResourceGroupAsync("my-resource-group");

// Definir espaço de trabalho
var workspaceData = new PlaywrightWorkspaceData(AzureLocation.WestUS3)
{
    // Opcional: Configurar afinidade regional e autenticação local
    RegionalAffinity = PlaywrightRegionalAffinity.Enabled,
    LocalAuth = PlaywrightLocalAuth.Enabled,
    Tags =
    {
        ["Team"] = "Dev Exp",
        ["Environment"] = "Production"
    }
};

// Criar espaço de trabalho (operação de longa duração)
var workspaceCollection = resourceGroup.Value.GetPlaywrightWorkspaces();
var operation = await workspaceCollection.CreateOrUpdateAsync(
    WaitUntil.Completed,
    "my-playwright-workspace",
    workspaceData);

PlaywrightWorkspaceResource workspace = operation.Value;

// Obter o URI do plano de dados para executar testes
Console.WriteLine($"URI do Plano de Dados: {workspace.Data.DataplaneUri}");
Console.WriteLine($"ID do Espaço de Trabalho: {workspace.Data.WorkspaceId}");

2. Obter Espaço de Trabalho Existente

// Obter por nome
var workspace = await workspaceCollection.GetAsync("my-playwright-workspace");

// Ou verificar se existe primeiro
bool exists = await workspaceCollection.ExistsAsync("my-playwright-workspace");
if (exists)
{
    var existingWorkspace = await workspaceCollection.GetAsync("my-playwright-workspace");
    Console.WriteLine($"Espaço de trabalho encontrado: {existingWorkspace.Value.Data.Name}");
}

3. Listar Espaços de Trabalho

// Listar no grupo de recursos
await foreach (var workspace in workspaceCollection.GetAllAsync())
{
    Console.WriteLine($"Espaço de Trabalho: {workspace.Data.Name}");
    Console.WriteLine($"  Localização: {workspace.Data.Location}");
    Console.WriteLine($"  Estado: {workspace.Data.ProvisioningState}");
    Console.WriteLine($"  URI do Plano de Dados: {workspace.Data.DataplaneUri}");
}

// Listar em toda a assinatura
await foreach (var workspace in subscription.GetPlaywrightWorkspacesAsync())
{
    Console.WriteLine($"Espaço de Trabalho: {workspace.Data.Name}");
}

4. Atualizar Espaço de Trabalho

var patch = new PlaywrightWorkspacePatch
{
    Tags =
    {
        ["Team"] = "Dev Exp",
        ["Environment"] = "Staging",
        ["UpdatedAt"] = DateTime.UtcNow.ToString("o")
    }
};

var updatedWorkspace = await workspace.Value.UpdateAsync(patch);

5. Verificar Disponibilidade de Nome

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("Nome disponível!");
}
else
{
    Console.WriteLine($"Nome indisponível: {result.Value.Message}");
    Console.WriteLine($"Motivo: {result.Value.Reason}");
}

6. Obter Informações de Cota

// Cotass em nível de assinatura
await foreach (var quota in subscription.GetPlaywrightQuotasAsync(AzureLocation.WestUS3))
{
    Console.WriteLine($"Cota: {quota.Data.Name}");
    Console.WriteLine($"  Limite: {quota.Data.Limit}");
    Console.WriteLine($"  Utilizado: {quota.Data.Used}");
}

// Cotass em nível de espaço de trabalho
var workspaceQuotas = workspace.Value.GetAllPlaywrightWorkspaceQuota();
await foreach (var quota in workspaceQuotas.GetAllAsync())
{
    Console.WriteLine($"Cota do Espaço de Trabalho: {quota.Data.Name}");
}

7. Excluir Espaço de Trabalho

// Excluir (operação de longa duração)
await workspace.Value.DeleteAsync(WaitUntil.Completed);

Referência de Tipos Principais

TipoFinalidade
`ArmClient`Ponto de entrada para todas as operações do ARM
`PlaywrightWorkspaceResource`Representa um espaço de trabalho de testes do Playwright
`PlaywrightWorkspaceCollection`Coleção para operações CRUD de espaços de trabalho
`PlaywrightWorkspaceData`Payload de criação/resposta do espaço de trabalho
`PlaywrightWorkspacePatch`Payload de atualização do espaço de trabalho
`PlaywrightQuotaResource`Informações de cota em nível de assinatura
`PlaywrightWorkspaceQuotaResource`Informações de cota em nível de espaço de trabalho
`PlaywrightExtensions`Métodos de extensão para recursos do ARM
`PlaywrightCheckNameAvailabilityContent`Solicitação de verificação de disponibilidade de nome

Propriedades do Espaço de Trabalho

PropriedadeDescrição
`DataplaneUri`URI para execução de testes (ex.: `https://api.dataplane.{guid}.domain.com`)
`WorkspaceId`Identificador exclusivo do espaço de trabalho (GUID)
`RegionalAffinity`Habilitar/desabilitar afinidade regional para execução de testes
`LocalAuth`Habilitar/desabilitar autenticação local (tokens de acesso)
`ProvisioningState`Estado atual de provisionamento (Succeeded, Failed, etc.)

Melhores Práticas

  1. Use WaitUntil.Completed para operações que devem ser concluídas antes de prosseguir
  2. Use WaitUntil.Started quando desejar fazer polling manualmente ou executar operações em paralelo
  3. Sempre use DefaultAzureCredential — nunca codifique chaves
  4. Trate RequestFailedException para erros da API do ARM
  5. Use CreateOrUpdateAsync para operações idempotentes
  6. Navegue pela hierarquia por meio dos métodos Get* (ex.: resourceGroup.GetPlaywrightWorkspaces())
  7. Armazene o DataplaneUri após a criação do espaço de trabalho para configuração de execução de testes

Tratamento de Erros

using Azure;

try
{
    var operation = await workspaceCollection.CreateOrUpdateAsync(
        WaitUntil.Completed, workspaceName, workspaceData);
}
catch (RequestFailedException ex) when (ex.Status == 409)
{
    Console.WriteLine("Espaço de trabalho já existe");
}
catch (RequestFailedException ex) when (ex.Status == 400)
{
    Console.WriteLine($"Solicitação inválida: {ex.Message}");
}
catch (RequestFailedException ex)
{
    Console.WriteLine($"Erro do ARM: {ex.Status} - {ex.ErrorCode}: {ex.Message}");
}

Integração com Execução de Testes

Após criar um espaço de trabalho, use o DataplaneUri para configurar seus testes do Playwright:

// 1. Criar espaço de trabalho (este SDK)
var workspace = await workspaceCollection.CreateOrUpdateAsync(
    WaitUntil.Completed, "my-workspace", workspaceData);

// 2. Obter o URL do serviço
var serviceUrl = workspace.Value.Data.DataplaneUri;

// 3. Definir variável de ambiente para execução de testes
Environment.SetEnvironmentVariable("PLAYWRIGHT_SERVICE_URL", serviceUrl.ToString());

// 4. Executar testes usando Azure.Developer.MicrosoftPlaywrightTesting.NUnit
// (pacote separado para execução de testes)

SDKs Relacionados

SDKFinalidadeInstalação
`Azure.ResourceManager.Playwright`Plano de gerenciamento (este SDK)`dotnet add package Azure.ResourceManager.Playwright`
`Azure.Developer.MicrosoftPlaywrightTesting.NUnit`Executar testes do Playwright NUnit em escala`dotnet add package Azure.Developer.MicrosoftPlaywrightTesting.NUnit --prerelease`
`Azure.Developer.Playwright`Biblioteca de cliente do Playwright`dotnet add package Azure.Developer.Playwright`

Informações da API

  • Fornecedor de Recursos: Microsoft.LoadTestService
  • Versão Padrão da API: 2025-09-01
  • Tipo de Recurso: Microsoft.LoadTestService/playwrightWorkspaces

Links da Documentação

  • Referência da API do Azure.ResourceManager.Playwright
  • Visão Geral dos Testes do Microsoft Playwright
  • Início Rápido: Executar Testes do Playwright em Escala
Ver no GitHub
---
name: azure-resource-manager-playwright-dotnet
description: Manage Microsoft Playwright Testing workspaces via Azure Resource Manager: create, update, delete workspaces, check name availability, and manage quotas using the .NET SDK.
license: MIT
---

# Azure.ResourceManager.Playwright (.NET)

Management plane SDK for provisioning and managing Microsoft Playwright Testing workspaces via Azure Resource Manager.

> **⚠️ Management vs Test Execution**
> - **This SDK (Azure.ResourceManager.Playwright)**: Create workspaces, manage quotas, check name availability
> - **Test Execution SDK (Azure.Developer.MicrosoftPlaywrightTesting.NUnit)**: Run Playwright tests at scale on cloud browsers

## Installation

```bash
dotnet add package Azure.ResourceManager.Playwright
dotnet add package Azure.Identity
```

**Current Versions**: Stable v1.0.0, Preview v1.0.0-beta.1

## Environment Variables

```bash
AZURE_SUBSCRIPTION_ID=<your-subscription-id>  # Required: Azure subscription ID
AZURE_TOKEN_CREDENTIALS=prod  # Required only if DefaultAzureCredential is used in production
AZURE_TENANT_ID=<tenant-id>  # For service principal auth (optional)
AZURE_CLIENT_ID=<client-id>  # For service principal auth (optional)
AZURE_CLIENT_SECRET=<client-secret>  # For service principal auth (optional)
```

## Authentication

```csharp
using Azure.Identity;
using Azure.ResourceManager;
using Azure.ResourceManager.Playwright;

// Local dev: DefaultAzureCredential. Production: set AZURE_TOKEN_CREDENTIALS=prod or AZURE_TOKEN_CREDENTIALS=<specific_credential>
var credential = new DefaultAzureCredential(
    DefaultAzureCredential.DefaultEnvironmentVariableName
);
// Or use a specific credential directly in production:
// See https://learn.microsoft.com/dotnet/api/overview/azure/identity-readme?view=azure-dotnet#credential-classes
// var credential = new ManagedIdentityCredential();
var armClient = new ArmClient(credential);

// Get subscription
var subscriptionId = Environment.GetEnvironmentVariable("AZURE_SUBSCRIPTION_ID");
var subscription = armClient.GetSubscriptionResource(
    new ResourceIdentifier($"/subscriptions/{subscriptionId}"));
```

## Resource Hierarchy

```
ArmClient
└── SubscriptionResource
    ├── PlaywrightQuotaResource (subscription-level quotas)
    └── ResourceGroupResource
        └── PlaywrightWorkspaceResource
            └── PlaywrightWorkspaceQuotaResource (workspace-level quotas)
```

## Core Workflow

### 1. Create Playwright Workspace

```csharp
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 Existing Workspace

```csharp
// 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 Workspaces

```csharp
// 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. Update Workspace

```csharp
var patch = new PlaywrightWorkspacePatch
{
    Tags =
    {
        ["Team"] = "Dev Exp",
        ["Environment"] = "Staging",
        ["UpdatedAt"] = DateTime.UtcNow.ToString("o")
    }
};

var updatedWorkspace = await workspace.Value.UpdateAsync(patch);
```

### 5. Check Name Availability

```csharp
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. Get Quota Information

```csharp
// 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 Workspace

```csharp
// Delete (long-running operation)
await workspace.Value.DeleteAsync(WaitUntil.Completed);
```

## Key Types Reference

| Type | Purpose |
|------|---------|
| `ArmClient` | Entry point for all ARM operations |
| `PlaywrightWorkspaceResource` | Represents a Playwright Testing workspace |
| `PlaywrightWorkspaceCollection` | Collection for workspace CRUD |
| `PlaywrightWorkspaceData` | Workspace creation/response payload |
| `PlaywrightWorkspacePatch` | Workspace update payload |
| `PlaywrightQuotaResource` | Subscription-level quota information |
| `PlaywrightWorkspaceQuotaResource` | Workspace-level quota information |
| `PlaywrightExtensions` | Extension methods for ARM resources |
| `PlaywrightCheckNameAvailabilityContent` | Name availability check request |

## Workspace Properties

| Property | Description |
|----------|-------------|
| `DataplaneUri` | URI for running tests (e.g., `https://api.dataplane.{guid}.domain.com`) |
| `WorkspaceId` | Unique workspace identifier (GUID) |
| `RegionalAffinity` | Enable/disable regional affinity for test execution |
| `LocalAuth` | Enable/disable local authentication (access tokens) |
| `ProvisioningState` | Current provisioning state (Succeeded, Failed, etc.) |

## Best Practices

1. **Use `WaitUntil.Completed`** for operations that must finish before proceeding
2. **Use `WaitUntil.Started`** when you want to poll manually or run operations in parallel
3. **Always use `DefaultAzureCredential`** — never hardcode keys
4. **Handle `RequestFailedException`** for ARM API errors
5. **Use `CreateOrUpdateAsync`** for idempotent operations
6. **Navigate hierarchy** via `Get*` methods (e.g., `resourceGroup.GetPlaywrightWorkspaces()`)
7. **Store the DataplaneUri** after workspace creation for test execution configuration

## Error Handling

```csharp
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}");
}
```

## Integration with Test Execution

After creating a workspace, use the `DataplaneUri` to configure your Playwright tests:

```csharp
// 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)
```

## Related SDKs

| SDK | Purpose | Install |
|-----|---------|---------|
| `Azure.ResourceManager.Playwright` | Management plane (this SDK) | `dotnet add package Azure.ResourceManager.Playwright` |
| `Azure.Developer.MicrosoftPlaywrightTesting.NUnit` | Run NUnit Playwright tests at scale | `dotnet add package Azure.Developer.MicrosoftPlaywrightTesting.NUnit --prerelease` |
| `Azure.Developer.Playwright` | Playwright client library | `dotnet add package Azure.Developer.Playwright` |

## API Information

- **Resource Provider**: `Microsoft.LoadTestService`
- **Default API Version**: `2025-09-01`
- **Resource Type**: `Microsoft.LoadTestService/playwrightWorkspaces`

## Documentation Links

- [Azure.ResourceManager.Playwright API Reference](https://learn.microsoft.com/en-us/dotnet/api/azure.resourcemanager.playwright)
- [Microsoft Playwright Testing Overview](https://learn.microsoft.com/en-us/azure/playwright-testing/overview-what-is-microsoft-playwright-testing)
- [Quickstart: Run Playwright Tests at Scale](https://learn.microsoft.com/en-us/azure/playwright-testing/quickstart-run-end-to-end-tests)

Todos os arquivos

0 arquivos

Instalar azure-resource-manager-playwright-dotnet

Baixe e extraia os arquivos de habilidade para o diretório .claude/skills/.

Baixar ZIP

Clone o repositório e copie os arquivos da habilidade para o seu projeto.

git clone https://github.com/microsoft/skills/tree/main/.github/plugins/azure-sdk-dotnet/skills/azure-resource-manager-playwright-dotnet # Copy SKILL.md to your .claude/skills/ directory

Copiar Copiar
Configuração rápida: Copie a pasta de habilidades para .claude/skills/ O Claude detectará e usará automaticamente a habilidade
Repositório microsoft/skills

Habilidades relacionadas

Verification &amp; Quality Assurance
Tempo atualizado 29 de Junho de 2026
base44-cli
Tempo atualizado 29 de Junho de 2026
klingai-upgrade-migration
Tempo atualizado 3 de Julho de 2026
Railway CLI Management
Tempo atualizado 2 de Julho de 2026
OR