Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Artikel ini mencocokkan konfigurasi Playwright yang digunakan oleh pengujian sampel dan menjelaskan cara mengadaptasinya untuk lingkungan Anda sendiri.
playwright.config.ts
File konfigurasi berada 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',
});
Opsi konfigurasi utama
Bagian berikut menjelaskan pengaturan terpenting dalam file konfigurasi dan kapan harus mengubahnya.
fullyParallel dan workers
Pengujian Power Platform berbagi satu lingkungan Dataverse. Menjalankan pengujian secara paralel membuat konflik data, seperti dua pengujian yang menghapus rekaman yang sama. Atur kedua opsi untuk menserialisasikan eksekusi:
fullyParallel: false,
workers: 1,
Note
Jika Anda memiliki beberapa lingkungan, Anda dapat meningkatkan workers dan mengisolasi setiap proyek ke lingkungan yang berbeda menggunakan file terpisah .env atau variabel tingkat lingkungan.
retries
Percobaan ulang dapat menutupi flakiness di CI. Gunakan retries: 1 di CI untuk menangani masalah jaringan sementara. Atur retries: 0 secara lokal untuk mendapatkan umpan balik langsung:
retries: process.env.CI ? 1 : 0,
trace, , screenshotvideo
Ambil diagnostik hanya pada kegagalan untuk menghemat ruang disk:
trace: 'on-first-retry',
screenshot: 'only-on-failure',
video: 'retain-on-failure',
Di CI, artefak diunggah setelah uji coba. Lihat integrasi CI/CD.
projects
Gunakan proyek Playwright untuk memisahkan kanvas dan suite pengujian berbasis model. Setiap proyek dapat menggunakan status penyimpanan yang berbeda:
projects: [
{
name: 'canvas',
use: { storageState: storageStatePath },
testMatch: '**/canvas/**/*.test.ts',
},
{
name: 'mda',
use: { storageState: mdaStorageStatePath },
testMatch: '**/mda/**/*.test.ts',
},
],
Jalankan satu proyek:
npx playwright test --project=canvas
npx playwright test --project=mda
globalSetup
Skrip penyiapan global berjalan sekali sebelum semua pengujian. Ini memvalidasi status autentikasi dan menjalankan autentikasi headless jika status penyimpanan kedaluwarsa atau hilang:
// global-setup.ts
import { validateAndRefreshAuthState } from './utils/validate-auth-state';
export default async function globalSetup() {
await validateAndRefreshAuthState();
}
Pemeriksaan validasi:
- File status penyimpanan ada
- Token akses MSAL tidak kedaluwarsa (tes UX kanvas/Gen)
- Cookie sesi CRM ada dan valid (tes MDA)
tsconfig.json
File tsconfig.json mengontrol pengaturan kompilasi TypeScript untuk paket pengujian:
{
"compilerOptions": {
"target": "ES2020",
"module": "commonjs",
"strict": true,
"esModuleInterop": true,
"resolveJsonModule": true,
"outDir": "dist",
"rootDir": "."
},
"include": ["**/*.ts"],
"exclude": ["node_modules", "dist"]
}
File .env
File .env di packages/e2e-tests/.env menetapkan variabel lingkungan untuk eksekusi lokal. Untuk referensi lengkap, lihat Variabel lingkungan.
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 autentikasi dan eksekusi pengujian:
| Script | Command | Deskripsi |
|---|---|---|
auth:headful |
ts-node auth/auth-maker-portal.ts |
Autentikasi interaktif untuk Power Apps (tes kanvas) |
auth:mda:headful |
ts-node auth/auth-mda.ts |
Autentikasi interaktif untuk aplikasi berbasis model |
auth |
ts-node auth/auth-maker-portal.ts --headless |
Autentikasi tanpa kepala (CI) |
auth:mda |
ts-node auth/auth-mda.ts --headless |
Autentikasi aplikasi berbasis model tanpa kepala (CI) |
test |
playwright test |
Jalankan semua pengujian |
test:ui |
playwright test --ui |
Jalankan dengan UI Playwright |
test:debug |
playwright test --debug |
Jalankan dengan inspektur debug |