Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Cet article décrit la configuration playwright utilisée par les exemples de tests et explique comment l’adapter à votre propre environnement.
playwright.config.ts
Le fichier de configuration se trouve à packages/e2e-tests/playwright.config.ts:
import { defineConfig, devices } from '@playwright/test';
import path from 'path';
import { getStorageStatePath } from 'power-platform-playwright-toolkit';
import dotenv from 'dotenv';
dotenv.config();
const storageStatePath = getStorageStatePath(process.env.MS_AUTH_EMAIL!);
const mdaStorageStatePath = path.join(
path.dirname(storageStatePath),
`state-mda-${process.env.MS_AUTH_EMAIL}.json`
);
export default defineConfig({
testDir: './tests',
fullyParallel: false, // Power Platform tests share a single org; run serially
forbidOnly: !!process.env.CI,
retries: process.env.CI ? 1 : 0,
workers: 1, // Single worker prevents auth conflicts
reporter: [
['html', { outputFolder: 'playwright-report' }],
['junit', { outputFile: 'test-results/results.xml' }],
],
use: {
baseURL: process.env.CANVAS_APP_URL,
trace: 'on-first-retry',
screenshot: 'only-on-failure',
video: 'retain-on-failure',
},
projects: [
{
name: 'canvas',
use: {
...devices['Desktop Chrome'],
storageState: storageStatePath,
},
testMatch: '**/canvas/**/*.test.ts',
},
{
name: 'mda',
use: {
...devices['Desktop Chrome'],
storageState: mdaStorageStatePath,
},
testMatch: '**/mda/**/*.test.ts',
},
],
globalSetup: './globals/global-setup',
globalTeardown: './globals/global-teardown',
});
Options de configuration de clé
Les sections suivantes expliquent les paramètres les plus importants dans le fichier de configuration et quand les modifier.
fullyParallel et workers
Les tests Power Platform partagent un seul environnement Dataverse. L’exécution de tests en parallèle crée des conflits de données, tels que deux tests supprimant le même enregistrement. Définissez les deux options pour sérialiser l’exécution :
fullyParallel: false,
workers: 1,
Note
Si vous avez plusieurs environnements, vous pouvez augmenter workers et isoler chaque projet dans un environnement différent à l’aide de fichiers distincts .env ou de variables au niveau de l’environnement.
retries
Les nouvelles tentatives peuvent masquer les flakines en CI. Utilisez retries: 1 ci pour gérer les problèmes réseau temporaires. Définissez retries: 0 localement pour obtenir des commentaires immédiats :
retries: process.env.CI ? 1 : 0,
trace, , screenshotvideo
Capturez les diagnostics uniquement en cas d’échec pour économiser de l’espace disque :
trace: 'on-first-retry',
screenshot: 'only-on-failure',
video: 'retain-on-failure',
Dans CI, les artefacts sont chargés après l’exécution du test. Consultez l’intégration CI/CD.
projects
Utilisez des projets Playwright pour séparer les suites de test basées sur des modèles et des canevas. Chaque projet peut utiliser un état de stockage différent :
projects: [
{
name: 'canvas',
use: { storageState: storageStatePath },
testMatch: '**/canvas/**/*.test.ts',
},
{
name: 'mda',
use: { storageState: mdaStorageStatePath },
testMatch: '**/mda/**/*.test.ts',
},
],
Exécutez un projet unique :
npx playwright test --project=canvas
npx playwright test --project=mda
globalSetup
Le script d’installation globale s’exécute une fois avant tous les tests. Il valide l’état d’authentification et exécute l’authentification sans tête si l’état de stockage a expiré ou est manquant :
// global-setup.ts
import { validateAndRefreshAuthState } from './utils/validate-auth-state';
export default async function globalSetup() {
await validateAndRefreshAuthState();
}
Les vérifications de validation :
- Le fichier d’état de stockage existe
- Le jeton d’accès MSAL n’a pas expiré (tests canvas/Gen UX)
- Les cookies de session CRM sont présents et valides (tests MDA)
tsconfig.json
Le fichier contrôle les tsconfig.json paramètres de compilation TypeScript pour le package de test :
{
"compilerOptions": {
"target": "ES2020",
"module": "commonjs",
"strict": true,
"esModuleInterop": true,
"resolveJsonModule": true,
"outDir": "dist",
"rootDir": "."
},
"include": ["**/*.ts"],
"exclude": ["node_modules", "dist"]
}
Fichier .env
Fichier .env au niveau packages/e2e-tests/.env des variables d’environnement pour les exécutions locales. Pour obtenir la référence complète, consultez Variables d’environnement.
MS_AUTH_EMAIL=testuser@contoso.com
MS_AUTH_CREDENTIAL_TYPE=password
MS_USER_PASSWORD=<your-password>
CANVAS_APP_URL=https://apps.powerapps.com/play/<app-id>?tenantId=<tenant-id>
MODEL_DRIVEN_APP_URL=https://<org>.crm.dynamics.com/main.aspx?appid=<app-id>
CUSTOM_PAGE_NAME=AccountsCustomPage
package.json Scripts
Les scripts npm suivants sont disponibles pour packages/e2e-tests/package.json l’authentification et l’exécution des tests :
| Scénario | Commande | Description |
|---|---|---|
auth:headful |
ts-node auth/auth-maker-portal.ts |
Authentification interactive pour Power Apps (tests de canevas) |
auth:mda:headful |
ts-node auth/auth-mda.ts |
Authentification interactive pour les applications basées sur des modèles |
auth |
ts-node auth/auth-maker-portal.ts --headless |
Authentification sans tête (CI) |
auth:mda |
ts-node auth/auth-mda.ts --headless |
Authentification d’application basée sur des modèles sans tête (CI) |
test |
playwright test |
Exécuter tous les tests |
test:ui |
playwright test --ui |
Exécuter avec l’interface utilisateur playwright |
test:debug |
playwright test --debug |
Exécuter avec l’inspecteur de débogage |