Referință de configurare

Acest articol documentează configurația Playwright utilizată de testele eșantion și vă arată cum să o adaptați pentru mediul dvs.

playwright.config.ts

Fișierul de configurare se află la 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',
});

Opțiuni de configurare a cheilor

Secțiunile următoare explică setările cele mai importante din fișierul de configurare și momentul modificării acestora.

fullyParallel și workers

Testele Power Platform partajează un singur mediu Dataverse. Rularea testelor în paralel creează conflicte de date, cum ar fi două teste care șterg aceeași înregistrare. Setați ambele opțiuni pentru a serializa execuția:

fullyParallel: false,
workers: 1,

Notă

Dacă aveți mai multe medii, puteți mări workers și izola fiecare proiect într-un alt mediu, utilizând fișiere separate .env sau variabile la nivel de mediu.

retries

Reîncercări pot masca flakiness în CI. Se utilizează retries: 1 în CI pentru a gestiona problemele de rețea tranzitorii. Setați retries: 0 local pentru a obține feedback imediat:

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

trace, , screenshotvideo

Capturați diagnostice doar dacă nu s-a reușit salvarea spațiului-disc:

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

În CI, artefactele sunt încărcate după rularea testului. Consultați Integrarea CI/CD.

projects

Utilizați proiectele Playwright pentru a separa suitele de testare bazate pe modele și pânză. Fiecare proiect poate utiliza o altă stare de stocare:

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

Rulați un singur proiect:

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

globalSetup

Scriptul de configurare globală rulează o dată înainte de toate testele. Aceasta validează starea de autentificare și rulează autentificarea fără cap dacă starea de stocare este expirată sau lipsește:

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

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

Verificările de validare:

  • Fișierul de stare de stocare există
  • Simbolul de acces MSAL nu a expirat (teste gen UX pe pânză)
  • Modulele cookie de sesiune CRM sunt prezente și valide (teste MDA)

tsconfig.json

Fișierul tsconfig.json controlează setările de compilare TypeScript pentru pachetul de testare:

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

.env Fişier

Fișierul .env de la packages/e2e-tests/.env setează variabilele de mediu pentru rulări locale. Pentru referință completă, consultați Variabile de mediu.

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 Scripturi

Următoarele scripturi npm sunt disponibile în packages/e2e-tests/package.json pentru autentificare și executare test:

Script Command Descriere
auth:headful ts-node auth/auth-maker-portal.ts Autentificare interactivă pentru Power Apps (teste pe pânză)
auth:mda:headful ts-node auth/auth-mda.ts Autentificare interactivă pentru aplicațiile bazate pe modele
auth ts-node auth/auth-maker-portal.ts --headless Autentificare fără cap (CI)
auth:mda ts-node auth/auth-mda.ts --headless Autentificarea aplicației bazate pe modele fără cap (CI)
test playwright test Rulați toate testele
test:ui playwright test --ui Rulare cu interfața utilizator Playwright
test:debug playwright test --debug Rulați cu inspectorul de depanare

Pașii următori

Vedeți și