Referència de configuració

Aquest article documenta la configuració de Playwright utilitzada en les proves de mostra i explica com adaptar-la al teu propi entorn.

playwright.config.ts

El fitxer de configuració és a 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',
});

Opcions de configuració clau

Les seccions següents expliquen les configuracions més importants del fitxer de configuració i quan canviar-les.

fullyParallel i workers

Les proves de Power Platform comparteixen un únic entorn Dataverse. Executar proves en paral·lel genera conflictes de dades, com ara que dues proves esborrin el mateix registre. Configura ambdues opcions per serialitzar l'execució:

fullyParallel: false,
workers: 1,

Nota

Si tens diversos entorns, pots augmentar workers i aïllar cada projecte en un entorn diferent utilitzant fitxers separats .env o variables a nivell d'entorn.

retries

Els reintents poden amagar la descamació en el CI. Ús retries: 1 en CI per gestionar problemes de xarxa transitoris. Configura retries: 0 localment per rebre feedback immediat:

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

trace, , screenshotvideo

Captura només diagnòstics en cas de fallada en estalviar espai al disc:

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

En CI, els artefactes es pugen després de la prova. Vegeu integració CI/CD.

projects

Utilitza projectes de Playwright per separar conjunts de proves de llenç i models guiats. Cada projecte pot utilitzar un estat d'emmagatzematge diferent:

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

Gestiona un sol projecte:

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

globalSetup

L'script global de configuració s'executa una vegada abans de totes les proves. Valida l'estat d'autenticació i executa l'autenticació headless si l'estat d'emmagatzematge està expirat o falta:

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

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

Les comprovacions de validació:

  • Existeix el fitxer d'estat d'emmagatzematge
  • El token d'accés MSAL no està caducat (tests de Canvas/Gen UX)
  • Les galetes de sessió CRM són presents i vàlides (proves MDA)

tsconfig.json

El tsconfig.json fitxer controla la configuració de compilació TypeScript per al paquet de prova:

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

.env Fitxer

El .env fitxer a packages/e2e-tests/.env estableix variables d'entorn per a execucions locals. Per a la referència completa, vegeu Variables d'entorn.

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 Guions

Els següents scripts npm estan disponibles per packages/e2e-tests/package.json a l'autenticació i execució de proves:

Guió Ordre Descripció
auth:headful ts-node auth/auth-maker-portal.ts Autenticació interactiva per a Power Apps (proves de canvas)
auth:mda:headful ts-node auth/auth-mda.ts Autenticació interactiva per a aplicacions basades en models
auth ts-node auth/auth-maker-portal.ts --headless Autenticació sense cap (CI)
auth:mda ts-node auth/auth-mda.ts --headless Autenticació d'aplicacions guiades per models sense cap (CI)
test playwright test Fes totes les proves
test:ui playwright test --ui Executa amb la interfície Playwright
test:debug playwright test --debug Executa amb l'inspector de depuració

Passos següents

Consulteu també