Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En este artículo se documenta la configuración de Playwright usada por las pruebas de ejemplo y se explica cómo adaptarla para su propio entorno.
playwright.config.ts
El archivo de configuración está en 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',
});
Opciones clave de configuración
En las secciones siguientes se explican los valores más importantes del archivo de configuración y cuándo cambiarlos.
fullyParallel y workers
Las pruebas de Power Platform comparten un único entorno de Dataverse. La ejecución de pruebas en paralelo crea conflictos de datos, como dos pruebas que eliminan el mismo registro. Establezca ambas opciones para serializar la ejecución:
fullyParallel: false,
workers: 1,
Nota:
Si tiene varios entornos, puede aumentar workers y aislar cada proyecto en un entorno diferente mediante archivos independientes .env o variables de nivel de entorno.
retries
Los reintentos pueden enmascarar la flakiness en CI. Use retries: 1 en CI para controlar problemas de red transitorios. Establezca retries: 0 localmente para obtener comentarios inmediatos:
retries: process.env.CI ? 1 : 0,
trace, , screenshot, video
Capture diagnósticos solo en caso de error para ahorrar espacio en disco:
trace: 'on-first-retry',
screenshot: 'only-on-failure',
video: 'retain-on-failure',
En CI, los artefactos se cargan después de la ejecución de la prueba. Consulte Integración de CI/CD.
projects
Use proyectos de Playwright para separar los conjuntos de pruebas basadas en modelos y lienzos. Cada proyecto puede usar un estado de almacenamiento diferente:
projects: [
{
name: 'canvas',
use: { storageState: storageStatePath },
testMatch: '**/canvas/**/*.test.ts',
},
{
name: 'mda',
use: { storageState: mdaStorageStatePath },
testMatch: '**/mda/**/*.test.ts',
},
],
Ejecute un único proyecto:
npx playwright test --project=canvas
npx playwright test --project=mda
globalSetup
El script de configuración global se ejecuta una vez antes de todas las pruebas. Valida el estado de autenticación y ejecuta la autenticación sin encabezado si el estado de almacenamiento ha expirado o falta:
// global-setup.ts
import { validateAndRefreshAuthState } from './utils/validate-auth-state';
export default async function globalSetup() {
await validateAndRefreshAuthState();
}
Las comprobaciones de validación:
- El archivo de estado de almacenamiento existe
- El token de acceso de MSAL no ha expirado (pruebas de experiencia de usuario de lienzo o gen)
- Las cookies de sesión de CRM están presentes y válidas (pruebas de MDA)
tsconfig.json
El tsconfig.json archivo controla la configuración de compilación de TypeScript para el paquete de prueba:
{
"compilerOptions": {
"target": "ES2020",
"module": "commonjs",
"strict": true,
"esModuleInterop": true,
"resolveJsonModule": true,
"outDir": "dist",
"rootDir": "."
},
"include": ["**/*.ts"],
"exclude": ["node_modules", "dist"]
}
Archivo .env
El .env archivo en packages/e2e-tests/.env establece variables de entorno para ejecuciones locales. Para obtener la referencia completa, consulte Variables de entorno.
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 scripts
Los siguientes scripts de npm están disponibles en packages/e2e-tests/package.json para la autenticación y la ejecución de pruebas:
| Script | Comando | Descripción |
|---|---|---|
auth:headful |
ts-node auth/auth-maker-portal.ts |
Autenticación interactiva para Power Apps (pruebas de lienzo) |
auth:mda:headful |
ts-node auth/auth-mda.ts |
Autenticación interactiva para aplicaciones controladas por modelos |
auth |
ts-node auth/auth-maker-portal.ts --headless |
Autenticación sin encabezado (CI) |
auth:mda |
ts-node auth/auth-mda.ts --headless |
Autenticación de aplicaciones controladas por modelos sin encabezado (CI) |
test |
playwright test |
Ejecutar todas las pruebas |
test:ui |
playwright test --ui |
Ejecución con la interfaz de usuario de Playwright |
test:debug |
playwright test --debug |
Ejecutar con el inspector de depuración |