Referensi konfigurasi

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

Langkah berikutnya

Baca juga