Бележка
Достъпът до тази страница изисква удостоверяване. Можете да опитате да влезете или да промените директориите.
Достъпът до тази страница изисква удостоверяване. Можете да опитате да промените директориите.
Тази статия описва конфигурацията на 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
Повторни опити могат да маскират flakiness в CI. Използвайте retries: 1 в CI, за да се справите с преходни мрежови проблеми. Настройте 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 удостоверяване и тестово изпълнение:
| Сценарий | 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 |
Безглаво удостоверяване (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 |
Изпълнение с инспектор за отстраняване на грешки |