Spec-Zone.ru › Playwright

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'],
  },
});

Тип

  • Объект
    • external Массив<строка> (необязательно)

      Пути для исключения из транспиляции, выраженные как список шаблонов glob. Обычно здесь перечислены объёмные 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/,
});

Тип

  • RegExp | Массив<RegExp>

grepInvert​

Фильтр для выполнения только тестов с названием, не совпадающим ни с одним из шаблонов. Это противоположность testConfig.grep. Также доступен в командной строке с параметром --grep-invert.

Параметр grepInvert также полезен для тегов тестов.

Использование

import { defineConfig } from '@playwright/test';

export default defineConfig({
  grepInvert: /manual/,
});

Тип

  • RegExp | Массив<RegExp>

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'] }
  ]
});

Тип

  • Массив<TestProject>

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,
});

Тип

  • null | объект
    • max число

      Максимальное количество медленных файлов тестов для отчета. По умолчанию 5.

    • threshold число

      Длительность теста в миллисекундах, которая считается медленной. По умолчанию 15 секунд.

Подробности

Файлы тестов, которые заняли более 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"
    • 0 строка

      Имя репортера или модуля или путь к файлу

    • 1 объект

      Объект с параметрами репортера, если они есть

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 },
});

Тип

  • null | объект
    • current число

      Индекс фрагмента для выполнения, с основанием один.

    • total число

      Общее количество фрагментов.

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' } },
  ],
});

В этой конфигурации:

  1. Первый проект не имеет имени, поэтому его снимки будут храниться в <configDir>/__screenshots__/example.spec.ts/....
  2. Второй проект имеет имя, поэтому его снимки будут храниться в <configDir>/__screenshots__/chromium/example.spec.ts/...
  3. Так как snapshotPathTemplate разрешается как относительный путь, он будет разрешен относительно configDir.
  4. Обратные слеши "/" могут использоваться в качестве разделителей пути на любой платформе.

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',
  },
});

Тип

  • TestOptions

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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API