Option
HeimHeim Skill DevOps und CI/CD azure-resource-manager-playwright-dotnet

azure-resource-manager-playwright-dotnet

microsoft/skills microsoft/skills

Verwalten Sie Microsoft Playwright Testing-Arbeitsbereiche über den Azure Resource Manager: Erstellen, Aktualisieren und Löschen von Arbeitsbereichen, Überprüfen der Namensverfügbarkeit und Verwalten von Kontingenten mithilfe des .NET SDK.

...Alle erweitern
2
Zeit aktualisiert 19. September 2026

Azure.ResourceManager.Playwright (.NET)

Management-SDK-Plane zur Bereitstellung und Verwaltung von Microsoft Playwright Testing-Arbeitsbereichen über Azure Resource Manager.

⚠️ Management vs. Testausführung

  • Dieses SDK (Azure.ResourceManager.Playwright): Erstellen von Arbeitsbereichen, Verwalten von Kontingenten, Überprüfen der Namenverfügbarkeit
  • Testausführungs-SDK (Azure.Developer.MicrosoftPlaywrightTesting.NUnit): Ausführen von Playwright-Tests im großen Maßstab auf Cloud-Browsern

Installation

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

Aktuelle Versionen: Stabil v1.0.0, Vorschau v1.0.0-beta.1

Umgebungsvariablen

AZURE_SUBSCRIPTION_ID=<your-subscription-id>  # Erforderlich: Azure-Abonnement-ID
AZURE_TOKEN_CREDENTIALS=prod  # Nur erforderlich, wenn DefaultAzureCredential in der Produktion verwendet wird
AZURE_TENANT_ID=<tenant-id>  # Für Dienstsprinzipalauthentifizierung (optional)
AZURE_CLIENT_ID=<client-id>  # Für Dienstsprinzipalauthentifizierung (optional)
AZURE_CLIENT_SECRET=<client-secret>  # Für Dienstsprinzipalauthentifizierung (optional)
</client-secret></client-id></tenant-id></your-subscription-id>

Authentifizierung

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

// Lokale Entwicklung: DefaultAzureCredential. Produktion: AZURE_TOKEN_CREDENTIALS=prod oder AZURE_TOKEN_CREDENTIALS=<specific_credential> festlegen
var credential = new DefaultAzureCredential(
    DefaultAzureCredential.DefaultEnvironmentVariableName
);
// Oder in der Produktion direkt ein spezifisches Anmeldeverfahren verwenden:
// Siehe https://learn.microsoft.com/dotnet/api/overview/azure/identity-readme?view=azure-dotnet#credential-classes
// var credential = new ManagedIdentityCredential();
var armClient = new ArmClient(credential);

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

Ressourcenhierarchie

ArmClient
└── SubscriptionResource
    ├── PlaywrightQuotaResource (Kontingente auf Abonnementebene)
    └── ResourceGroupResource
        └── PlaywrightWorkspaceResource
            └── PlaywrightWorkspaceQuotaResource (Kontingente auf Arbeitsbereichsebene)

Hauptarbeitsablauf

1. Playwright-Arbeitsbereich erstellen

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

// Ressourcengruppe abrufen
var resourceGroup = await subscription
    .GetResourceGroupAsync("my-resource-group");

// Arbeitsbereich definieren
var workspaceData = new PlaywrightWorkspaceData(AzureLocation.WestUS3)
{
    // Optional: Regionale Affinität und lokale Authentifizierung konfigurieren
    RegionalAffinity = PlaywrightRegionalAffinity.Enabled,
    LocalAuth = PlaywrightLocalAuth.Enabled,
    Tags =
    {
        ["Team"] = "Dev Exp",
        ["Environment"] = "Production"
    }
};

// Arbeitsbereich erstellen (langandauernder Vorgang)
var workspaceCollection = resourceGroup.Value.GetPlaywrightWorkspaces();
var operation = await workspaceCollection.CreateOrUpdateAsync(
    WaitUntil.Completed,
    "my-playwright-workspace",
    workspaceData);

PlaywrightWorkspaceResource workspace = operation.Value;

// Abrufen der Datenebenen-URI für die Testausführung
Console.WriteLine($"Datenebenen-URI: {workspace.Data.DataplaneUri}");
Console.WriteLine($"Arbeitsbereich-ID: {workspace.Data.WorkspaceId}");

2. Vorhandenen Arbeitsbereich abrufen

// Nach Name abrufen
var workspace = await workspaceCollection.GetAsync("my-playwright-workspace");

// Oder zuerst prüfen, ob er existiert
bool exists = await workspaceCollection.ExistsAsync("my-playwright-workspace");
if (exists)
{
    var existingWorkspace = await workspaceCollection.GetAsync("my-playwright-workspace");
    Console.WriteLine($"Arbeitsbereich gefunden: {existingWorkspace.Value.Data.Name}");
}

3. Arbeitsbereiche auflisten

// In Ressourcengruppe auflisten
await foreach (var workspace in workspaceCollection.GetAllAsync())
{
    Console.WriteLine($"Arbeitsbereich: {workspace.Data.Name}");
    Console.WriteLine($"  Standort: {workspace.Data.Location}");
    Console.WriteLine($"  Status: {workspace.Data.ProvisioningState}");
    Console.WriteLine($"  Datenebenen-URI: {workspace.Data.DataplaneUri}");
}

// Über das Abonnement hinweg auflisten
await foreach (var workspace in subscription.GetPlaywrightWorkspacesAsync())
{
    Console.WriteLine($"Arbeitsbereich: {workspace.Data.Name}");
}

4. Arbeitsbereich aktualisieren

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

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

5. Namenverfügbarkeit prüfen

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 ist verfügbar!");
}
else
{
    Console.WriteLine($"Name nicht verfügbar: {result.Value.Message}");
    Console.WriteLine($"Grund: {result.Value.Reason}");
}

6. Kontingentinformationen abrufen

// Kontingente auf Abonnementebene
await foreach (var quota in subscription.GetPlaywrightQuotasAsync(AzureLocation.WestUS3))
{
    Console.WriteLine($"Kontingent: {quota.Data.Name}");
    Console.WriteLine($"  Limit: {quota.Data.Limit}");
    Console.WriteLine($"  Verwendet: {quota.Data.Used}");
}

// Kontingente auf Arbeitsbereichsebene
var workspaceQuotas = workspace.Value.GetAllPlaywrightWorkspaceQuota();
await foreach (var quota in workspaceQuotas.GetAllAsync())
{
    Console.WriteLine($"Arbeitsbereichskontingent: {quota.Data.Name}");
}

7. Arbeitsbereich löschen

// Löschen (langandauernder Vorgang)
await workspace.Value.DeleteAsync(WaitUntil.Completed);

Referenz zu Schlüsseltypen

TypZweck
`ArmClient`Einstiegspunkt für alle ARM-Vorgänge
`PlaywrightWorkspaceResource`Stellt einen Playwright Testing-Arbeitsbereich dar
`PlaywrightWorkspaceCollection`Sammlung für CRUD-Vorgänge an Arbeitsbereichen
`PlaywrightWorkspaceData`Erstellungs-/Antwortpayload für Arbeitsbereich
`PlaywrightWorkspacePatch`Aktualisierungspayload für Arbeitsbereich
`PlaywrightQuotaResource`Kontingentinformationen auf Abonnementebene
`PlaywrightWorkspaceQuotaResource`Kontingentinformationen auf Arbeitsbereichsebene
`PlaywrightExtensions`Erweiterungsmethoden für ARM-Ressourcen
`PlaywrightCheckNameAvailabilityContent`Anfrage zur Prüfung der Namenverfügbarkeit

Arbeitsbereichseigenschaften

EigenschaftBeschreibung
`DataplaneUri`URI für die Testausführung (z. B. `https://api.dataplane.{guid}.domain.com`)
`WorkspaceId`Eindeutige Arbeitsbereichskennung (GUID)
`RegionalAffinity`Regionale Affinität für die Testausführung aktivieren/deaktivieren
`LocalAuth`Lokale Authentifizierung (Zugriffstoken) aktivieren/deaktivieren
`ProvisioningState`Aktueller Bereitstellungsstatus (Erfolgreich, Fehlgeschlagen usw.)

Best Practices

  1. WaitUntil.Completed für Vorgänge verwenden, die vor dem Fortfahren abgeschlossen sein müssen
  2. WaitUntil.Started verwenden, wenn manuell abgefragt oder Vorgänge parallel ausgeführt werden sollen
  3. Immer DefaultAzureCredential verwenden — niemals Schlüssel hartcodieren
  4. RequestFailedException für ARM-API-Fehler behandeln
  5. CreateOrUpdateAsync für idempotente Vorgänge verwenden
  6. Hierarchie navigieren über Get*-Methoden (z. B. resourceGroup.GetPlaywrightWorkspaces())
  7. Die Datenebenen-URI nach der Arbeitsbereichserstellung speichern, um die Testausführungskonfiguration vorzunehmen

Fehlerbehandlung

using Azure;

try
{
    var operation = await workspaceCollection.CreateOrUpdateAsync(
        WaitUntil.Completed, workspaceName, workspaceData);
}
catch (RequestFailedException ex) when (ex.Status == 409)
{
    Console.WriteLine("Arbeitsbereich existiert bereits");
}
catch (RequestFailedException ex) when (ex.Status == 400)
{
    Console.WriteLine($"Schlechte Anfrage: {ex.Message}");
}
catch (RequestFailedException ex)
{
    Console.WriteLine($"ARM-Fehler: {ex.Status} - {ex.ErrorCode}: {ex.Message}");
}

Integration mit der Testausführung

Nach dem Erstellen eines Arbeitsbereichs verwenden Sie die DataplaneUri, um Ihre Playwright-Tests zu konfigurieren:

// 1. Arbeitsbereich erstellen (dieses SDK)
var workspace = await workspaceCollection.CreateOrUpdateAsync(
    WaitUntil.Completed, "my-workspace", workspaceData);

// 2. Dienst-URL abrufen
var serviceUrl = workspace.Value.Data.DataplaneUri;

// 3. Umgebungsvariable für die Testausführung festlegen
Environment.SetEnvironmentVariable("PLAYWRIGHT_SERVICE_URL", serviceUrl.ToString());

// 4. Tests mit Azure.Developer.MicrosoftPlaywrightTesting.NUnit ausführen
// (separates Paket für die Testausführung)

Verwandte SDKs

SDKZweckInstallation
`Azure.ResourceManager.Playwright`Management-Plane (dieses SDK)`dotnet add package Azure.ResourceManager.Playwright`
`Azure.Developer.MicrosoftPlaywrightTesting.NUnit`Ausführen von NUnit-Playwright-Tests im großen Maßstab`dotnet add package Azure.Developer.MicrosoftPlaywrightTesting.NUnit --prerelease`
`Azure.Developer.Playwright`Playwright-Clientbibliothek`dotnet add package Azure.Developer.Playwright`

API-Informationen

  • Ressourcenanbieter: Microsoft.LoadTestService
  • Standard-API-Version: 2025-09-01
  • Ressourcentyp: Microsoft.LoadTestService/playwrightWorkspaces

Dokumentationslinks

  • Azure.ResourceManager.Playwright-API-Referenz
  • Microsoft Playwright Testing-Übersicht
  • Schnellstart: Playwright-Tests im großen Maßstab ausführen
Auf GitHub ansehen
---
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)

Alle Dateien

0 Dateien

azure-resource-manager-playwright-dotnet installieren

Laden Sie die Skill-Dateien herunter und extrahieren Sie diese in Ihr .claude/skills/-Verzeichnis.

ZIP herunterladen

Klonen Sie das Repository und kopieren Sie die Skill-Dateien in Ihr Projekt.

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

Kopieren Kopieren
Schnelle Einrichtung: Kopieren Sie den Ordner „skill“ nach .claude/skills/. Claude erkennt und verwendet die Fähigkeit automatisch.
Repository microsoft/skills

Ähnliche Skills

Verification &amp; Quality Assurance
Zeit aktualisiert 29. Juni 2026
base44-cli
Zeit aktualisiert 29. Juni 2026
klingai-upgrade-migration
Zeit aktualisiert 3. Juli 2026
Railway CLI Management
Zeit aktualisiert 2. Juli 2026
OR