कॉन्फ़िगरेशन संदर्भ

यह लेख नमूना परीक्षणों द्वारा उपयोग किए जाने वाले नाटककार कॉन्फ़िगरेशन का दस्तावेजीकरण करता है और बताता है कि इसे अपने स्वयं के वातावरण के लिए कैसे अनुकूलित किया जाए।

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 में परतदारपन को छिपा सकते हैं। क्षणिक नेटवर्क समस्याओं को संभालने के लिए 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/CD एकीकरण देखें।

projects

कैनवास और मॉडल-संचालित परीक्षण सुइट्स को अलग करने के लिए नाटककार परियोजनाओं का उपयोग करें। प्रत्येक परियोजना एक अलग भंडारण स्थिति का उपयोग कर सकती है:

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 एक्सेस टोकन की समय सीमा समाप्त नहीं हुई है (कैनवास/जेन UX परीक्षण)
  • सीआरएम सत्र कुकीज़ मौजूद और मान्य हैं (एमडीए परीक्षण)

tsconfig.json

फ़ाइल परीक्षण पैकेज के लिए TypeScript संकलन सेटिंग्स को नियंत्रित करती है tsconfig.json :

{
  "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 हैं:

लिपि Command विवरण
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 हेडलेस ऑथ (सीआई)
auth:mda ts-node auth/auth-mda.ts --headless हेडलेस मॉडल-चालित ऐप प्रमाणीकरण (सीआई)
test playwright test सभी परीक्षण चलाएँ
test:ui playwright test --ui Playwright UI के साथ चलाएँ
test:debug playwright test --debug डीबग इंस्पेक्टर के साथ चलाएं

अगले कदम

भी देखें