Konfigurationsreferens

Den här artikeln dokumenterar den Playwright-konfiguration som används av exempeltesterna och förklarar hur du anpassar den för din egen miljö.

playwright.config.ts

Konfigurationsfilen finns på 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',
});

Konfigurationsalternativ för nycklar

I följande avsnitt förklaras de viktigaste inställningarna i konfigurationsfilen och när de ska ändras.

fullyParallel och workers

Power Platform-tester delar en enda Dataverse-miljö. Att köra tester parallellt skapar datakonflikter, till exempel två tester som tar bort samma post. Ange båda alternativen för att serialisera körning:

fullyParallel: false,
workers: 1,

Anmärkning

Om du har flera miljöer kan du öka workers och isolera varje projekt till en annan miljö med hjälp av separata .env filer eller miljönivåvariabler.

retries

Återförsök kan maskera flakiness i CI. Använd retries: 1 i CI för att hantera tillfälliga nätverksproblem. Ange retries: 0 lokalt för att få omedelbar feedback:

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

trace, , screenshotvideo

Samla endast in diagnostik om det inte går att spara diskutrymme:

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

I CI laddas artefakter upp efter testkörningen. Se CI/CD-integrering.

projects

Använd Playwright-projekt för att separera arbetsytor och modelldrivna testsviter. Varje projekt kan använda olika lagringstillstånd:

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

Kör ett enskilt projekt:

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

globalSetup

Det globala installationsskriptet körs en gång före alla tester. Den validerar autentiseringstillståndet och kör huvudlös autentisering om lagringstillståndet har upphört att gälla eller saknas:

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

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

Verifieringskontrollerna:

  • Lagringstillståndsfilen finns
  • MSAL-åtkomsttoken har inte upphört att gälla (canvas/Gen UX-tester)
  • CRM-sessionscookies är närvarande och giltiga (MDA-tester)

tsconfig.json

Filen tsconfig.json styr TypeScript-kompileringsinställningarna för testpaketet:

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

.env-fil

Filen .env i packages/e2e-tests/.env anger miljövariabler för lokala körningar. Fullständig referens finns i Miljövariabler.

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 Skript

Följande npm-skript är tillgängliga för packages/e2e-tests/package.json autentisering och testkörning:

Script Befallning Beskrivning
auth:headful ts-node auth/auth-maker-portal.ts Interaktiv autentisering för Power Apps (arbetsytetester)
auth:mda:headful ts-node auth/auth-mda.ts Interaktiv autentisering för modelldrivna appar
auth ts-node auth/auth-maker-portal.ts --headless Huvudlös autentisering (CI)
auth:mda ts-node auth/auth-mda.ts --headless Huvudlös modelldriven appautentisering (CI)
test playwright test Kör alla tester
test:ui playwright test --ui Kör med Playwright UI
test:debug playwright test --debug Kör med felsökningskontrollen

Nästa steg

Se även