Notă
Accesul la această pagină necesită autorizare. Puteți încerca să vă conectați sau să modificați directoarele.
Accesul la această pagină necesită autorizare. Puteți încerca să modificați directoarele.
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 |