azure-resource-manager-playwright-dotnet

npx skills add https://github.com/microsoft/skills --skill azure-resource-manager-playwright-dotnet

Azure.ResourceManager.Playwright (.NET)

SDK du plan de gestion pour provisionner et gérer les espaces de travail Microsoft Playwright Testing via Azure Resource Manager.

⚠️ Plan de gestion vs Exécution de tests

  • Ce SDK (Azure.ResourceManager.Playwright) : Créer des espaces de travail, gérer les quotas, vérifier la disponibilité des noms
  • SDK d'exécution de tests (Azure.Developer.MicrosoftPlaywrightTesting.NUnit) : Exécuter les tests Playwright à grande échelle sur des navigateurs cloud

Installation

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

Versions actuelles : Stable v1.0.0, Preview v1.0.0-beta.1

Variables d'environnement

AZURE_SUBSCRIPTION_ID=<your-subscription-id>
# Pour l'authentification par principal de service (optionnel)
AZURE_TENANT_ID=<tenant-id>
AZURE_CLIENT_ID=<client-id>
AZURE_CLIENT_SECRET=<client-secret>

Authentification

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

// Utilise toujours DefaultAzureCredential
var credential = new DefaultAzureCredential();
var armClient = new ArmClient(credential);

// Obtenir l'abonnement
var subscriptionId = Environment.GetEnvironmentVariable("AZURE_SUBSCRIPTION_ID");
var subscription = armClient.GetSubscriptionResource(
    new ResourceIdentifier($"/subscriptions/{subscriptionId}"));

Hiérarchie des ressources

ArmClient
└── SubscriptionResource
    ├── PlaywrightQuotaResource (quotas au niveau de l'abonnement)
    └── ResourceGroupResource
        └── PlaywrightWorkspaceResource
            └── PlaywrightWorkspaceQuotaResource (quotas au niveau de l'espace de travail)

Flux de travail principal

1. Créer un espace de travail Playwright

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

// Obtenir le groupe de ressources
var resourceGroup = await subscription
    .GetResourceGroupAsync("my-resource-group");

// Définir l'espace de travail
var workspaceData = new PlaywrightWorkspaceData(AzureLocation.WestUS3)
{
    // Optionnel : Configurer l'affinité régionale et l'authentification locale
    RegionalAffinity = PlaywrightRegionalAffinity.Enabled,
    LocalAuth = PlaywrightLocalAuth.Enabled,
    Tags =
    {
        ["Team"] = "Dev Exp",
        ["Environment"] = "Production"
    }
};

// Créer l'espace de travail (opération de longue durée)
var workspaceCollection = resourceGroup.Value.GetPlaywrightWorkspaces();
var operation = await workspaceCollection.CreateOrUpdateAsync(
    WaitUntil.Completed,
    "my-playwright-workspace",
    workspaceData);

PlaywrightWorkspaceResource workspace = operation.Value;

// Obtenir l'URI du plan de données pour exécuter les tests
Console.WriteLine($"Data Plane URI: {workspace.Data.DataplaneUri}");
Console.WriteLine($"Workspace ID: {workspace.Data.WorkspaceId}");

2. Obtenir un espace de travail existant

// Obtenir par nom
var workspace = await workspaceCollection.GetAsync("my-playwright-workspace");

// Ou vérifier d'abord son existence
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. Lister les espaces de travail

// Lister dans le groupe de ressources
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}");
}

// Lister dans l'abonnement
await foreach (var workspace in subscription.GetPlaywrightWorkspacesAsync())
{
    Console.WriteLine($"Workspace: {workspace.Data.Name}");
}

4. Mettre à jour un espace de travail

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

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

5. Vérifier la disponibilité du nom

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. Obtenir les informations de quota

// Quotas au niveau de l'abonnement
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}");
}

// Quotas au niveau de l'espace de travail
var workspaceQuotas = workspace.Value.GetAllPlaywrightWorkspaceQuota();
await foreach (var quota in workspaceQuotas.GetAllAsync())
{
    Console.WriteLine($"Workspace Quota: {quota.Data.Name}");
}

7. Supprimer un espace de travail

// Supprimer (opération de longue durée)
await workspace.Value.DeleteAsync(WaitUntil.Completed);

Référence des types clés

Type Objectif
ArmClient Point d'entrée pour toutes les opérations ARM
PlaywrightWorkspaceResource Représente un espace de travail Playwright Testing
PlaywrightWorkspaceCollection Collection pour les opérations CRUD d'espaces de travail
PlaywrightWorkspaceData Payload de création/réponse d'espace de travail
PlaywrightWorkspacePatch Payload de mise à jour d'espace de travail
PlaywrightQuotaResource Informations de quota au niveau de l'abonnement
PlaywrightWorkspaceQuotaResource Informations de quota au niveau de l'espace de travail
PlaywrightExtensions Méthodes d'extension pour les ressources ARM
PlaywrightCheckNameAvailabilityContent Demande de vérification de disponibilité de nom

Propriétés de l'espace de travail

Propriété Description
DataplaneUri URI pour exécuter les tests (ex. : https://api.dataplane.{guid}.domain.com)
WorkspaceId Identifiant unique de l'espace de travail (GUID)
RegionalAffinity Activer/désactiver l'affinité régionale pour l'exécution des tests
LocalAuth Activer/désactiver l'authentification locale (jetons d'accès)
ProvisioningState État actuel du provisionnement (Succeeded, Failed, etc.)

Bonnes pratiques

  1. Utiliser WaitUntil.Completed pour les opérations qui doivent se terminer avant de continuer
  2. Utiliser WaitUntil.Started quand tu veux interroger manuellement ou exécuter les opérations en parallèle
  3. Toujours utiliser DefaultAzureCredential — ne jamais coder les clés en dur
  4. Gérer RequestFailedException pour les erreurs de l'API ARM
  5. Utiliser CreateOrUpdateAsync pour les opérations idempotentes
  6. Naviguer dans la hiérarchie via les méthodes Get* (ex. : resourceGroup.GetPlaywrightWorkspaces())
  7. Stocker le DataplaneUri après la création de l'espace de travail pour la configuration de l'exécution des tests

Gestion des erreurs

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

Intégration avec l'exécution des tests

Après la création d'un espace de travail, utilise le DataplaneUri pour configurer tes tests Playwright :

// 1. Créer l'espace de travail (ce SDK)
var workspace = await workspaceCollection.CreateOrUpdateAsync(
    WaitUntil.Completed, "my-workspace", workspaceData);

// 2. Obtenir l'URL du service
var serviceUrl = workspace.Value.Data.DataplaneUri;

// 3. Définir la variable d'environnement pour l'exécution des tests
Environment.SetEnvironmentVariable("PLAYWRIGHT_SERVICE_URL", serviceUrl.ToString());

// 4. Exécuter les tests avec Azure.Developer.MicrosoftPlaywrightTesting.NUnit
// (package séparé pour l'exécution des tests)

SDKs associés

SDK Objectif Installation
Azure.ResourceManager.Playwright Plan de gestion (ce SDK) dotnet add package Azure.ResourceManager.Playwright
Azure.Developer.MicrosoftPlaywrightTesting.NUnit Exécuter les tests Playwright NUnit à grande échelle dotnet add package Azure.Developer.MicrosoftPlaywrightTesting.NUnit --prerelease
Azure.Developer.Playwright Bibliothèque client Playwright dotnet add package Azure.Developer.Playwright

Informations sur l'API

  • Fournisseur de ressources : Microsoft.LoadTestService
  • Version d'API par défaut : 2025-09-01
  • Type de ressource : Microsoft.LoadTestService/playwrightWorkspaces

Liens de documentation

Skills similaires