TestProject
Playwright Test поддерживает одновременный запуск нескольких тестовых проектов. Это полезно, когда тесты нужно запускать в нескольких конфигурациях. Например, можно запускать тесты в нескольких браузерах. Этот тип описывает формат проекта в файле конфигурации; чтобы получить разрешённые параметры конфигурации во время выполнения, используйте FullProject.
TestProject содержит конфигурацию, относящуюся к отдельному проекту. Проекты настраиваются в testConfig.projects, указанном в файле конфигурации. Обратите внимание, что все свойства TestProject доступны в объекте верхнего уровня TestConfig; в этом случае они будут общими для всех проектов.
Ниже приведён пример конфигурации, которая запускает каждый тест в Chromium, Firefox и WebKit, как в настольных, так и в мобильных версиях.
import { defineConfig, devices } from '@playwright/test';
export default defineConfig({
// Options shared for all projects.
timeout: 30000,
use: {
ignoreHTTPSErrors: true,
},
// Options specific to each project.
projects: [
{
name: 'chromium',
use: devices['Desktop Chrome'],
},
{
name: 'firefox',
use: devices['Desktop Firefox'],
},
{
name: 'webkit',
use: devices['Desktop Safari'],
},
{
name: 'Mobile Chrome',
use: devices['Pixel 5'],
},
{
name: 'Mobile Safari',
use: devices['iPhone 12'],
},
],
}); Свойства
dependencies
Список проектов, которые должны быть запущены до начала выполнения любого теста в этом проекте. Зависимости могут пригодиться для настройки действий глобальной инициализации таким образом, чтобы каждое действие выполнялось в форме теста. Передача аргумента --no-deps игнорирует зависимости и ведёт себя так, как если бы они не были указаны.
Использование зависимостей позволяет глобальной инициализации создавать трассировки и другие артефакты, отображать шаги настройки в отчёте о тестировании и т. д.
Использование
import { defineConfig } from '@playwright/test';
export default defineConfig({
projects: [
{
name: 'setup',
testMatch: /global.setup\.ts/,
},
{
name: 'chromium',
use: devices['Desktop Chrome'],
dependencies: ['setup'],
},
{
name: 'firefox',
use: devices['Desktop Firefox'],
dependencies: ['setup'],
},
{
name: 'webkit',
use: devices['Desktop Safari'],
dependencies: ['setup'],
},
],
}); Тип
expect
Конфигурация для библиотеки проверок expect.
Используйте testConfig.expect, чтобы изменить этот параметр для всех проектов.
Использование
testProject.expect
Тип
-
Object
-
timeoutnumber (необязательно)Тайм-аут по умолчанию для асинхронных средств сопоставления expect в миллисекундах; по умолчанию — 5000 мс.
-
toHaveScreenshotObject (необязательно)-
thresholdnumber (необязательно)Допустимая воспринимаемая разница в цвете одного и того же пикселя на сравниваемых изображениях: от
0(строгое сравнение) до1(сравнение с допуском). Компаратор"pixelmatch"вычисляет разницу в цветовом пространстве YIQ; значениеthresholdпо умолчанию равно0.2. -
maxDiffPixelsnumber (необязательно)Допустимое количество пикселей, которые могут отличаться; по умолчанию не задано.
-
maxDiffPixelRationumber (необязательно)Допустимая доля отличающихся пикселей от общего количества пикселей в диапазоне от
0до1; по умолчанию не задана. -
animations"allow" | "disabled" (необязательно)См. параметр animations метода page.screenshot(). По умолчанию —
"disabled". -
caret"hide" | "initial" (необязательно)См. параметр caret метода page.screenshot(). По умолчанию —
"hide". -
scale"css" | "device" (необязательно)См. параметр scale метода page.screenshot(). По умолчанию —
"css". -
stylePathstring | Array<string> (необязательно)См. параметр style метода page.screenshot().
-
pathTemplatestring (необязательно)Шаблон, определяющий расположение снимков экрана. Подробнее см. testProject.snapshotPathTemplate.
-
timeoutnumber (необязательно)Тайм-аут по умолчанию для expect(page).toHaveScreenshot() в миллисекундах; по умолчанию используется глобальный тайм-аут expect. Значение
0отключает тайм-аут.
Конфигурация метода expect(page).toHaveScreenshot().
-
-
toMatchAriaSnapshotObject (необязательно)-
pathTemplatestring (необязательно)Шаблон, определяющий расположение снимков доступности. Подробнее см. testProject.snapshotPathTemplate.
-
children"contain" | "equal" | "deep-equal" (необязательно)Определяет, как дочерние элементы корня снимка сопоставляются с фактическим деревом доступности. Это эквивалентно добавлению свойства
/childrenв начало каждого шаблона снимка aria. Отдельные снимки могут переопределить это значение, если включат явное свойство/children.
Конфигурация метода expect(locator).toMatchAriaSnapshot().
-
-
toMatchSnapshotObject (необязательно)-
thresholdnumber (необязательно)Допустимая воспринимаемая разница в цвете одного и того же пикселя на сравниваемых изображениях: от
0(строгое сравнение) до1(сравнение с допуском). Компаратор"pixelmatch"вычисляет разницу в цветовом пространстве YIQ; значениеthresholdпо умолчанию равно0.2. -
maxDiffPixelsnumber (необязательно)Допустимое количество пикселей, которые могут отличаться; по умолчанию не задано.
-
maxDiffPixelRationumber (необязательно)Допустимая доля отличающихся пикселей от общего количества пикселей в диапазоне от
0до1; по умолчанию не задана.
Конфигурация метода expect(value).toMatchSnapshot().
-
-
toPassObject (необязательно)-
timeoutnumber (необязательно)Тайм-аут метода toPass в миллисекундах.
-
intervalsArray<number> (необязательно)Интервалы проверки метода toPass в миллисекундах.
Конфигурация метода expect(value).toPass().
-
-
fullyParallel
Playwright Test запускает тесты параллельно. Для этого он запускает несколько рабочих процессов, которые работают одновременно. По умолчанию параллельно выполняются файлы тестов. Тесты в одном файле выполняются по порядку в одном рабочем процессе.
С помощью этого параметра можно настроить одновременный запуск всех тестов во всех файлах всего тестового проекта.
Использование
testProject.fullyParallel
Тип
grep
Фильтр, запускающий только тесты, заголовки которых соответствуют одному из шаблонов. Например, передача grep: /cart/ должна запускать только тесты, в заголовках которых есть слово "cart". Параметр также доступен глобально и в командной строке с параметром -g. Регулярное выражение проверяется относительно строки, состоящей из имени проекта, имени файла теста, имени test.describe (если есть), имени теста и тегов теста, разделённых пробелами, например chromium my-test.spec.ts my-suite my-test.
Параметр grep также полезен для добавления тегов к тестам.
Использование
testProject.grep
Тип
grepInvert
Фильтр, запускающий только тесты, заголовки которых не соответствуют ни одному из шаблонов. Это противоположно параметру testProject.grep. Параметр также доступен глобально и в командной строке с параметром --grep-invert.
Параметр grepInvert также полезен для добавления тегов к тестам.
Использование
testProject.grepInvert
Тип
ignoreSnapshots
Следует ли пропускать проверки снимков, такие как expect(value).toMatchSnapshot() и await expect(page).toHaveScreenshot().
Использование
Следующий пример выполняет проверки снимков экрана только в Chromium.
import { defineConfig } from '@playwright/test';
export default defineConfig({
projects: [
{
name: 'chromium',
use: devices['Desktop Chrome'],
},
{
name: 'firefox',
use: devices['Desktop Firefox'],
ignoreSnapshots: true,
},
{
name: 'webkit',
use: devices['Desktop Safari'],
ignoreSnapshots: true,
},
],
}); Тип
metadata
Метаданные, которые будут включены в отчёт о тестировании в формате JSON.
Использование
testProject.metadata
Тип
name
Имя проекта отображается в отчёте и во время выполнения тестов.
предупреждениеPlaywright выполняет файл конфигурации несколько раз. Не создавайте в конфигурации динамически изменяющиеся значения.
Использование
testProject.name
Тип
outputDir
Каталог для файлов, создаваемых во время выполнения тестов. По умолчанию — <package.json-directory>/test-results.
Этот каталог очищается при запуске. Для каждого теста создаётся уникальный подкаталог внутри testProject.outputDir, что гарантирует отсутствие конфликтов между тестами, выполняющимися параллельно. Доступ к этому каталогу можно получить через testInfo.outputDir и testInfo.outputPath().
Ниже приведён пример создания временного файла с помощью testInfo.outputPath().
import { test, expect } from '@playwright/test';
import fs from 'fs';
test('example test', async ({}, testInfo) => {
const file = testInfo.outputPath('temporary-file.txt');
await fs.promises.writeFile(file, 'Put some data to the file', 'utf8');
}); Используйте testConfig.outputDir, чтобы изменить этот параметр для всех проектов.
Использование
testProject.outputDir
Тип
repeatEach
Количество повторных запусков каждого теста; полезно для отладки нестабильных тестов.
Используйте testConfig.repeatEach, чтобы изменить этот параметр для всех проектов.
Использование
testProject.repeatEach
Тип
respectGitIgnore
Следует ли пропускать записи из .gitignore при поиске файлов тестов. По умолчанию, если ни testConfig.testDir, ни testProject.testDir не указаны явно, Playwright игнорирует все файлы тестов, соответствующие записям .gitignore. Этот параметр позволяет переопределить такое поведение.
Использование
testProject.respectGitIgnore
Тип
retries
Максимальное количество повторных попыток для неудачных тестов. Подробнее см. повторные запуски тестов.
Используйте test.describe.configure(), чтобы изменить количество повторных попыток для конкретного файла или группы тестов.
Используйте testConfig.retries, чтобы изменить этот параметр для всех проектов.
Использование
testProject.retries
Тип
snapshotDir
Базовый каталог относительно файла конфигурации для файлов снимков, созданных с помощью toMatchSnapshot. По умолчанию используется testProject.testDir.
Доступ к каталогу каждого теста можно получить через testInfo.snapshotDir и testInfo.snapshotPath().
Этот путь будет служить базовым каталогом для каталога снимков каждого файла теста. Если задать snapshotDir равным 'snapshots', значение testInfo.snapshotDir будет разрешаться в snapshots/a.spec.js-snapshots.
Использование
testProject.snapshotDir
Тип
snapshotPathTemplate
Этот параметр задаёт шаблон, определяющий расположение снимков, создаваемых с помощью expect(page).toHaveScreenshot(), expect(locator).toMatchAriaSnapshot() и expect(value).toMatchSnapshot().
Шаблоны для каждой проверки можно настроить отдельно в testConfig.expect.
Использование
import { defineConfig } from '@playwright/test';
export default defineConfig({
testDir: './tests',
// Single template for all assertions
snapshotPathTemplate: '{testDir}/__screenshots__/{testFilePath}/{arg}{ext}',
// Assertion-specific templates
expect: {
toHaveScreenshot: {
pathTemplate: '{testDir}/__screenshots__{/projectName}/{testFilePath}/{arg}{ext}',
},
toMatchAriaSnapshot: {
pathTemplate: '{testDir}/__snapshots__/{testFilePath}/{arg}{ext}',
},
},
}); Тип
Подробности
Значение может содержать специальные «токены», которые во время выполнения теста будут заменены фактическими значениями.
Рассмотрим следующую структуру файлов:
playwright.config.ts
tests/
└── page/
└── page-click.spec.ts И следующий page-click.spec.ts, использующий вызов toHaveScreenshot():
import { test, expect } from '@playwright/test';
test.describe('suite', () => {
test('test should work', async ({ page }) => {
await expect(page).toHaveScreenshot(['foo', 'bar', 'baz.png']);
});
}); Список поддерживаемых токенов:
-
{arg}— относительный путь к снимку без расширения. Он берётся из аргументов, переданных вtoHaveScreenshot(),toMatchAriaSnapshot()илиtoMatchSnapshot(); если вызов выполнен без аргументов, это будет автоматически созданное имя снимка.- Значение:
foo/bar/baz
- Значение:
-
{ext}— расширение файла снимка (с точкой в начале).- Значение:
.png
- Значение:
-
{platform}— значениеprocess.platform. -
{projectName}— имя проекта, очищенное для использования в файловой системе, если оно задано.- Значение:
''(пустая строка).
- Значение:
-
{snapshotDir}— testProject.snapshotDir проекта.- Значение:
/home/playwright/tests(посколькуsnapshotDirне указан в конфигурации, по умолчанию используетсяtestDir)
- Значение:
-
{testDir}— testProject.testDir проекта.- Значение:
/home/playwright/tests(абсолютный путь, посколькуtestDirразрешается относительно каталога с файлом конфигурации)
- Значение:
-
{testFileDir}— каталоги в относительном пути отtestDirдо файла теста.- Значение:
page
- Значение:
-
{testFileBaseName}— имя файла теста без последнего расширения.- Значение:
page-click.spec
- Значение:
-
{testFileName}— имя файла теста с расширением.- Значение:
page-click.spec.ts
- Значение:
-
{testFilePath}— относительный путь отtestDirдо файла теста.- Значение:
page/page-click.spec.ts
- Значение:
-
{testName}— заголовок теста, включая описания родительских блоков, но без имени файла; символы очищены для использования в файловой системе.- Значение:
suite-test-should-work
- Значение:
Перед каждым токеном можно указать один символ, который будет использоваться только если этот токен имеет непустое значение.
Рассмотрим следующую конфигурацию:
import { defineConfig } from '@playwright/test';
export default defineConfig({
snapshotPathTemplate: '__screenshots__{/projectName}/{testFilePath}/{arg}{ext}',
testMatch: 'example.spec.ts',
projects: [
{ use: { browserName: 'firefox' } },
{ name: 'chromium', use: { browserName: 'chromium' } },
],
}); В этой конфигурации:
- У первого проекта нет имени, поэтому его снимки будут сохранены в
<configDir>/__screenshots__/example.spec.ts/.... - У второго проекта есть имя, поэтому его снимки будут сохранены в
<configDir>/__screenshots__/chromium/example.spec.ts/... - Поскольку
snapshotPathTemplateразрешается в относительный путь, он будет разрешён относительноconfigDir. - Косые черты
"/"можно использовать в качестве разделителей путей на любой платформе.
teardown
Имя проекта, который должен запускаться после завершения этого проекта и всех зависимых от него проектов. Завершающая настройка полезна для очистки ресурсов, выделенных этим проектом.
Передача аргумента --no-deps игнорирует testProject.teardown и ведёт себя так, как если бы он не был указан.
Использование
Распространённый шаблон — зависимость «setup» с соответствующим ей «teardown»:
import { defineConfig } from '@playwright/test';
export default defineConfig({
projects: [
{
name: 'setup',
testMatch: /global.setup\.ts/,
teardown: 'teardown',
},
{
name: 'teardown',
testMatch: /global.teardown\.ts/,
},
{
name: 'chromium',
use: devices['Desktop Chrome'],
dependencies: ['setup'],
},
{
name: 'firefox',
use: devices['Desktop Firefox'],
dependencies: ['setup'],
},
{
name: 'webkit',
use: devices['Desktop Safari'],
dependencies: ['setup'],
},
],
}); Тип
testDir
Каталог, в котором рекурсивно выполняется поиск файлов тестов. По умолчанию используется каталог файла конфигурации.
Для каждого проекта можно указать отдельный каталог. Ниже приведён пример, в котором smoke-тесты запускаются в трёх браузерах, а все остальные тесты — в стабильной версии браузера Chrome.
import { defineConfig } from '@playwright/test';
export default defineConfig({
projects: [
{
name: 'Smoke Chromium',
testDir: './smoke-tests',
use: {
browserName: 'chromium',
}
},
{
name: 'Smoke WebKit',
testDir: './smoke-tests',
use: {
browserName: 'webkit',
}
},
{
name: 'Smoke Firefox',
testDir: './smoke-tests',
use: {
browserName: 'firefox',
}
},
{
name: 'Chrome Stable',
testDir: './',
use: {
browserName: 'chromium',
channel: 'chrome',
}
},
],
}); Используйте testConfig.testDir, чтобы изменить этот параметр для всех проектов.
Использование
testProject.testDir
Тип
testIgnore
Файлы, соответствующие одному из этих шаблонов, не запускаются как файлы тестов. Сопоставление выполняется по абсолютному пути к файлу. Строки интерпретируются как шаблоны glob.
Например, '**/test-assets/**' позволит игнорировать все файлы в каталоге test-assets.
Используйте testConfig.testIgnore, чтобы изменить этот параметр для всех проектов.
Использование
testProject.testIgnore
Тип
testMatch
Как файлы тестов запускаются только файлы, соответствующие одному из этих шаблонов. Сопоставление выполняется по абсолютному пути к файлу. Строки интерпретируются как шаблоны glob.
По умолчанию Playwright ищет файлы, соответствующие следующему шаблону glob: **/*.@(spec|test).?(c|m)[jt]s?(x). Это означает файлы JavaScript или TypeScript с суффиксом ".test" или ".spec", например login-screen.wrong-credentials.spec.ts.
Используйте testConfig.testMatch, чтобы изменить этот параметр для всех проектов.
Использование
testProject.testMatch
Тип
timeout
Тайм-аут для каждого теста в миллисекундах. По умолчанию — 30 секунд.
Это базовый тайм-аут для всех тестов. Для каждого теста можно настроить собственный тайм-аут с помощью test.setTimeout(). Для каждого файла или группы тестов можно настроить тайм-аут с помощью test.describe.configure().
Используйте testConfig.timeout, чтобы изменить этот параметр для всех проектов.
Использование
testProject.timeout
Тип
use
Параметры для всех тестов этого проекта, например testOptions.browserName. Подробнее см. настройку конфигурации и доступные параметры.
import { defineConfig } from '@playwright/test';
export default defineConfig({
projects: [
{
name: 'Chromium',
use: {
browserName: 'chromium',
},
},
],
}); Используйте testConfig.use, чтобы изменить этот параметр для всех проектов.
Использование
testProject.use
Тип
workers
Максимальное количество параллельно работающих процессов-исполнителей, используемых для параллельного запуска тестов этого проекта. Также можно задать в процентах от количества логических ядер ЦП, например '50%'.
Это может быть полезно, например, если все тесты проекта используют общий ресурс, такой как тестовая учётная запись, и поэтому не могут выполняться параллельно. Ограничение количества исполнителей до одного для такого проекта предотвратит одновременное использование общего ресурса.
Обратите внимание, что глобальное ограничение testConfig.workers применяется к общему количеству процессов-исполнителей. Однако Playwright ограничит количество исполнителей, используемых для этого проекта, значением testProject.workers.
По умолчанию для каждого проекта ограничение не установлено. Значение общего ограничения на количество исполнителей по умолчанию см. в разделе testConfig.workers.
Использование
import { defineConfig } from '@playwright/test';
export default defineConfig({
workers: 10, // total workers limit
projects: [
{
name: 'runs in parallel',
},
{
name: 'one at a time',
workers: 1, // workers limit for this project
},
],
}); Тип
© 2026 Microsoft
Licensed under the Apache License, Version 2.0.
https://playwright.dev/docs/api/class-testproject