مرجع التكوين

توثق هذه المقالة تكوين 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',
});

خيارات التكوين الرئيسية

تشرح الأقسام التالية أهم الإعدادات في ملف التكوين ومتى يتم تغييرها.

fullyParallel وworkers

تشترك اختبارات Power Platform في بيئة Dataverse واحدة. يؤدي تشغيل الاختبارات بالتوازي إلى إنشاء تعارضات في البيانات، مثل اختبارين يحذفان السجل نفسه. تعيين كلا الخيارين لتسلسل التنفيذ:

fullyParallel: false,
workers: 1,

ملحوظة

إذا كان لديك بيئات متعددة، يمكنك زيادة workers كل مشروع وعزله إلى بيئة مختلفة باستخدام ملفات منفصلة .env أو متغيرات على مستوى البيئة.

retries

يمكن أن تخفي عمليات إعادة المحاولة الخفقان في CI. استخدم retries: 1 في CI لمعالجة مشكلات الشبكة العابرة. قم بتعيين retries: 0 محليا للحصول على ملاحظات فورية:

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

trace، screenshot، video

التقاط التشخيصات فقط عند الفشل في توفير مساحة القرص:

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 (اختبارات canvas/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 للمصادقة وتنفيذ الاختبار:

برنامج نصي الأمر الوصف
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
test:debug playwright test --debug تشغيل مع مفتش تتبع الأخطاء

الخطوات التالية

راجع أيضًا