구성 참조

이 문서에서는 샘플 테스트에서 사용하는 Playwright 구성을 문서화하고 사용자 고유의 환경에 맞게 조정하는 방법을 설명합니다.

playwright.config.ts

구성 파일은 다음과 같습니다.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',
});

키 구성 옵션

다음 섹션에서는 구성 파일에서 가장 중요한 설정과 변경 시기에 대해 설명합니다.

fullyParallelworkers

Power Platform 테스트는 단일 Dataverse 환경을 공유합니다. 병렬로 테스트를 실행하면 동일한 레코드를 삭제하는 두 테스트와 같은 데이터 충돌이 발생합니다. 두 옵션을 모두 설정하여 실행을 직렬화합니다.

fullyParallel: false,
workers: 1,

메모

여러 환경이 있는 경우 별도의 workers 파일 또는 환경 수준 변수를 사용하여 각 프로젝트를 다른 환경으로 늘리고 .env 격리할 수 있습니다.

retries

다시 시도하면 CI에서 flakiness를 마스킹할 수 있습니다. CI에서 일시적인 네트워크 문제를 처리하는 데 사용합니다 retries: 1 . 즉각적인 피드백을 받으려면 로컬로 설정합니다 retries: 0 .

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

trace, , screenshotvideo

디스크 공간을 절약하지 못한 경우에만 진단을 캡처합니다.

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

CI에서는 테스트 실행 후 아티팩트가 업로드됩니다. CI/CD 통합을 참조하세요.

projects

Playwright 프로젝트를 사용하여 캔버스와 모델 기반 테스트 제품군을 구분합니다. 각 프로젝트는 다른 스토리지 상태를 사용할 수 있습니다.

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

단일 프로젝트를 실행합니다.

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

globalSetup

전역 설치 스크립트는 모든 테스트 전에 한 번 실행됩니다. 인증 상태의 유효성을 검사하고 스토리지 상태가 만료되었거나 누락된 경우 헤드리스 인증을 실행합니다.

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

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

유효성 검사는 다음을 확인합니다.

  • 스토리지 상태 파일이 있음
  • MSAL 액세스 토큰이 만료되지 않음(캔버스/Gen UX 테스트)
  • CRM 세션 쿠키가 있고 유효합니다(MDA 테스트)

tsconfig.json

파일은 tsconfig.json 테스트 패키지에 대한 TypeScript 컴파일 설정을 제어합니다.

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

.env 파일

.env 로컬 실행에 대한 환경 변수를 설정하는 파일 packages/e2e-tests/.env 입니다. 전체 참조는 환경 변수를 참조하세요.

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 스크립트

다음 npm 스크립트는 인증 및 테스트 실행에 사용할 수 있습니다 packages/e2e-tests/package.json .

Script 명령어 Description
auth:headful ts-node auth/auth-maker-portal.ts Power Apps 대한 대화형 인증(캔버스 테스트)
auth:mda:headful ts-node auth/auth-mda.ts 모델 기반 앱에 대한 대화형 인증
auth ts-node auth/auth-maker-portal.ts --headless 헤드리스 인증(CI)
auth:mda ts-node auth/auth-mda.ts --headless 헤드리스 모델 기반 앱 인증(CI)
test playwright test 모든 테스트 실행
test:ui playwright test --ui Playwright UI를 사용하여 실행
test:debug playwright test --debug 디버그 검사기를 사용하여 실행

다음 단계

참고하십시오