测试配置
简介
Playwright提供了许多选项来配置测试的运行方式。您可以在配置文件中指定这些选项。请注意,测试运行器选项是顶级的,不要将它们放在use
部分中。
基础配置
以下是一些最常见的配置选项。
import { defineConfig, devices } from '@playwright/test';
export default defineConfig({
// Look for test files in the "tests" directory, relative to this configuration file.
testDir: 'tests',
// Run all tests in parallel.
fullyParallel: true,
// Fail the build on CI if you accidentally left test.only in the source code.
forbidOnly: !!process.env.CI,
// Retry on CI only.
retries: process.env.CI ? 2 : 0,
// Opt out of parallel tests on CI.
workers: process.env.CI ? 1 : undefined,
// Reporter to use
reporter: 'html',
use: {
// Base URL to use in actions like `await page.goto('/')`.
baseURL: 'http://localhost:3000',
// Collect trace when retrying the failed test.
trace: 'on-first-retry',
},
// Configure projects for major browsers.
projects: [
{
name: 'chromium',
use: { ...devices['Desktop Chrome'] },
},
],
// Run your local dev server before starting the tests.
webServer: {
command: 'npm run start',
url: 'http://localhost:3000',
reuseExistingServer: !process.env.CI,
},
});
Option | Description |
---|---|
testConfig.forbidOnly | Whether to exit with an error if any tests are marked as test.only . Useful on CI. |
testConfig.fullyParallel | have all tests in all files to run in parallel. See Parallelism and Sharding for more details. |
testConfig.projects | Run tests in multiple configurations or on multiple browsers |
testConfig.reporter | Reporter to use. See Test Reporters to learn more about which reporters are available. |
testConfig.retries | The maximum number of retry attempts per test. See Test Retries to learn more about retries. |
testConfig.testDir | Directory with the test files. |
testConfig.use | Options with use{} |
testConfig.webServer | To launch a server during the tests, use the webServer option |
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%'. . See Parallelism and Sharding for more details. |
测试筛选
通过全局模式或正则表达式过滤测试。
playwright.config.ts
import { defineConfig } from '@playwright/test';
export default defineConfig({
// Glob patterns or regular expressions to ignore test files.
testIgnore: '*test-assets',
// Glob patterns or regular expressions that match test files.
testMatch: '*todo-tests/*.spec.ts',
});
Option | Description |
---|---|
testConfig.testIgnore | Glob patterns or regular expressions that should be ignored when looking for the test files. For example, '*test-assets' |
testConfig.testMatch | Glob patterns or regular expressions that match test files. For example, '*todo-tests/*.spec.ts' . By default, Playwright runs .*(test|spec).(js|ts|mjs) files. |
高级配置
playwright.config.ts
import { defineConfig } from '@playwright/test';
export default defineConfig({
// Folder for test artifacts such as screenshots, videos, traces, etc.
outputDir: 'test-results',
// path to the global setup files.
globalSetup: require.resolve('./global-setup'),
// path to the global teardown files.
globalTeardown: require.resolve('./global-teardown'),
// Each test is given 30 seconds.
timeout: 30000,
});
选项 | 描述 |
---|---|
testConfig.globalSetup | 全局设置文件的路径。该文件将在所有测试之前被引入并运行。它必须导出一个单独的函数。 |
testConfig.globalTeardown | 全局拆卸文件的路径。该文件将在所有测试之后被引入并运行。它必须导出一个单独的函数。 |
testConfig.outputDir | 用于存储测试产物(如截图、视频、跟踪记录等)的文件夹。 |
testConfig.timeout | Playwright为每个测试强制执行一个timeout,默认为30秒。测试函数、测试夹具和beforeEach钩子所花费的时间都计入测试超时。 |
期望选项
expect断言库的配置。
playwright.config.ts
import { defineConfig } from '@playwright/test';
export default defineConfig({
expect: {
// Maximum time expect() should wait for the condition to be met.
timeout: 5000,
toHaveScreenshot: {
// An acceptable amount of pixels that could be different, unset by default.
maxDiffPixels: 10,
},
toMatchSnapshot: {
// An acceptable ratio of pixels that are different to the
// total amount of pixels, between 0 and 1.
maxDiffPixelRatio: 0.1,
},
},
});
Option | Description |
---|---|
testConfig.expect | Web first assertions like expect(locator).toHaveText() have a separate timeout of 5 seconds by default. This is the maximum time the expect() should wait for the condition to be met. Learn more about test and expect timeouts and how to set them for a single test. |
expect(page).toHaveScreenshot() | Configuration for the expect(locator).toHaveScreenshot() method. |
expect(value).toMatchSnapshot() | Configuration for the expect(locator).toMatchSnapshot() method. |