Référence de configuration

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

Étapes suivantes

Voir aussi