Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Questo articolo illustra la configurazione playwright usata dai test di esempio e spiega come adattarla per il proprio ambiente.
playwright.config.ts
Il file di configurazione si trova in 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',
});
Opzioni di configurazione chiave
Le sezioni seguenti illustrano le impostazioni più importanti nel file di configurazione e quando modificarle.
fullyParallel e workers
I test di Power Platform condividono un singolo ambiente Dataverse. L'esecuzione di test in parallelo crea conflitti di dati, ad esempio due test che eliminano lo stesso record. Impostare entrambe le opzioni per serializzare l'esecuzione:
fullyParallel: false,
workers: 1,
Annotazioni
Se si dispone di più ambienti, è possibile aumentare workers e isolare ogni progetto in un ambiente diverso usando file separati .env o variabili a livello di ambiente.
retries
I tentativi possono mascherare la flakiness in CI. Usare retries: 1 in CI per gestire i problemi di rete temporanei. Impostare retries: 0 localmente per ottenere commenti e suggerimenti immediati:
retries: process.env.CI ? 1 : 0,
trace, screenshot, video
Acquisire la diagnostica solo in caso di errore durante il salvataggio dello spazio su disco:
trace: 'on-first-retry',
screenshot: 'only-on-failure',
video: 'retain-on-failure',
In CI gli artefatti vengono caricati dopo l'esecuzione del test. Vedere Integrazione CI/CD.
projects
Usare i progetti Playwright per separare gruppi di test basati su canvas e modelli. Ogni progetto può usare uno stato di archiviazione diverso:
projects: [
{
name: 'canvas',
use: { storageState: storageStatePath },
testMatch: '**/canvas/**/*.test.ts',
},
{
name: 'mda',
use: { storageState: mdaStorageStatePath },
testMatch: '**/mda/**/*.test.ts',
},
],
Eseguire un singolo progetto:
npx playwright test --project=canvas
npx playwright test --project=mda
globalSetup
Lo script di installazione globale viene eseguito una sola volta prima di tutti i test. Convalida lo stato di autenticazione ed esegue l'autenticazione headless se lo stato di archiviazione è scaduto o mancante:
// global-setup.ts
import { validateAndRefreshAuthState } from './utils/validate-auth-state';
export default async function globalSetup() {
await validateAndRefreshAuthState();
}
I controlli di convalida:
- File di stato di archiviazione esistente
- Il token di accesso MSAL non è scaduto (test dell'esperienza utente canvas/gen)
- I cookie di sessione CRM sono presenti e validi (test MDA)
tsconfig.json
Il tsconfig.json file controlla le impostazioni di compilazione TypeScript per il pacchetto di test:
{
"compilerOptions": {
"target": "ES2020",
"module": "commonjs",
"strict": true,
"esModuleInterop": true,
"resolveJsonModule": true,
"outDir": "dist",
"rootDir": "."
},
"include": ["**/*.ts"],
"exclude": ["node_modules", "dist"]
}
File .env
Il .env file in packages/e2e-tests/.env imposta le variabili di ambiente per le esecuzioni locali. Per informazioni di riferimento complete, vedere Variabili di ambiente.
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 Script
Per l'autenticazione e l'esecuzione dei test sono disponibili gli packages/e2e-tests/package.json script npm seguenti:
| Script | Comando | Descrizione |
|---|---|---|
auth:headful |
ts-node auth/auth-maker-portal.ts |
Autenticazione interattiva per Power Apps (test canvas) |
auth:mda:headful |
ts-node auth/auth-mda.ts |
Autenticazione interattiva per le app basate su modello |
auth |
ts-node auth/auth-maker-portal.ts --headless |
Autenticazione headless (CI) |
auth:mda |
ts-node auth/auth-mda.ts --headless |
Autenticazione basata su modello headless (CI) |
test |
playwright test |
Eseguire tutti i test |
test:ui |
playwright test --ui |
Eseguire con l'interfaccia utente playwright |
test:debug |
playwright test --debug |
Eseguire con debug inspector |