Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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 |