Spec-Zone.ru › Playwright

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

Тип

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

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

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

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

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

Тип

  • строка | RegExp | Массив<строка | RegExp>

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

Тип

  • строка | RegExp | Массив<строка | RegExp>

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

Тип

  • TestOptions

© 2024 Microsoft
Licensed under the Apache License, Version 2.0.
https://playwright.dev/docs/api/class-testproject

Spec-Zone.ru

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