Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Este artigo documenta a configuração do Dramaturgo usada pelos testes de exemplo e explica como adaptá-la para seu próprio ambiente.
playwright.config.ts
O arquivo 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',
});
Opções de configuração de chave
As seções a seguir explicam as configurações mais importantes no arquivo de configuração e quando alterá-las.
fullyParallel e workers
Os testes do Power Platform compartilham um único ambiente do Dataverse. A execução de testes em paralelo cria conflitos de dados, como dois testes excluindo o mesmo registro. Defina ambas as opções para serializar a execução:
fullyParallel: false,
workers: 1,
Observação
Se você tiver vários ambientes, poderá aumentar workers e isolar cada projeto em um ambiente diferente usando arquivos separados .env ou variáveis de nível de ambiente.
retries
As novas tentativas podem mascarar o descaso na CI. Use retries: 1 na CI para lidar com problemas de rede transitórios. Defina retries: 0 localmente para obter comentários imediatos:
retries: process.env.CI ? 1 : 0,
trace, , screenshotvideo
Capture o diagnóstico somente em caso de falha ao economizar espaço em disco:
trace: 'on-first-retry',
screenshot: 'only-on-failure',
video: 'retain-on-failure',
Na CI, os artefatos são carregados após a execução do teste. Consulte a integração de CI/CD.
projects
Use projetos do Dramaturgo para separar telas e conjuntos de testes controlados por modelos. 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',
},
],
Execute um único projeto:
npx playwright test --project=canvas
npx playwright test --project=mda
globalSetup
O script de instalação global é executado uma vez antes de todos os testes. Ele valida o estado de autenticação e executa a autenticação sem cabeça se o estado de armazenamento estiver expirado ou ausente:
// global-setup.ts
import { validateAndRefreshAuthState } from './utils/validate-auth-state';
export default async function globalSetup() {
await validateAndRefreshAuthState();
}
As verificações de validação:
- O arquivo de estado de armazenamento existe
- O token de acesso MSAL não expirou (testes de UX de tela/geração)
- Cookies de sessão crm estão presentes e válidos (testes de MDA)
tsconfig.json
O tsconfig.json arquivo controla as configurações de compilação do 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 arquivo em packages/e2e-tests/.env define variáveis de ambiente para execuções locais. Para obter a referência completa, consulte 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 teste:
| Script | Command | Descrição |
|---|---|---|
auth:headful |
ts-node auth/auth-maker-portal.ts |
Autenticação interativa para Power Apps (testes de tela) |
auth:mda:headful |
ts-node auth/auth-mda.ts |
Autenticação interativa para aplicativos controlados por 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 |
CI (autenticação de aplicativo orientada por modelo sem cabeça) |
test |
playwright test |
Executar todos os testes |
test:ui |
playwright test --ui |
Executar com a interface do usuário do dramaturgo |
test:debug |
playwright test --debug |
Executar com o inspetor de depuração |