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
- Utiliser
WaitUntil.Completedpour les opérations qui doivent se terminer avant de continuer - Utiliser
WaitUntil.Startedquand tu veux interroger manuellement ou exécuter les opérations en parallèle - Toujours utiliser
DefaultAzureCredential— ne jamais coder les clés en dur - Gérer
RequestFailedExceptionpour les erreurs de l'API ARM - Utiliser
CreateOrUpdateAsyncpour les opérations idempotentes - Naviguer dans la hiérarchie via les méthodes
Get*(ex. :resourceGroup.GetPlaywrightWorkspaces()) - 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