Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
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 |