Nota
Capaian ke halaman ini memerlukan kebenaran. Anda boleh cuba mendaftar masuk atau menukar direktori.
Capaian ke halaman ini memerlukan kebenaran. Anda boleh cuba menukar direktori.
Artikel ini mendokumentasikan konfigurasi Penulis Drama yang digunakan oleh ujian sampel dan menerangkan cara menyesuaikannya untuk persekitaran anda sendiri.
playwright.config.ts
Fail konfigurasi adalah di: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',
});
Pilihan konfigurasi utama
Bahagian berikut menerangkan tetapan yang paling penting dalam fail konfigurasi dan bila hendak menukarnya.
fullyParallel dan workers
Ujian Power Platform berkongsi persekitaran Dataverse tunggal. Menjalankan ujian secara selari mencipta konflik data, seperti dua ujian yang memadamkan rekod yang sama. Tetapkan kedua-dua pilihan untuk melaksanakan secara bersiri:
fullyParallel: false,
workers: 1,
Nota
Jika anda mempunyai berbilang persekitaran, anda boleh meningkatkan workers dan mengasingkan setiap projek ke persekitaran yang berbeza menggunakan fail berasingan .env atau pembolehubah peringkat persekitaran.
retries
Percubaan semula boleh menutupi pengelupasan dalam CI. Gunakan retries: 1 dalam CI untuk mengendalikan isu rangkaian sementara. Tetapkan retries: 0 secara tempatan untuk mendapatkan maklum balas segera:
retries: process.env.CI ? 1 : 0,
trace, screenshot, video
Tangkap diagnostik hanya apabila gagal menjimatkan ruang cakera:
trace: 'on-first-retry',
screenshot: 'only-on-failure',
video: 'retain-on-failure',
Dalam CI, artifak dimuat naik selepas ujian dijalankan. Lihat penyepaduan CI/CD.
projects
Gunakan projek Playwright untuk memisahkan kanvas dan suite ujian dipacu model. Setiap projek boleh menggunakan keadaan storan yang berbeza:
projects: [
{
name: 'canvas',
use: { storageState: storageStatePath },
testMatch: '**/canvas/**/*.test.ts',
},
{
name: 'mda',
use: { storageState: mdaStorageStatePath },
testMatch: '**/mda/**/*.test.ts',
},
],
Jalankan satu projek:
npx playwright test --project=canvas
npx playwright test --project=mda
globalSetup
Skrip persediaan global berjalan sekali sebelum semua ujian. Ia mengesahkan keadaan pengesahan dan menjalankan pengesahan tanpa kepala jika keadaan storan telah tamat tempoh atau hilang:
// global-setup.ts
import { validateAndRefreshAuthState } from './utils/validate-auth-state';
export default async function globalSetup() {
await validateAndRefreshAuthState();
}
Semakan pengesahan:
- Fail keadaan storan wujud
- Token akses MSAL belum tamat tempoh (ujian kanvas/Gen UX)
- Kuki sesi CRM hadir dan sah (ujian MDA)
tsconfig.json
Fail mengawal tsconfig.json tetapan penyusunan TypeScript untuk pakej ujian:
{
"compilerOptions": {
"target": "ES2020",
"module": "commonjs",
"strict": true,
"esModuleInterop": true,
"resolveJsonModule": true,
"outDir": "dist",
"rootDir": "."
},
"include": ["**/*.ts"],
"exclude": ["node_modules", "dist"]
}
.env fail
.env Fail di packages/e2e-tests/.env menetapkan pembolehubah persekitaran untuk larian tempatan. Untuk rujukan lengkap, lihat Pembolehubah persekitaran.
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 Skrip
Skrip npm berikut tersedia untuk packages/e2e-tests/package.json pengesahan dan pelaksanaan ujian:
| Skrip | Perintah | Perihalan |
|---|---|---|
auth:headful |
ts-node auth/auth-maker-portal.ts |
Pengesahan interaktif untuk Power Apps (ujian kanvas) |
auth:mda:headful |
ts-node auth/auth-mda.ts |
Pengesahan interaktif untuk apl dipacu model |
auth |
ts-node auth/auth-maker-portal.ts --headless |
Pengesahan tanpa kepala (CI) |
auth:mda |
ts-node auth/auth-mda.ts --headless |
Pengesahan apl dipacu model tanpa kepala (CI) |
test |
playwright test |
Jalankan semua ujian |
test:ui |
playwright test --ui |
Jalankan dengan UI Penulis Drama |
test:debug |
playwright test --debug |
Jalankan dengan pemeriksa nyahpepijat |