TestConfig | Playwright (original) (raw)

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. This type describes format of the configuration file, to access resolved configuration parameters at run time use FullConfig.

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.

playwright.config.ts


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

export default defineConfig({

  timeout: 30000,

  globalTimeout: 600000,

  reporter: 'list',

  testDir: './tests',

});


Properties

build

Added in: v1.35

testConfig.build

Playwright transpiler configuration.

Usage

playwright.config.ts


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

export default defineConfig({

  build: {

    external: ['**/*bundle.js'],

  },

});

Type


captureGitInfo

Added in: v1.51

testConfig.captureGitInfo

These settings control whether git information is captured and stored in the config testConfig.metadata.

Usage

playwright.config.ts


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

export default defineConfig({

  captureGitInfo: { commit: true, diff: true }

});

Type

Details

note

Default values for these settings depend on the environment. When tests run as a part of CI where it is safe to obtain git information, the default value is true, false otherwise.

note

The structure of the git commit metadata is subject to change.


expect

Added in: v1.10

testConfig.expect

Configuration for the expect assertion library. Learn more about various timeouts.

Usage

playwright.config.ts


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

export default defineConfig({

  expect: {

    timeout: 10000,

    toMatchSnapshot: {

      maxDiffPixels: 10,

    },

  },

});

Type


failOnFlakyTests

Added in: v1.52

testConfig.failOnFlakyTests

Whether to exit with an error if any tests are marked as flaky. Useful on CI.

Also available in the command line with the --fail-on-flaky-tests option.

Usage

playwright.config.ts


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

export default defineConfig({

  failOnFlakyTests: !!process.env.CI,

});

Type


forbidOnly

Added in: v1.10

testConfig.forbidOnly

Whether to exit with an error if any tests or groups are marked as test.only() or test.describe.only(). Useful on CI.

Usage

playwright.config.ts


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

export default defineConfig({

  forbidOnly: !!process.env.CI,

});

Type


fullyParallel

Added in: v1.20

testConfig.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 run to concurrently execute all tests in all files using this option.

Usage

playwright.config.ts


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

export default defineConfig({

  fullyParallel: true,

});

Type


globalSetup

Added in: v1.10

testConfig.globalSetup

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 FullConfig argument. Pass an array of paths to specify multiple global setup files.

Learn more about global setup and teardown.

Usage

playwright.config.ts


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

export default defineConfig({

  globalSetup: './global-setup',

});

Type


globalTeardown

Added in: v1.10

testConfig.globalTeardown

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. Pass an array of paths to specify multiple global teardown files.

Learn more about global setup and teardown.

Usage

playwright.config.ts


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

export default defineConfig({

  globalTeardown: './global-teardown',

});

Type


globalTimeout

Added in: v1.10

testConfig.globalTimeout

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. Learn more about various timeouts.

Usage

playwright.config.ts


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

export default defineConfig({

  globalTimeout: process.env.CI ? 60 * 60 * 1000 : undefined,

});

Type


grep

Added in: v1.10

testConfig.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 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

playwright.config.ts


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

export default defineConfig({

  grep: /smoke/,

});

Type


grepInvert

Added in: v1.10

testConfig.grepInvert

Filter 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.

Usage

playwright.config.ts


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

export default defineConfig({

  grepInvert: /manual/,

});

Type


ignoreSnapshots

Added in: v1.26

testConfig.ignoreSnapshots

Whether to skip snapshot expectations, such as expect(value).toMatchSnapshot() and await expect(page).toHaveScreenshot().

Usage

playwright.config.ts


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

export default defineConfig({

  ignoreSnapshots: !process.env.CI,

});

Type


maxFailures

Added in: v1.10

testConfig.maxFailures

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.

Usage

playwright.config.ts


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

export default defineConfig({

  maxFailures: process.env.CI ? 1 : 0,

});

Type


metadata

Added in: v1.10

testConfig.metadata

Metadata contains key-value pairs to be included in the report. For example, the JSON report will include metadata serialized as JSON.

Usage

playwright.config.ts


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

export default defineConfig({

  metadata: { title: 'acceptance tests' },

});

Type


name

Added in: v1.10

testConfig.name

Config name is visible in the report and during test execution, unless overridden by testProject.name.

Usage

playwright.config.ts


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

export default defineConfig({

  name: 'acceptance tests',

});

Type


outputDir

Added in: v1.10

testConfig.outputDir

The output directory for files created during test execution. Defaults to <package.json-directory>/test-results.

Usage

playwright.config.ts


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

export default defineConfig({

  outputDir: './test-results',

});

Type

Details

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().

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

});


preserveOutput

Added in: v1.10

testConfig.preserveOutput

Whether to preserve test output in the testConfig.outputDir. Defaults to 'always'.

Usage

playwright.config.ts


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

export default defineConfig({

  preserveOutput: 'always',

});

Type


projects

Added in: v1.10

testConfig.projects

Playwright Test supports running multiple test projects at the same time. See TestProject for more information.

Usage

playwright.config.ts


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

export default defineConfig({

  projects: [

    { name: 'chromium', use: devices['Desktop Chrome'] }

  ]

});

Type


quiet

Added in: v1.10

testConfig.quiet

Whether to suppress stdio and stderr output from the tests.

Usage

playwright.config.ts


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

export default defineConfig({

  quiet: !!process.env.CI,

});

Type


repeatEach

Added in: v1.10

testConfig.repeatEach

The number of times to repeat each test, useful for debugging flaky tests.

Usage

playwright.config.ts


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

export default defineConfig({

  repeatEach: 3,

});

Type


reportSlowTests

Added in: v1.10

testConfig.reportSlowTests

Whether to report slow test files. Pass null to disable this feature.

Usage

playwright.config.ts


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

export default defineConfig({

  reportSlowTests: null,

});

Type

Details

Test files 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 test files that exceed the threshold.


reporter

Added in: v1.10

testConfig.reporter

The list of reporters to use. Each reporter can be:

You can pass options to the reporter in a tuple like ['json', { outputFile: './report.json' }]. If the property is not specified, Playwright uses the 'dot' reporter when the CI environment variable is set, and the 'list' reporter otherwise.

Learn more in the reporters guide.

Usage

playwright.config.ts


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

export default defineConfig({

  reporter: 'line',

});

Type


respectGitIgnore

Added in: v1.45

testConfig.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.

Usage


testConfig.respectGitIgnore

Type


retries

Added in: v1.10

testConfig.retries

The maximum number of retry attempts given to failed tests. By default failing tests are not retried. Learn more about test retries.

Usage

playwright.config.ts


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

export default defineConfig({

  retries: 2,

});

Type


shard

Added in: v1.10

testConfig.shard

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.

Usage

playwright.config.ts


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

export default defineConfig({

  shard: { total: 10, current: 3 },

});

Type


snapshotPathTemplate

Added in: v1.28

testConfig.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.ts

And 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:

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:

  1. First project does not have a name, so its snapshots will be stored in <configDir>/__screenshots__/example.spec.ts/....
  2. Second project does have a name, so its snapshots will be stored in <configDir>/__screenshots__/chromium/example.spec.ts/...
  3. Since snapshotPathTemplate resolves to relative path, it will be resolved relative to configDir.
  4. Forward slashes "/" can be used as path separators on any platform.

tag

Added in: v1.57

testConfig.tag

Tag or tags prepended to each test in the report. Useful for tagging your test run to differentiate between CI environments.

Note that each tag must start with @ symbol. Learn more about tagging.

Usage

playwright.config.ts


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

export default defineConfig({

  tag: process.env.CI_ENVIRONMENT_NAME,  // for example "@APIv2"

});

Type


testDir

Added in: v1.10

testConfig.testDir

Directory that will be recursively scanned for test files. Defaults to the directory of the configuration file.

Usage

playwright.config.ts


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

export default defineConfig({

  testDir: './tests/playwright',

});

Type


testIgnore

Added in: v1.10

testConfig.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.

Usage

playwright.config.ts


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

export default defineConfig({

  testIgnore: '**/test-assets/**',

});

Type


testMatch

Added in: v1.10

testConfig.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.

Usage

playwright.config.ts


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

export default defineConfig({

  testMatch: /.*\.e2e\.js/,

});

Type


timeout

Added in: v1.10

testConfig.timeout

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(). Learn more about various timeouts.

Usage

playwright.config.ts


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

export default defineConfig({

  timeout: 5 * 60 * 1000,

});

Type


tsconfig

Added in: v1.49

testConfig.tsconfig

Path to a single tsconfig applicable to all imported files. By default, tsconfig for each imported file is looked up separately. Note that tsconfig property has no effect while the configuration file or any of its dependencies are loaded. Ignored when --tsconfig command line option is specified.

Usage

playwright.config.ts


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

export default defineConfig({

  tsconfig: './tsconfig.test.json',

});

Type


updateSnapshots

Added in: v1.10

testConfig.updateSnapshots

Whether to update expected snapshots with the actual results produced by the test run. Defaults to 'missing'.

Learn more about snapshots.

Usage

playwright.config.ts


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

export default defineConfig({

  updateSnapshots: 'missing',

});

Type


updateSourceMethod

Added in: v1.50

testConfig.updateSourceMethod

Defines how to update snapshots in the source code.

Usage


testConfig.updateSourceMethod

Type


use

Added in: v1.10

testConfig.use

Global options for all tests, for example testOptions.browserName. Learn more about configuration and see available options.

Usage

playwright.config.ts


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

export default defineConfig({

  use: {

    browserName: 'chromium',

  },

});

Type


webServer

Added in: v1.10

testConfig.webServer

Launch a development web server (or multiple) during the tests.

Usage

playwright.config.ts


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

export default defineConfig({

  webServer: {

    command: 'npm run start',

    url: 'http://localhost:3000',

    timeout: 120 * 1000,

    reuseExistingServer: !process.env.CI,

  },

  use: {

    baseURL: 'http://localhost:3000/',

  },

});

Now you can use a relative path when navigating the page:

test.spec.ts


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

test('test', async ({ page }) => {

  // This will result in http://localhost:3000/foo

  await page.goto('/foo');

});

Multiple web servers (or background processes) can be launched:

playwright.config.ts


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

export default defineConfig({

  webServer: [

    {

      command: 'npm run start',

      url: 'http://localhost:3000',

      name: 'Frontend',

      timeout: 120 * 1000,

      reuseExistingServer: !process.env.CI,

    },

    {

      command: 'npm run backend',

      url: 'http://localhost:3333',

      name: 'Backend',

      timeout: 120 * 1000,

      reuseExistingServer: !process.env.CI,

    }

  ],

  use: {

    baseURL: 'http://localhost:3000',

  },

});

If your webserver runs on varying ports, use wait to capture the port:


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

export default defineConfig({

  webServer: {

    command: 'npm run start',

    wait: {

      stdout: /Listening on port (?<my_server_port>\d+)/

    },

  },

});


import { test, expect } from '@playwright/test';

test.use({ baseUrl: `http://localhost:${process.env.MY_SERVER_PORT ?? 3000}` });

test('homepage', async ({ page }) => {

  await page.goto('/');

});

Type

Details

If the port is specified, Playwright Test will wait for it to be available on 127.0.0.1 or ::1, before running the tests. If the url is specified, Playwright Test will wait for the URL to return a 2xx, 3xx, 400, 401, 402, or 403 status code before running the tests.

For continuous integration, you may want to use the reuseExistingServer: !process.env.CI option which does not use an existing server on the CI. To see the stdout, you can set the DEBUG=pw:webserver environment variable.

The port (but not the url) gets passed over to Playwright as a testOptions.baseURL. For example port 8080 produces baseURL equal http://localhost:8080. If webServer is specified as an array, you must explicitly configure the baseURL (even if it only has one entry).

note

It is also recommended to specify testOptions.baseURL in the config, so that tests could use relative urls.


workers

Added in: v1.10

testConfig.workers

The maximum number of concurrent worker processes to use for parallelizing tests. Can also be set as percentage of logical CPU cores, e.g. '50%'.

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 half of the number of logical CPU cores. Learn more about parallelism and sharding with Playwright Test.

Usage

playwright.config.ts


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

export default defineConfig({

  workers: 3,

});

Type


Deprecated

snapshotDir

Added in: v1.10

testConfig.snapshotDir

The base directory, relative to the config file, for snapshot files created with toMatchSnapshot. Defaults to testConfig.testDir.

Usage

playwright.config.ts


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

export default defineConfig({

  snapshotDir: './snapshots',

});

Type

Details

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.