إشعار
يتطلب الوصول إلى هذه الصفحة تخويلاً. يمكنك محاولة تسجيل الدخول أو تغيير الدلائل.
يتطلب الوصول إلى هذه الصفحة تخويلاً. يمكنك محاولة تغيير الدلائل.
توثق هذه المقالة تكوين 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 |
تشغيل مع مفتش تتبع الأخطاء |