Rujukan konfigurasi

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

Langkah seterusnya

Lihat juga