TestProject
Source URL: https://playwright.dev/docs/api/class-testproject
TestProject | Playwright
섹션 제목: “TestProject | Playwright”Playwright Test supports running multiple test projects at the same time. This is useful for running tests in multiple configurations. For example, consider running tests against multiple browsers. This type describes format of a project in the configuration file, to access resolved configuration parameters at run time use FullProject.
TestProject encapsulates configuration specific to a single project. Projects are configured in testConfig.projects specified in the configuration file. Note that all properties of TestProject are available in the top-level TestConfig, in which case they are shared between all projects.
Here is an example configuration that runs every test in Chromium, Firefox and WebKit, both Desktop and Mobile versions.
playwright.config.ts
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'], }, ], });Properties
섹션 제목: “Properties”dependencies
섹션 제목: “dependencies”Added in: v1.31 testProject.dependencies
List of projects that need to run before any test in this project runs. Dependencies can be useful for configuring the global setup actions in a way that every action is in a form of a test. Passing --no-deps argument ignores the dependencies and behaves as if they were not specified.
Using dependencies allows global setup to produce traces and other artifacts, see the setup steps in the test report, etc.
Usage
playwright.config.ts
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'], }, ], });Type
expect
섹션 제목: “expect”Added in: v1.10 testProject.expect
Configuration for the expect assertion library.
Use testConfig.expect to change this option for all projects.
Usage
testProject.expectType
Default timeout for async expect matchers in milliseconds, defaults to 5000ms.
* `toHaveScreenshot` [Object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object "Object") _(optional)_
* `threshold` [number](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type "Number") _(optional)_an acceptable perceived color difference between the same pixel in compared images, ranging from 0 (strict) and 1 (lax). "pixelmatch" comparator computes color difference in YIQ color space and defaults threshold value to 0.2.
* `maxDiffPixels` [number](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type "Number") _(optional)_an acceptable amount of pixels that could be different, unset by default.
* `maxDiffPixelRatio` [number](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type "Number") _(optional)_an acceptable ratio of pixels that are different to the total amount of pixels, between 0 and 1 , unset by default.
* `animations` "allow" | "disabled" _(optional)_See animations in page.screenshot(). Defaults to "disabled".
* `caret` "hide" | "initial" _(optional)_See caret in page.screenshot(). Defaults to "hide".
* `scale` "css" | "device" _(optional)_See scale in page.screenshot(). Defaults to "css".
* `stylePath` [string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type "string") | [Array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array "Array")<[string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type "string")> _(optional)_See style in page.screenshot().
* `pathTemplate` [string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type "string") _(optional)_A template controlling location of the screenshots. See testProject.snapshotPathTemplate for details.
Configuration for the expect(page).toHaveScreenshot() method.
* `toMatchAriaSnapshot` [Object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object "Object") _(optional)_
* `pathTemplate` [string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type "string") _(optional)_A template controlling location of the aria snapshots. See testProject.snapshotPathTemplate for details.
Configuration for the expect(locator).toMatchAriaSnapshot() method.
* `toMatchSnapshot` [Object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object "Object") _(optional)_
* `threshold` [number](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type "Number") _(optional)_an acceptable perceived color difference between the same pixel in compared images, ranging from 0 (strict) and 1 (lax). "pixelmatch" comparator computes color difference in YIQ color space and defaults threshold value to 0.2.
* `maxDiffPixels` [number](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type "Number") _(optional)_an acceptable amount of pixels that could be different, unset by default.
* `maxDiffPixelRatio` [number](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type "Number") _(optional)_an acceptable ratio of pixels that are different to the total amount of pixels, between 0 and 1 , unset by default.
Configuration for the expect(value).toMatchSnapshot() method.
* `toPass` [Object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object "Object") _(optional)_
* `timeout` [number](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type "Number") _(optional)_timeout for toPass method in milliseconds.
* `intervals` [Array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array "Array")<[number](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type "Number")> _(optional)_probe intervals for toPass method in milliseconds.
Configuration for the expect(value).toPass() method.
fullyParallel
섹션 제목: “fullyParallel”Added in: v1.10 testProject.fullyParallel
Playwright Test runs tests in parallel. In order to achieve that, it runs several worker processes that run at the same time. By default, test files are run in parallel. Tests in a single file are run in order, in the same worker process.
You can configure entire test project to concurrently run all tests in all files using this option.
Usage
testProject.fullyParallelType
grep
섹션 제목: “grep”Added in: v1.10 testProject.grep
Filter to only run tests with a title matching one of the patterns. For example, passing grep: /cart/ should only run tests with “cart” in the title. Also available globally and in the command line with the -g option. The regular expression will be tested against the string that consists of the project name, the test file name, the test.describe name (if any), the test name and the test tags divided by spaces, e.g. chromium my-test.spec.ts my-suite my-test.
grep option is also useful for tagging tests.
Usage
testProject.grepType
grepInvert
섹션 제목: “grepInvert”Added in: v1.10 testProject.grepInvert
Filter to only run tests with a title not matching any of the patterns. This is the opposite of testProject.grep. Also available globally and in the command line with the --grep-invert option.
grepInvert option is also useful for tagging tests.
Usage
testProject.grepInvertType
ignoreSnapshots
섹션 제목: “ignoreSnapshots”Added in: v1.44 testProject.ignoreSnapshots
Whether to skip snapshot expectations, such as expect(value).toMatchSnapshot() and await expect(page).toHaveScreenshot().
Usage
The following example will only perform screenshot assertions on Chromium.
playwright.config.ts
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, }, ], });Type
metadata
섹션 제목: “metadata”Added in: v1.10 testProject.metadata
Metadata that will be put directly to the test report serialized as JSON.
Usage
testProject.metadataType
name
섹션 제목: “name”Added in: v1.10 testProject.name
Project name is visible in the report and during test execution.
warning
Playwright executes the configuration file multiple times. Do not dynamically produce non-stable values in your configuration.
Usage
testProject.nameType
outputDir
섹션 제목: “outputDir”Added in: v1.10 testProject.outputDir
The output directory for files created during test execution. Defaults to <package.json-directory>/test-results.
This directory is cleaned at the start. When running a test, a unique subdirectory inside the testProject.outputDir is created, guaranteeing that test running in parallel do not conflict. This directory can be accessed by testInfo.outputDir and testInfo.outputPath().
Here is an example that uses testInfo.outputPath() to create a temporary file.
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'); });Use testConfig.outputDir to change this option for all projects.
Usage
testProject.outputDirType
repeatEach
섹션 제목: “repeatEach”Added in: v1.10 testProject.repeatEach
The number of times to repeat each test, useful for debugging flaky tests.
Use testConfig.repeatEach to change this option for all projects.
Usage
testProject.repeatEachType
respectGitIgnore
섹션 제목: “respectGitIgnore”Added in: v1.45 testProject.respectGitIgnore
Whether to skip entries from .gitignore when searching for test files. By default, if neither testConfig.testDir nor testProject.testDir are explicitly specified, Playwright will ignore any test files matching .gitignore entries. This option allows to override that behavior.
Usage
testProject.respectGitIgnoreType
retries
섹션 제목: “retries”Added in: v1.10 testProject.retries
The maximum number of retry attempts given to failed tests. Learn more about test retries.
Use test.describe.configure() to change the number of retries for a specific file or a group of tests.
Use testConfig.retries to change this option for all projects.
Usage
testProject.retriesType
snapshotDir
섹션 제목: “snapshotDir”Added in: v1.10 testProject.snapshotDir
The base directory, relative to the config file, for snapshot files created with toMatchSnapshot. Defaults to testProject.testDir.
The directory for each test can be accessed by testInfo.snapshotDir and testInfo.snapshotPath().
This path will serve as the base directory for each test file snapshot directory. Setting snapshotDir to 'snapshots', the testInfo.snapshotDir would resolve to snapshots/a.spec.js-snapshots.
Usage
testProject.snapshotDirType
snapshotPathTemplate
섹션 제목: “snapshotPathTemplate”Added in: v1.28 testProject.snapshotPathTemplate
This option configures a template controlling location of snapshots generated by expect(page).toHaveScreenshot(), expect(locator).toMatchAriaSnapshot() and expect(value).toMatchSnapshot().
You can configure templates for each assertion separately in testConfig.expect.
Usage
playwright.config.ts
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}', }, }, });Type
Details
The value might include some “tokens” that will be replaced with actual values during test execution.
Consider the following file structure:
playwright.config.ts tests/ └── page/ └── page-click.spec.tsAnd the following page-click.spec.ts that uses toHaveScreenshot() call:
page-click.spec.ts
import { test, expect } from '@playwright/test';
test.describe('suite', () => { test('test should work', async ({ page }) => { await expect(page).toHaveScreenshot(['foo', 'bar', 'baz.png']); }); });The list of supported tokens:
{arg}- Relative snapshot path without extension. This comes from the arguments passed totoHaveScreenshot(),toMatchAriaSnapshot()ortoMatchSnapshot(); if called without arguments, this will be an auto-generated snapshot name.- Value:
foo/bar/baz
- Value:
{ext}- Snapshot extension (with the leading dot).- Value:
.png
- Value:
{platform}- The value ofprocess.platform.{projectName}- Project’s file-system-sanitized name, if any.- Value:
''(empty string).
- Value:
{snapshotDir}- Project’s testProject.snapshotDir.- Value:
/home/playwright/tests(sincesnapshotDiris not provided in config, it defaults totestDir)
- Value:
{testDir}- Project’s testProject.testDir.- Value:
/home/playwright/tests(absolute path sincetestDiris resolved relative to directory with config)
- Value:
{testFileDir}- Directories in relative path fromtestDirto test file.- Value:
page
- Value:
{testFileName}- Test file name with extension.- Value:
page-click.spec.ts
- Value:
{testFilePath}- Relative path fromtestDirto test file.- Value:
page/page-click.spec.ts
- Value:
{testName}- File-system-sanitized test title, including parent describes but excluding file name.- Value:
suite-test-should-work
- Value:
Each token can be preceded with a single character that will be used only if this token has non-empty value.
Consider the following config:
playwright.config.ts
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' } }, ], });In this config:
- First project does not have a name, so its snapshots will be stored in
<configDir>/__screenshots__/example.spec.ts/.... - Second project does have a name, so its snapshots will be stored in
<configDir>/__screenshots__/chromium/example.spec.ts/... - Since
snapshotPathTemplateresolves to relative path, it will be resolved relative toconfigDir. - Forward slashes
"/"can be used as path separators on any platform.
teardown
섹션 제목: “teardown”Added in: v1.34 testProject.teardown
Name of a project that needs to run after this and all dependent projects have finished. Teardown is useful to cleanup any resources acquired by this project.
Passing --no-deps argument ignores testProject.teardown and behaves as if it was not specified.
Usage
A common pattern is a “setup” dependency that has a corresponding “teardown”:
playwright.config.ts
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'], }, ], });Type
testDir
섹션 제목: “testDir”Added in: v1.10 testProject.testDir
Directory that will be recursively scanned for test files. Defaults to the directory of the configuration file.
Each project can use a different directory. Here is an example that runs smoke tests in three browsers and all other tests in stable Chrome browser.
playwright.config.ts
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', } }, ], });Use testConfig.testDir to change this option for all projects.
Usage
testProject.testDirType
testIgnore
섹션 제목: “testIgnore”Added in: v1.10 testProject.testIgnore
Files matching one of these patterns are not executed as test files. Matching is performed against the absolute file path. Strings are treated as glob patterns.
For example, '**/test-assets/**' will ignore any files in the test-assets directory.
Use testConfig.testIgnore to change this option for all projects.
Usage
testProject.testIgnoreType
testMatch
섹션 제목: “testMatch”Added in: v1.10 testProject.testMatch
Only the files matching one of these patterns are executed as test files. Matching is performed against the absolute file path. Strings are treated as glob patterns.
By default, Playwright looks for files matching the following glob pattern: **/*.@(spec|test).?(c|m)[jt]s?(x). This means JavaScript or TypeScript files with ".test" or ".spec" suffix, for example login-screen.wrong-credentials.spec.ts.
Use testConfig.testMatch to change this option for all projects.
Usage
testProject.testMatchType
timeout
섹션 제목: “timeout”Added in: v1.10 testProject.timeout
Timeout for each test in milliseconds. Defaults to 30 seconds.
This is a base timeout for all tests. Each test can configure its own timeout with test.setTimeout(). Each file or a group of tests can configure the timeout with test.describe.configure().
Use testConfig.timeout to change this option for all projects.
Usage
testProject.timeoutType
Added in: v1.10 testProject.use
Options for all tests in this project, for example testOptions.browserName. Learn more about configuration and see available options.
playwright.config.ts
import { defineConfig } from '@playwright/test';
export default defineConfig({ projects: [ { name: 'Chromium', use: { browserName: 'chromium', }, }, ], });Use testConfig.use to change this option for all projects.
Usage
testProject.useType
workers
섹션 제목: “workers”Added in: v1.52 testProject.workers
The maximum number of concurrent worker processes to use for parallelizing tests from this project. Can also be set as percentage of logical CPU cores, e.g. '50%'.
This could be useful, for example, when all tests from a project share a single resource like a test account, and therefore cannot be executed in parallel. Limiting workers to one for such a project will prevent simultaneous use of the shared resource.
Note that the global testConfig.workers limit applies to the total number of worker processes. However, Playwright will limit the number of workers used for this project by the value of testProject.workers.
By default, there is no limit per project. See testConfig.workers for the default of the total worker limit.
Usage
playwright.config.ts
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 }, ], });Type