Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Este artigo documenta a configuração do dramaturgo usada nos testes de exemplo e explica como a adaptar ao seu próprio ambiente.
playwright.config.ts
O ficheiro de configuração está em 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',
});
Principais opções de configuração
As secções seguintes explicam as definições mais importantes no ficheiro de configuração e quando as alterar.
fullyParallel e workers
Os testes da Power Platform partilham um único ambiente Dataverse. Executar testes em paralelo cria conflitos de dados, como dois testes que apagam o mesmo registo. Defina ambas as opções para serializar a execução:
fullyParallel: false,
workers: 1,
Observação
Se tiveres múltiplos ambientes, podes aumentar workers e isolar cada projeto para um ambiente diferente usando ficheiros separados .env ou variáveis ao nível do ambiente.
retries
Retentativas podem mascarar a descamação no IC. Uso retries: 1 em CI para lidar com questões de rede transitórias. Defina retries: 0 localmente para obter feedback imediato:
retries: process.env.CI ? 1 : 0,
trace, screenshot, video
Captura de diagnósticos apenas em caso de falha em poupar espaço em disco:
trace: 'on-first-retry',
screenshot: 'only-on-failure',
video: 'retain-on-failure',
No CI, os artefactos são carregados após o teste. Ver integração CI/CD.
projects
Use projetos de Playwright para separar conjuntos de testes de canvas e modelos orientados. Cada projeto pode usar um estado de armazenamento diferente:
projects: [
{
name: 'canvas',
use: { storageState: storageStatePath },
testMatch: '**/canvas/**/*.test.ts',
},
{
name: 'mda',
use: { storageState: mdaStorageStatePath },
testMatch: '**/mda/**/*.test.ts',
},
],
Executa um único projeto:
npx playwright test --project=canvas
npx playwright test --project=mda
globalSetup
O script de configuração global corre uma vez antes de todos os testes. Valida o estado de autenticação e executa a autenticação headless se o estado de armazenamento estiver expirado ou em falta:
// global-setup.ts
import { validateAndRefreshAuthState } from './utils/validate-auth-state';
export default async function globalSetup() {
await validateAndRefreshAuthState();
}
As verificações de validação:
- O ficheiro de estado de armazenamento existe
- O token de acesso MSAL não está expirado (testes canvas/Gen UX)
- Os cookies de sessão CRM estão presentes e válidos (testes MDA)
tsconfig.json
O tsconfig.json ficheiro controla as definições de compilação TypeScript para o pacote de teste:
{
"compilerOptions": {
"target": "ES2020",
"module": "commonjs",
"strict": true,
"esModuleInterop": true,
"resolveJsonModule": true,
"outDir": "dist",
"rootDir": "."
},
"include": ["**/*.ts"],
"exclude": ["node_modules", "dist"]
}
arquivo .env
O .env ficheiro em packages/e2e-tests/.env define variáveis de ambiente para execuções locais. Para a referência completa, veja Variáveis de 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 Scripts
Os seguintes scripts npm estão disponíveis packages/e2e-tests/package.json para autenticação e execução de testes:
| Script | Comando | Descrição |
|---|---|---|
auth:headful |
ts-node auth/auth-maker-portal.ts |
Autenticação interativa para Power Apps (testes canvas) |
auth:mda:headful |
ts-node auth/auth-mda.ts |
Autenticação interativa para aplicações orientadas a modelos |
auth |
ts-node auth/auth-maker-portal.ts --headless |
Autenticação sem cabeça (CI) |
auth:mda |
ts-node auth/auth-mda.ts --headless |
Autenticação de aplicação orientada a modelos sem interface (CI) |
test |
playwright test |
Executar todos os testes |
test:ui |
playwright test --ui |
Run with Playwright UI |
test:debug |
playwright test --debug |
Executar com o debug inspector |