หมายเหตุ
การเข้าถึงหน้านี้ต้องได้รับการอนุญาต คุณสามารถลอง ลงชื่อเข้าใช้หรือเปลี่ยนไดเรกทอรีได้
การเข้าถึงหน้านี้ต้องได้รับการอนุญาต คุณสามารถลองเปลี่ยนไดเรกทอรีได้
บทความนี้จัดทําเอกสารการกําหนดค่า 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 ไม่หมดอายุ (การทดสอบพื้นที่ทํางาน/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 UI |
test:debug |
playwright test --debug |
เรียกใช้ด้วยตัวตรวจสอบดีบัก |