Freigeben über


Konfigurationsreferenz

In diesem Artikel wird die Playwright-Konfiguration dokumentiert, die von den Beispieltests verwendet wird, und erläutert, wie Sie sie für Ihre eigene Umgebung anpassen können.

playwright.config.ts

Die Konfigurationsdatei lautet unter 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',
});

Wichtige Konfigurationsoptionen

In den folgenden Abschnitten werden die wichtigsten Einstellungen in der Konfigurationsdatei und deren Änderung erläutert.

fullyParallel und workers

Power Platform-Tests teilen eine einzelne Dataverse-Umgebung. Das Ausführen von Tests parallel erstellt Datenkonflikte, z. B. zwei Tests, die denselben Datensatz löschen. Legen Sie beide Optionen fest, um die Ausführung zu serialisieren:

fullyParallel: false,
workers: 1,

Hinweis

Wenn Sie über mehrere Umgebungen verfügen, können Sie jedes Projekt mithilfe separater .env Dateien oder Variablen auf Umgebungsebene in eine andere Umgebung vergrößern workers und isolieren.

retries

Wiederholungen können Flakiness in CI masken. Verwenden Sie retries: 1 in CI, um vorübergehende Netzwerkprobleme zu behandeln. Lokal festlegen retries: 0 , um sofortiges Feedback zu erhalten:

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

trace, screenshotvideo

Erfassen der Diagnose nur bei Fehlern beim Speichern von Speicherplatz:

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

In CI werden Artefakte nach der Testausführung hochgeladen. Siehe CI/CD-Integration.

projects

Verwenden Sie Playwright-Projekte, um Canvas- und modellgesteuerte Testsuiten zu trennen. Jedes Projekt kann einen anderen Speicherstatus verwenden:

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

Ausführen eines einzelnen Projekts:

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

globalSetup

Das globale Setupskript wird einmal vor allen Tests ausgeführt. Er überprüft den Authentifizierungsstatus und führt eine headless-Authentifizierung aus, wenn der Speicherstatus abgelaufen ist oder fehlt:

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

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

Die Überprüfungsprüfungen:

  • Speicherstatusdatei ist vorhanden
  • MSAL-Zugriffstoken ist nicht abgelaufen (Canvas-/Gen-UX-Tests)
  • CRM-Sitzungscookies sind vorhanden und gültig (MDA-Tests)

tsconfig.json

Die tsconfig.json Datei steuert die TypeScript-Kompilierungseinstellungen für das Testpaket:

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

.env-Datei

Die .env Datei bei packages/e2e-tests/.env legt Umgebungsvariablen für lokale Ausführung fest. Die vollständige Referenz finden Sie unter Umgebungsvariablen.

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 Skripts

Die folgenden npm-Skripts sind für packages/e2e-tests/package.json die Authentifizierung und Die Testausführung verfügbar:

Skript Befehl Beschreibung
auth:headful ts-node auth/auth-maker-portal.ts Interaktive Authentifizierung für Power Apps (Canvastests)
auth:mda:headful ts-node auth/auth-mda.ts Interaktive Authentifizierung für modellgesteuerte Apps
auth ts-node auth/auth-maker-portal.ts --headless Kopflose Authentifizierung (CI)
auth:mda ts-node auth/auth-mda.ts --headless Headless modellgesteuerte App-Authentifizierung (CI)
test playwright test Alle Tests ausführen
test:ui playwright test --ui Ausführen mit Playwright-UI
test:debug playwright test --debug Ausführen mit Debuginspektor

Nächste Schritte

Siehe auch