TestConfig
Playwright Test предоставляет множество опций для настройки сбора и выполнения тестов, например timeout или testDir. Эти опции описаны в объекте TestConfig в файле конфигурации. Этот тип описывает формат файла конфигурации, чтобы получить доступ к разрешённым параметрам конфигурации во время выполнения, используйте FullConfig.
Playwright Test поддерживает одновременное выполнение нескольких проектов тестов. Проекто-специфичные опции должны быть размещены в testConfig.projects, но верхнеуровневый TestConfig также может определить базовые опции, общие для всех проектов.
import { defineConfig } from '@playwright/test';
export default defineConfig({
timeout: 30000,
globalTimeout: 600000,
reporter: 'list',
testDir: './tests',
}); Свойства
build
Настройка транспилятора Playwright.
Использование
import { defineConfig } from '@playwright/test';
export default defineConfig({
build: {
external: ['**/*bundle.js'],
},
}); Тип
expect
Настройка библиотеки утверждений expect. Узнайте больше о различных тайм-аутах.
Использование
import { defineConfig } from '@playwright/test';
export default defineConfig({
expect: {
timeout: 10000,
toMatchSnapshot: {
maxDiffPixels: 10,
},
},
}); Тип
-
Объект
-
timeoutчисло (необязательно)Значение тайм-аута по умолчанию для асинхронных проверочных матчеров в миллисекундах, по умолчанию 5000мс.
-
toHaveScreenshotОбъект (необязательно)-
animations"allow" | "disabled" (необязательно)См. анимации в page.screenshot(). По умолчанию
"disabled". -
caret"hide" | "initial" (необязательно)См. caret в page.screenshot(). По умолчанию
"hide". -
maxDiffPixelsчисло (необязательно)Допустимое количество пикселей, которые могут отличаться, по умолчанию не задано.
-
maxDiffPixelRatioчисло (необязательно)Допустимое соотношение пикселей, отличающихся от общего количества пикселей, от
0до1, по умолчанию не задано. -
scale"css" | "device" (необязательно)См. scale в page.screenshot(). По умолчанию
"css". -
stylePathстрока | массив<строка> (необязательно)См. style в page.screenshot().
-
thresholdчисло (необязательно)Допустимое воспринимаемое цветовое различие между одинаковыми пикселями в сравниваемых изображениях, от
0(строго) до1(свободно)."pixelmatch"компаратор вычисляет цветовое различие в цветовом пространстве YIQ и по умолчанию устанавливает значениеthresholdв0.2.
Настройка для метода expect(page).toHaveScreenshot().
-
-
toMatchSnapshotОбъект (необязательно)-
maxDiffPixelsчисло (необязательно)Допустимое количество пикселей, которые могут отличаться, по умолчанию не задано.
-
maxDiffPixelRatioчисло (необязательно)Допустимое соотношение пикселей, отличающихся от общего количества пикселей, от
0до1, по умолчанию не задано. -
thresholdчисло (необязательно)Допустимое воспринимаемое цветовое различие между одинаковыми пикселями в сравниваемых изображениях, от
0(строго) до1(свободно)."pixelmatch"компаратор вычисляет цветовое различие в цветовом пространстве YIQ и по умолчанию устанавливает значениеthresholdв0.2.
Настройка для метода expect(value).toMatchSnapshot().
-
-
toPassОбъект (необязательно)-
intervalsМассив<число> (необязательно)Интервалы зондирования для метода toPass в миллисекундах.
-
timeoutчисло (необязательно)Тайм-аут для метода toPass в миллисекундах.
Настройка для метода expect(value).toPass().
-
-
forbidOnly
Выход с ошибкой, если какие-либо тесты или группы помечены как test.only() или test.describe.only(). Полезно на CI.
Использование
import { defineConfig } from '@playwright/test';
export default defineConfig({
forbidOnly: !!process.env.CI,
}); Тип
fullyParallel
Playwright Test выполняет тесты параллельно. Для этого он запускает несколько рабочих процессов, которые работают одновременно. По умолчанию, **файлы тестов** выполняются параллельно. Тесты в одном файле выполняются последовательно, в одном рабочем процессе.
Вы можете настроить весь запуск тестов для одновременного выполнения всех тестов во всех файлах, используя этот параметр.
Использование
import { defineConfig } from '@playwright/test';
export default defineConfig({
fullyParallel: true,
}); Тип
globalSetup
Путь к файлу глобальной настройки. Этот файл будет необходим и запущен перед всеми тестами. Он должен экспортировать одну функцию, принимающую аргумент FullConfig. Передайте массив путей, чтобы указать несколько файлов глобальной настройки.
Узнайте больше о глобальной настройке и разборке.
Использование
import { defineConfig } from '@playwright/test';
export default defineConfig({
globalSetup: './global-setup',
}); Тип
globalTeardown
Путь к файлу глобального разбора. Этот файл будет необходим и запущен после всех тестов. Он должен экспортировать одну функцию. См. также testConfig.globalSetup. Передайте массив путей, чтобы указать несколько файлов глобального разбора.
Узнайте больше о глобальной настройке и завершении.
Использование
import { defineConfig } from '@playwright/test';
export default defineConfig({
globalTeardown: './global-teardown',
}); Тип
globalTimeout
Максимальное время в миллисекундах, которое может выполняться весь набор тестов. Таймаут ноль (по умолчанию) отключает это поведение. Полезно на CI, чтобы предотвратить запуск некорректной настройки слишком долго и не тратить ресурсы. Узнайте больше о различных таймаутах.
Использование
import { defineConfig } from '@playwright/test';
export default defineConfig({
globalTimeout: process.env.CI ? 60 * 60 * 1000 : undefined,
}); Тип
grep
Фильтр для выполнения только тестов с названием, совпадающим с одним из шаблонов. Например, передача grep: /cart/ должна запускать только тесты с "cart" в названии. Также доступен в командной строке с параметром -g. Регулярное выражение будет проверено по строке, состоящей из имени проекта, имени файла теста, имени test.describe (если есть), имени теста и тегов теста, разделенных пробелами, например, chromium my-test.spec.ts my-suite my-test.
Параметр grep также полезен для тегов тестов.
Использование
import { defineConfig } from '@playwright/test';
export default defineConfig({
grep: /smoke/,
}); Тип
grepInvert
Фильтр для выполнения только тестов с названием, не совпадающим ни с одним из шаблонов. Это противоположность testConfig.grep. Также доступен в командной строке с параметром --grep-invert.
Параметр grepInvert также полезен для тегов тестов.
Использование
import { defineConfig } from '@playwright/test';
export default defineConfig({
grepInvert: /manual/,
}); Тип
ignoreSnapshots
Выполнять ли ожидания снимков, такие как expect(value).toMatchSnapshot() и await expect(page).toHaveScreenshot().
Использование
import { defineConfig } from '@playwright/test';
export default defineConfig({
ignoreSnapshots: !process.env.CI,
}); Тип
maxFailures
Максимальное количество ошибок теста для всего набора тестов. После достижения этого числа тестирование остановится и завершится с ошибкой. Значение ноль (по умолчанию) отключает это поведение.
Также доступен в командной строке с параметрами --max-failures и -x.
Использование
import { defineConfig } from '@playwright/test';
export default defineConfig({
maxFailures: process.env.CI ? 1 : 0,
}); Тип
metadata
Метаданные, которые будут помещены непосредственно в отчет о тесте, сериализованные как JSON.
Использование
import { defineConfig } from '@playwright/test';
export default defineConfig({
metadata: 'acceptance tests',
}); Тип
name
Имя конфигурации отображается в отчете и во время выполнения теста, если не переопределено testProject.name.
Использование
import { defineConfig } from '@playwright/test';
export default defineConfig({
name: 'acceptance tests',
}); Тип
outputDir
Директория вывода для файлов, созданных во время выполнения теста. По умолчанию <package.json-directory>/test-results.
Использование
import { defineConfig } from '@playwright/test';
export default defineConfig({
outputDir: './test-results',
}); Тип
Подробности
Эта директория очищается в начале. При запуске теста создается уникальная поддиректория внутри testConfig.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');
}); preserveOutput
Сохранять ли выходные данные теста в testConfig.outputDir. По умолчанию 'always'.
-
'always'- сохранять выходные данные для всех тестов; -
'never'- не сохранять выходные данные ни для каких тестов; -
'failures-only'- сохранять выходные данные только для неудачных тестов.
Использование
import { defineConfig } from '@playwright/test';
export default defineConfig({
preserveOutput: 'always',
}); Тип
- "всегда" | "никогда" | "только_ошибки"
projects
Playwright Test поддерживает одновременный запуск нескольких проектов тестов. Смотрите TestProject для получения дополнительной информации.
Использование
import { defineConfig, devices } from '@playwright/test';
export default defineConfig({
projects: [
{ name: 'chromium', use: devices['Desktop Chrome'] }
]
}); Тип
quiet
Запретить ли вывод stdio и stderr от тестов.
Использование
import { defineConfig } from '@playwright/test';
export default defineConfig({
quiet: !!process.env.CI,
}); Тип
repeatEach
Количество повторений каждого теста, полезно для отладки нестабильных тестов.
Использование
import { defineConfig } from '@playwright/test';
export default defineConfig({
repeatEach: 3,
}); Тип
reportSlowTests
Отправлять ли отчет о медленных файлах тестов. Передайте null для отключения этой функции.
Использование
import { defineConfig } from '@playwright/test';
export default defineConfig({
reportSlowTests: null,
}); Тип
Подробности
Файлы тестов, которые заняли более threshold миллисекунд, считаются медленными, и самые медленные из них сообщаются, не более чем max количеством. Передача нуля как max отображает все файлы тестов, которые превышают пороговое значение.
reporter
Список используемых репортеров. Каждый репортер может быть:
- Встроенное имя репортера, например
'list'или'json'. - Имя модуля, например
'my-awesome-reporter'. - Относительный путь к репортеру, например
'./reporters/my-awesome-reporter.js'.
Вы можете передать параметры репортеру в кортеже, как ['json', { outputFile: './report.json' }].
Узнайте больше в руководстве по репортерам.
Использование
import { defineConfig } from '@playwright/test';
export default defineConfig({
reporter: 'line',
}); Тип
- строка | массив<объект> | "список" | "точка" | "линия" | "github" | "json" | "junit" | "null" | "html"
respectGitIgnore
Учитывать ли записи из .gitignore при поиске тестовых файлов. По умолчанию, если ни testConfig.testDir, ни testProject.testDir явно не указаны, Playwright проигнорирует все тестовые файлы, соответствующие .gitignore записям.
Использование
testConfig.respectGitIgnore
Тип
retries
Максимальное количество попыток повторного выполнения не пройденных тестов. По умолчанию, не пройденные тесты не повторяются. Узнайте больше о повторных выполнениях тестов.
Использование
import { defineConfig } from '@playwright/test';
export default defineConfig({
retries: 2,
}); Тип
shard
Разделить тесты и выполнить только выбранный фрагмент. Укажите в форме с основанием один, например, { total: 5, current: 2 }.
Узнайте больше о параллелизме и фрагментации с Playwright Test.
Использование
import { defineConfig } from '@playwright/test';
export default defineConfig({
shard: { total: 10, current: 3 },
}); Тип
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. - Обратные слеши
"/"могут использоваться в качестве разделителей пути на любой платформе.
testDir
Каталог, который будет рекурсивно сканироваться на наличие тестовых файлов. По умолчанию — каталог конфигурационного файла.
Использование
import { defineConfig } from '@playwright/test';
export default defineConfig({
testDir: './tests/playwright',
}); Тип
testIgnore
Файлы, соответствующие одному из этих шаблонов, не будут выполняться как тестовые файлы. Сопоставление выполняется с абсолютным путем к файлу. Строки рассматриваются как шаблоны глобов.
Например, '**/test-assets/**' проигнорирует все файлы в каталоге test-assets.
Использование
import { defineConfig } from '@playwright/test';
export default defineConfig({
testIgnore: '**/test-assets/**',
}); Тип
testMatch
Только файлы, соответствующие одному из этих шаблонов, будут выполняться как тестовые файлы. Сопоставление выполняется с абсолютным путем к файлу. Строки рассматриваются как шаблоны глобов.
По умолчанию Playwright ищет файлы, соответствующие следующему шаблону глобов: **/*.@(spec|test).?(c|m)[jt]s?(x). Это означает JavaScript или TypeScript файлы с ".test" или ".spec" расширением, например login-screen.wrong-credentials.spec.ts.
Использование
import { defineConfig } from '@playwright/test';
export default defineConfig({
testMatch: /.*\.e2e\.js/,
}); Тип
timeout
Таймаут для каждого теста в миллисекундах. По умолчанию 30 секунд.
Это базовый таймаут для всех тестов. Кроме того, каждый тест может настроить свой таймаут с помощью test.setTimeout(). Узнайте больше о различных таймаутах.
Использование
import { defineConfig } from '@playwright/test';
export default defineConfig({
timeout: 5 * 60 * 1000,
}); Тип
tsconfig
Путь к одиночному tsconfig, применимому ко всем импортированным файлам. По умолчанию, tsconfig для каждого импортированного файла ищется отдельно. Обратите внимание, что свойство tsconfig не имеет эффекта во время загрузки файла конфигурации или каких-либо его зависимостей. Игнорируется, когда задан параметр командной строки --tsconfig.
Использование
import { defineConfig } from '@playwright/test';
export default defineConfig({
tsconfig: './tsconfig.test.json',
}); Тип
updateSnapshots
Обновлять ли ожидаемые снимки фактическими результатами, полученными в ходе выполнения теста. По умолчанию 'missing'.
-
'all'- Все выполняемые тесты обновят снимки, которые не совпали. Совпадающие снимки не будут обновляться. -
'none'- Ни один снимок не обновляется. -
'missing'- Создаются отсутствующие снимки, например, при создании нового теста и его первом запуске. Это значение по умолчанию.
Дополнительную информацию об снимках см. здесь.
Использование
import { defineConfig } from '@playwright/test';
export default defineConfig({
updateSnapshots: 'missing',
}); Тип
- "all" | "none" | "missing"
use
Глобальные параметры для всех тестов, например, testOptions.browserName. Дополнительную информацию о конфигурации и доступных параметрах см. на странице TestOptions.
Использование
import { defineConfig } from '@playwright/test';
export default defineConfig({
use: {
browserName: 'chromium',
},
}); Тип
webServer
Запустить веб-сервер разработки (или несколько) во время тестов.
Использование
import { defineConfig } from '@playwright/test';
export default defineConfig({
webServer: {
command: 'npm run start',
url: 'http://127.0.0.1:3000',
timeout: 120 * 1000,
reuseExistingServer: !process.env.CI,
},
use: {
baseURL: 'http://localhost:3000/',
},
}); Теперь вы можете использовать относительный путь при навигации по странице:
import { test } from '@playwright/test';
test('test', async ({ page }) => {
// This will result in http://localhost:3000/foo
await page.goto('/foo');
}); Можно запустить несколько веб-серверов (или фоновых процессов):
import { defineConfig } from '@playwright/test';
export default defineConfig({
webServer: [
{
command: 'npm run start',
url: 'http://127.0.0.1:3000',
timeout: 120 * 1000,
reuseExistingServer: !process.env.CI,
},
{
command: 'npm run backend',
url: 'http://127.0.0.1:3333',
timeout: 120 * 1000,
reuseExistingServer: !process.env.CI,
}
],
use: {
baseURL: 'http://127.0.0.1:3000',
},
}); Тип
-
Объект | Массив<Объект>
-
commandстрокаКоманда оболочки для запуска. Например,
npm run start. -
cwdстрока (необязательно)Текущий рабочий каталог запущенного процесса, по умолчанию каталог файла конфигурации.
-
envОбъект<строка, строка> (необязательно)Переменные среды для команды,
process.envпо умолчанию. -
ignoreHTTPSErrorsбулево (необязательно)Игнорировать ли ошибки HTTPS при получении
url. По умолчаниюfalse. -
portчисло (необязательно)Порт, на котором ожидается появление вашего http-сервера. Он ждет, пока не примет подключения. Должен быть указан либо
port, либоurl. -
reuseExistingServerбулево (необязательно)Если true, будет повторно использоваться существующий сервер на
portилиurl, если доступен. Если на этомportилиurlнет работающего сервера, будет запущена команда для запуска нового сервера. Еслиfalse, произойдет ошибка, если существующий процесс прослушиваетportилиurl. Это обычно нужно установить в!process.env.CI, чтобы разрешить локальный сервер разработки при запуске тестов локально. -
stdout"pipe" | "ignore" (необязательно)Если
"pipe", stdout команды будет перенаправлен в stdout процесса. Если"ignore", stdout команды будет проигнорирован. По умолчанию"ignore". -
stderr"pipe" | "ignore" (необязательно)Перенаправлять ли stderr команды в stderr процесса или игнорировать. По умолчанию
"pipe". -
timeoutчисло (необязательно)Сколько времени ждать запуска процесса и его доступности в миллисекундах. По умолчанию 60000.
-
urlстрока (необязательно)URL на вашем http-сервере, который должен возвращать код состояния 2xx, 3xx, 400, 401, 402 или 403, когда сервер готов принять подключения. Перенаправления (коды состояния 3xx) отслеживаются, и проверяется новое местоположение. Должен быть указан либо
port, либоurl.
-
Подробности
Если указан порт, Playwright Test будет ждать его доступности по 127.0.0.1 или ::1, прежде чем запускать тесты. Если указан URL, Playwright Test будет ждать, пока URL не вернёт код состояния 2xx, 3xx, 400, 401, 402 или 403, прежде чем запускать тесты.
Для непрерывной интеграции вы можете использовать параметр reuseExistingServer: !process.env.CI, который не использует существующий сервер на CI. Чтобы увидеть stdout, можно установить переменную среды DEBUG=pw:webserver.
port (но не url) передаётся Playwright как testOptions.baseURL. Например, порт 8080 приводит к baseURL равно http://localhost:8080. Если webServer указан как массив, необходимо явно настроить baseURL (даже если в нём только один элемент).
примечаниеРекомендуется также указать testOptions.baseURL в конфигурации, чтобы тесты могли использовать относительные URL.
workers
Максимальное количество одновременных рабочих процессов для параллельного выполнения тестов. Также может быть задано в процентах от логических ядер процессора, например, '50%'..
Playwright Test использует рабочие процессы для выполнения тестов. Всегда есть как минимум один рабочий процесс, но можно использовать больше для ускорения выполнения тестов.
По умолчанию используется половина количества логических ядер процессора. Дополнительную информацию о параллелизме и фрагментации с Playwright Test см. здесь.
Использование
import { defineConfig } from '@playwright/test';
export default defineConfig({
workers: 3,
}); Тип
Устаревшее
snapshotDir
Не рекомендуетсяИспользуйте testConfig.snapshotPathTemplate для настройки путей к снимкам.
Базовый каталог, относительно файла конфигурации, для файлов снимков, созданных с toMatchSnapshot. По умолчанию testConfig.testDir.
Использование
import { defineConfig } from '@playwright/test';
export default defineConfig({
snapshotDir: './snapshots',
}); Тип
Подробности
Доступ к каталогу каждого теста осуществляется через testInfo.snapshotDir и testInfo.snapshotPath().
Этот путь будет служить базовым каталогом для каждого файла тестов каталога снимков. Установив snapshotDir в 'snapshots', testInfo.snapshotDir будет разрешён в snapshots/a.spec.js-snapshots.
© 2024 Microsoft
Licensed under the Apache License, Version 2.0.
https://playwright.dev/docs/api/class-testconfig