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'],
},
],
}); Свойства
зависимости
Список проектов, которые должны быть запущены перед запуском любого теста в этом проекте. Зависимости могут быть полезны для настройки глобальных действий настройки таким образом, чтобы каждое действие имело форму теста. Передача --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
Тип
-
Объект
-
timeoutчисло (необязательно)Время ожидания по умолчанию для асинхронных проверок соответствия в миллисекундах, по умолчанию 5000 мс.
-
toHaveScreenshotОбъект (необязательно)-
thresholdчисло (необязательно)Допустимое различие цветового восприятия между одинаковыми пикселями в сравниваемых изображениях, варьирующееся от
0(строго) до1(свободно)."pixelmatch"компаратор вычисляет различие цветов в цветовом пространстве YIQ и по умолчанию устанавливает значениеthresholdв0.2. -
maxDiffPixelsчисло (необязательно)Допустимое количество различных пикселей, по умолчанию не задано.
-
maxDiffPixelRatioчисло (необязательно)Допустимое отношение пикселей, отличающихся от общего количества пикселей, в диапазоне от
0до1, по умолчанию не задано. -
animations"разрешить" | "заблокировано" (необязательно)См. анимации в page.screenshot(). По умолчанию
"disabled". -
caret"скрыть" | "начальное" (необязательно)См. caret в page.screenshot(). По умолчанию
"hide". -
scale"css" | "устройство" (необязательно)См. масштаб в page.screenshot(). По умолчанию
"css". -
stylePathстрока | массив<строка> (необязательно)См. стиль в page.screenshot().
Настройка для метода expect(page).toHaveScreenshot().
-
-
toMatchSnapshotОбъект (необязательно)-
thresholdчисло (необязательно)Допустимое различие цветового восприятия между одинаковыми пикселями в сравниваемых изображениях, варьирующееся от
0(строго) до1(свободно)."pixelmatch"компаратор вычисляет различие цветов в цветовом пространстве YIQ и по умолчанию устанавливает значениеthresholdв0.2. -
maxDiffPixelsчисло (необязательно)Допустимое количество различных пикселей, по умолчанию не задано.
-
maxDiffPixelRatioчисло (необязательно)Допустимое отношение пикселей, отличающихся от общего количества пикселей, в диапазоне от
0до1, по умолчанию не задано.
Настройка для метода expect(value).toMatchSnapshot().
-
-
toPassОбъект (необязательно)-
timeoutчисло (необязательно)Время ожидания метода toPass в миллисекундах.
-
intervalsмассив<число> (необязательно)Интервалы зондирования для метода toPass в миллисекундах.
Настройка для метода expect(value).toPass().
-
-
полностьюПараллельно
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
Имя проекта отображается в отчёте и во время выполнения теста.
Использование
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(value).toMatchSnapshot().
Использование
import { defineConfig } from '@playwright/test';
export default defineConfig({
testDir: './tests',
snapshotPathTemplate: '{testDir}/__screenshots__/{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()иtoMatchSnapshot(); если вызов сделан без аргументов, это будет автоматически сгенерированное имя снимка.- Значение:
foo/bar/baz
- Значение:
-
{ext}- Расширение снимка (с точками)- Значение:
.png
- Значение:
-
{platform}- Значениеprocess.platform. -
{projectName}- Саннизированное имя проекта в файловой системе, если оно есть.- Значение:
''(пустая строка).
- Значение:
-
{snapshotDir}- testConfig.snapshotDir проекта.- Значение:
/home/playwright/tests(посколькуsnapshotDirне указан в конфигурации, он по умолчаниюtestDir)
- Значение:
-
{testDir}- testConfig.testDir проекта.- Значение:
/home/playwright/tests(абсолютный путь, так какtestDirрешен относительно директории с конфигурацией)
- Значение:
-
{testFileDir}- Директории в относительном пути отtestDirдо файла теста.- Значение:
page
- Значение:
-
{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
Тип
© 2024 Microsoft
Licensed under the Apache License, Version 2.0.
https://playwright.dev/docs/api/class-testproject