Konfigūracijos nuoroda

Šiame straipsnyje aprašoma "Playwright" konfigūracija, kurią naudoja pavyzdiniai testai, ir paaiškinama, kaip pritaikyti ją savo aplinkai.

playwright.config.ts

Konfigūracijos failas yra 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',
});

Raktų konfigūravimo parinktys

Tolesniuose skyriuose paaiškinti svarbiausi konfigūracijos failo parametrai ir kada juos pakeisti.

fullyParallel“ ir „workers

"Power Platform" testai bendrina vieną "Dataverse" aplinką. Vykdant testus lygiagrečiai sukuriami duomenų konfliktai, pvz., du bandymai naikina tą patį įrašą. Nustatykite abi parinktis, kad vykdymas būtų nuosekliai išdėstytas:

fullyParallel: false,
workers: 1,

Pastaba.

Jei turite kelias aplinkas, galite padidinti workers ir atskirti kiekvieną projektą skirtingose aplinkose naudodami atskirus .env failus arba aplinkos lygio kintamuosius.

retries

Retries can mask flakiness in CI. Naudokite retries: 1 CI laikinų tinklo problemų apdorodami. Nustatykite retries: 0 vietoje, kad gautumėte skubius atsiliepimus:

retries: process.env.CI ? 1 : 0,

trace, , screenshotvideo

Užfiksuoti diagnostiką tik nepavykus sutaupyti vietos diske:

trace: 'on-first-retry',
screenshot: 'only-on-failure',
video: 'retain-on-failure',

Ci, artefaktai nusiunčiami po bandymo vykdymo. Žr . CI / CD integravimas.

projects

Naudokite "Playwright" projektus, kad atskirtumėte drobės ir modeliu pagrįstus testų paketus. Kiekvienas projektas gali naudoti skirtingą saugyklos būseną:

projects: [
  {
    name: 'canvas',
    use: { storageState: storageStatePath },
    testMatch: '**/canvas/**/*.test.ts',
  },
  {
    name: 'mda',
    use: { storageState: mdaStorageStatePath },
    testMatch: '**/mda/**/*.test.ts',
  },
],

Vykdyti vieną projektą:

npx playwright test --project=canvas
npx playwright test --project=mda

globalSetup

Visuotinis sąrankos scenarijus paleidžiamas vieną kartą prieš visus testus. Ji patikrina autentifikavimo būseną ir paleidžia be galvos autentifikavimą, jei saugyklos būsena yra pasibaigusi arba jos nėra:

// global-setup.ts
import { validateAndRefreshAuthState } from './utils/validate-auth-state';

export default async function globalSetup() {
  await validateAndRefreshAuthState();
}

Tikrinimo tikrinimai:

  • Saugyklos būsenos failas yra
  • MSAL prieigos atpažinimo ženklas nėra pasibaigęs (drobės / genų UX testai)
  • CRM seansų slapukai yra ir jie galioja (MDA testai)

tsconfig.json

Failas tsconfig.json valdo testo paketo TypeScript kompiliavimo parametrus:

{
  "compilerOptions": {
    "target": "ES2020",
    "module": "commonjs",
    "strict": true,
    "esModuleInterop": true,
    "resolveJsonModule": true,
    "outDir": "dist",
    "rootDir": "."
  },
  "include": ["**/*.ts"],
  "exclude": ["node_modules", "dist"]
}

.env failas

Failas .envpackages/e2e-tests/.env , esantis vietinio paleidimo aplinkos kintamųjų rinkiniuose. Visą nuorodą žr. Aplinkos kintamieji.

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 Scenarijus

Autentifikavimui ir testo vykdymui galimi packages/e2e-tests/package.json šie npm scenarijai:

Scenarijus Komanda Aprašą
auth:headful ts-node auth/auth-maker-portal.ts Interaktyvus autentifikavimas Power Apps (drobės testai)
auth:mda:headful ts-node auth/auth-mda.ts Interaktyvus autentifikavimas modeliu pagrįstoms programėlėms
auth ts-node auth/auth-maker-portal.ts --headless Be galvos autentifikavimas (CI)
auth:mda ts-node auth/auth-mda.ts --headless Be galvos modeliu pagrįstas programėlės autentifikavimas (CI)
test playwright test Paleisti visus testus
test:ui playwright test --ui Vykdyti naudojant "Playwright" vartotojo sąsają
test:debug playwright test --debug Paleisti naudojant derinimo inspektorių

Kiti veiksmai

Taip pat žiūrėkite