Referencia de configuración

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

Pasos siguientes

Consulte también