Informazioni di riferimento sulla configurazione

Questo articolo illustra la configurazione playwright usata dai test di esempio e spiega come adattarla per il proprio ambiente.

playwright.config.ts

Il file di configurazione si trova in 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',
});

Opzioni di configurazione chiave

Le sezioni seguenti illustrano le impostazioni più importanti nel file di configurazione e quando modificarle.

fullyParallel e workers

I test di Power Platform condividono un singolo ambiente Dataverse. L'esecuzione di test in parallelo crea conflitti di dati, ad esempio due test che eliminano lo stesso record. Impostare entrambe le opzioni per serializzare l'esecuzione:

fullyParallel: false,
workers: 1,

Annotazioni

Se si dispone di più ambienti, è possibile aumentare workers e isolare ogni progetto in un ambiente diverso usando file separati .env o variabili a livello di ambiente.

retries

I tentativi possono mascherare la flakiness in CI. Usare retries: 1 in CI per gestire i problemi di rete temporanei. Impostare retries: 0 localmente per ottenere commenti e suggerimenti immediati:

retries: process.env.CI ? 1 : 0,

trace, screenshot, video

Acquisire la diagnostica solo in caso di errore durante il salvataggio dello spazio su disco:

trace: 'on-first-retry',
screenshot: 'only-on-failure',
video: 'retain-on-failure',

In CI gli artefatti vengono caricati dopo l'esecuzione del test. Vedere Integrazione CI/CD.

projects

Usare i progetti Playwright per separare gruppi di test basati su canvas e modelli. Ogni progetto può usare uno stato di archiviazione diverso:

projects: [
  {
    name: 'canvas',
    use: { storageState: storageStatePath },
    testMatch: '**/canvas/**/*.test.ts',
  },
  {
    name: 'mda',
    use: { storageState: mdaStorageStatePath },
    testMatch: '**/mda/**/*.test.ts',
  },
],

Eseguire un singolo progetto:

npx playwright test --project=canvas
npx playwright test --project=mda

globalSetup

Lo script di installazione globale viene eseguito una sola volta prima di tutti i test. Convalida lo stato di autenticazione ed esegue l'autenticazione headless se lo stato di archiviazione è scaduto o mancante:

// global-setup.ts
import { validateAndRefreshAuthState } from './utils/validate-auth-state';

export default async function globalSetup() {
  await validateAndRefreshAuthState();
}

I controlli di convalida:

  • File di stato di archiviazione esistente
  • Il token di accesso MSAL non è scaduto (test dell'esperienza utente canvas/gen)
  • I cookie di sessione CRM sono presenti e validi (test MDA)

tsconfig.json

Il tsconfig.json file controlla le impostazioni di compilazione TypeScript per il pacchetto di test:

{
  "compilerOptions": {
    "target": "ES2020",
    "module": "commonjs",
    "strict": true,
    "esModuleInterop": true,
    "resolveJsonModule": true,
    "outDir": "dist",
    "rootDir": "."
  },
  "include": ["**/*.ts"],
  "exclude": ["node_modules", "dist"]
}

File .env

Il .env file in packages/e2e-tests/.env imposta le variabili di ambiente per le esecuzioni locali. Per informazioni di riferimento complete, vedere Variabili di ambiente.

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 Script

Per l'autenticazione e l'esecuzione dei test sono disponibili gli packages/e2e-tests/package.json script npm seguenti:

Script Comando Descrizione
auth:headful ts-node auth/auth-maker-portal.ts Autenticazione interattiva per Power Apps (test canvas)
auth:mda:headful ts-node auth/auth-mda.ts Autenticazione interattiva per le app basate su modello
auth ts-node auth/auth-maker-portal.ts --headless Autenticazione headless (CI)
auth:mda ts-node auth/auth-mda.ts --headless Autenticazione basata su modello headless (CI)
test playwright test Eseguire tutti i test
test:ui playwright test --ui Eseguire con l'interfaccia utente playwright
test:debug playwright test --debug Eseguire con debug inspector

Passaggi successivi

Vedere anche