TestConfig
Playwright Test provides many options to configure how your tests are collected and executed, for example timeout
or testDir
. These options are described in the TestConfig object in the configuration file.
Playwright Test supports running multiple test projects at the same time. Project-specific options should be put to testConfig.projects, but top-level TestConfig can also define base options shared between all projects.
- TypeScript
- JavaScript
// playwright.config.tsimport { PlaywrightTestConfig } from '@playwright/test';
const config: PlaywrightTestConfig = { timeout: 30000, globalTimeout: 600000, reporter: 'list', testDir: './tests',};export default config;
// playwright.config.js// @ts-check
/** @type {import('@playwright/test').PlaywrightTestConfig} */const config = { timeout: 30000, globalTimeout: 600000, reporter: 'list', testDir: './tests',};
module.exports = config;
- testConfig.expect
- testConfig.forbidOnly
- testConfig.globalSetup
- testConfig.globalTeardown
- testConfig.globalTimeout
- testConfig.grep
- testConfig.grepInvert
- testConfig.maxFailures
- testConfig.metadata
- testConfig.outputDir
- testConfig.preserveOutput
- testConfig.projects
- testConfig.quiet
- testConfig.repeatEach
- testConfig.reporter
- testConfig.reportSlowTests
- testConfig.retries
- testConfig.shard
- testConfig.testDir
- testConfig.testIgnore
- testConfig.testMatch
- testConfig.timeout
- testConfig.updateSnapshots
- testConfig.use
- testConfig.workers
#
testConfig.expect- type: <Object>
Configuration for the expect
assertion library.
#
testConfig.forbidOnly- type: <boolean>
Whether to exit with an error if any tests or groups are marked as test.only(title, testFunction) or test.describe.only(title, callback). Useful on CI.
#
testConfig.globalSetup- type: <string>
Path to the global setup file. This file will be required and run before all the tests. It must export a single function that takes a [TestConfig
] argument.
Learn more about global setup and teardown.
- TypeScript
- JavaScript
// playwright.config.tsimport { PlaywrightTestConfig, devices } from '@playwright/test';
const config: PlaywrightTestConfig = { globalSetup: './global-setup',};export default config;
// playwright.config.js// @ts-check
/** @type {import('@playwright/test').PlaywrightTestConfig} */const config = { globalSetup: './global-setup',};
module.exports = config;
#
testConfig.globalTeardown- type: <string>
Path to the global teardown file. This file will be required and run after all the tests. It must export a single function. See also testConfig.globalSetup.
Learn more about global setup and teardown.
#
testConfig.globalTimeout- type: <number>
Maximum time in milliseconds the whole test suite can run. Zero timeout (default) disables this behavior. Useful on CI to prevent broken setup from running too long and wasting resources.
#
testConfig.grepFilter 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 in the command line with the -g
option.
grep
option is also useful for tagging tests.
#
testConfig.grepInvertFilter to only run tests with a title not matching one of the patterns. This is the opposite of testConfig.grep. Also available in the command line with the --grep-invert
option.
grepInvert
option is also useful for tagging tests.
#
testConfig.maxFailures- type: <number>
The maximum number of test failures for the whole test suite run. After reaching this number, testing will stop and exit with an error. Setting to zero (default) disables this behavior.
Also available in the command line with the --max-failures
and -x
options.
#
testConfig.metadata- type: <Object>
Any JSON-serializable metadata that will be put directly to the test report.
#
testConfig.outputDir- type: <string>
The output directory for files created during test execution. Defaults to test-results
.
This directory is cleaned at the start. When running a test, a unique subdirectory inside the testConfig.outputDir is created, guaranteeing that test running in parallel do not conflict. This directory can be accessed by testInfo.outputDir and testInfo.outputPath(pathSegments).
Here is an example that uses testInfo.outputPath(pathSegments) to create a temporary file.
- TypeScript
- JavaScript
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');});
const { test, expect } = require('@playwright/test');const fs = require('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.preserveOutput- type: <"always"|"never"|"failures-only">
Whether to preserve test output in the testConfig.outputDir. Defaults to 'always'
.
'always'
- preserve output for all tests;'never'
- do not preserve output for any tests;'failures-only'
- only preserve output for failed tests.
#
testConfig.projects- type: <Array<TestProject>>
Playwright Test supports running multiple test projects at the same time. See TestProject for more information.
#
testConfig.quiet- type: <boolean>
Whether to suppress stdio and stderr output from the tests.
#
testConfig.repeatEach- type: <number>
The number of times to repeat each test, useful for debugging flaky tests.
#
testConfig.reportSlowTests- type: <Object>
Whether to report slow tests. Pass null
to disable this feature.
Tests that took more than threshold
milliseconds are considered slow, and the slowest ones are reported, no more than max
number of them. Passing zero as max
reports all slow tests that exceed the threshold.
#
testConfig.reporterThe list of reporters to use. Each reporter can be:
- A builtin reporter name like
'list'
or'json'
. - A module name like
'my-awesome-reporter'
. - A relative path to the reporter like
'./reporters/my-awesome-reporter.js'
.
You can pass options to the reporter in a tuple like ['json', { outputFile: './report.json' }]
.
Learn more in the reporters guide.
- TypeScript
- JavaScript
// playwright.config.tsimport { PlaywrightTestConfig } from '@playwright/test';
const config: PlaywrightTestConfig = { reporter: 'line',};export default config;
// playwright.config.js// @ts-check
/** @type {import('@playwright/test').PlaywrightTestConfig} */const config = { reporter: 'line',};
module.exports = config;
#
testConfig.retries- type: <number>
The maximum number of retry attempts given to failed tests. Learn more about test retries.
#
testConfig.shard- type: <Object>
Shard tests and execute only the selected shard. Specify in the one-based form like { total: 5, current: 2 }
.
Learn more about parallelism and sharding with Playwright Test.
#
testConfig.testDir- type: <string>
Directory that will be recursively scanned for test files. Defaults to the directory of the configuration file.
#
testConfig.testIgnoreFiles 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.
#
testConfig.testMatchOnly 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 Test looks for files matching .*(test|spec)\.(js|ts|mjs)
.
#
testConfig.timeout- type: <number>
Timeout for each test in milliseconds. Defaults to 30 seconds.
This is a base timeout for all tests. In addition, each test can configure its own timeout with test.setTimeout(timeout).
#
testConfig.updateSnapshots- type: <"all"|"none"|"missing">
Whether to update expected snapshots with the actual results produced by the test run. Defaults to 'missing'
.
'all'
- All tests that are executed will update snapshots.'none'
- No snapshots are updated.'missing'
- Missing snapshots are created, for example when authoring a new test and running it for the first time. This is the default.
Learn more about snapshots.
#
testConfig.use- type: <TestOptions>
Global options for all tests, for example testOptions.browserName. Learn more about configuration and see available options.
- TypeScript
- JavaScript
// playwright.config.tsimport { PlaywrightTestConfig } from '@playwright/test';
const config: PlaywrightTestConfig = { use: { browserName: 'chromium', },};export default config;
// playwright.config.js// @ts-check
/** @type {import('@playwright/test').PlaywrightTestConfig} */const config = { use: { browserName: 'chromium', },};
module.exports = config;
#
testConfig.workers- type: <number>
The maximum number of concurrent worker processes to use for parallelizing tests.
Playwright Test uses worker processes to run tests. There is always at least one worker process, but more can be used to speed up test execution.
Defaults to one half of the number of CPU cores. Learn more about parallelism and sharding with Playwright Test.