TestConfig
Playwright Test 提供了許多選項來配置測試的收集和執行方式,例如 timeout
或 testDir
。這些選項在TestConfig 物件的配置文件中描述。此類型描述配置文件的格式,要在執行時期訪問已解析的配置參數,請使用FullConfig。
Playwright Test 支援同時執行多個測試專案。專案特定的選項應放入testConfig.projects,但頂層的TestConfig 也可以定義所有專案之間共享的基本選項。
import { defineConfig } from '@playwright/test';
export default defineConfig({
timeout: 30000,
globalTimeout: 600000,
reporter: 'list',
testDir: './tests',
});
屬性
build
新增於:v1.35Playwright 轉譯器配置。
用法
import { defineConfig } from '@playwright/test';
export default defineConfig({
build: {
external: ['**/*bundle.js'],
},
});
類型
expect
新增於:v1.10expect
斷言庫的配置。了解更多關於各種超時的資訊。
用法
import { defineConfig } from '@playwright/test';
export default defineConfig({
expect: {
timeout: 10000,
toMatchSnapshot: {
maxDiffPixels: 10,
},
},
});
類型
- Object
-
timeout
number (選填)非同步 expect 匹配器的預設超時時間(毫秒),預設為 5000 毫秒。
-
toHaveScreenshot
Object (選填)-
animations
"allow" | "disabled" (選填)請參閱 animations 在 page.screenshot() 中的說明。預設為
"disabled"
。 -
caret
"hide" | "initial" (選填)請參閱 caret 在 page.screenshot() 中的說明。預設為
"hide"
。 -
maxDiffPixels
number (選填)可接受的不同像素數量,預設為未設定。
-
maxDiffPixelRatio
number (選填)可接受的不同像素與總像素數量的比率,介於
0
和1
之間,預設為未設定。 -
scale
"css" | "device" (選填)請參閱 scale 在 page.screenshot() 中的說明。預設為
"css"
。 -
stylePath
string | Array<string> (選填)請參閱 style 在 page.screenshot() 中的說明。
-
threshold
number (選填)可接受的比較影像中相同像素之間的感知顏色差異,範圍從
0
(嚴格)到1
(寬鬆)。"pixelmatch"
比較器計算 YIQ 色彩空間 中的顏色差異,並將預設threshold
值設為0.2
。
-
-
toMatchSnapshot
Object (選填) -
toPass
Object (選填)expect(value).toPass() 方法的配置。
-
forbidOnly
新增於:v1.10如果任何測試或群組被標記為 test.only() 或 test.describe.only(),是否以錯誤退出。在 CI 上很有用。
用法
import { defineConfig } from '@playwright/test';
export default defineConfig({
forbidOnly: !!process.env.CI,
});
類型
fullyParallel
新增於:v1.20Playwright Test 並行執行測試。為了實現這一點,它運行多個 worker 程序,這些程序同時運行。預設情況下,測試檔案並行運行。單一檔案中的測試依序在同一個 worker 程序中執行。
您可以使用此選項配置整個測試運行,以同時執行所有檔案中的所有測試。
用法
import { defineConfig } from '@playwright/test';
export default defineConfig({
fullyParallel: true,
});
類型
globalSetup
新增於:v1.10全域設定檔案的路徑。此檔案將在所有測試之前被要求和執行。它必須導出一個接受 FullConfig 參數的單一函數。傳遞路徑陣列以指定多個全域設定檔案。
了解更多關於全域設定和拆卸的資訊。
用法
import { defineConfig } from '@playwright/test';
export default defineConfig({
globalSetup: './global-setup',
});
類型
globalTeardown
新增於:v1.10全域拆卸檔案的路徑。此檔案將在所有測試之後被要求和執行。它必須導出一個單一函數。另請參閱 testConfig.globalSetup。傳遞路徑陣列以指定多個全域拆卸檔案。
了解更多關於全域設定和拆卸的資訊。
用法
import { defineConfig } from '@playwright/test';
export default defineConfig({
globalTeardown: './global-teardown',
});
類型
globalTimeout
新增於:v1.10整個測試套件可以運行的最長時間(毫秒)。零超時(預設)禁用此行為。在 CI 上很有用,可防止損壞的設定運行時間過長並浪費資源。了解更多關於各種超時的資訊。
用法
import { defineConfig } from '@playwright/test';
export default defineConfig({
globalTimeout: process.env.CI ? 60 * 60 * 1000 : undefined,
});
類型
grep
新增於:v1.10過濾器,僅運行標題與其中一個模式匹配的測試。例如,傳遞 grep: /cart/
應僅運行標題中包含 "cart" 的測試。也可以在命令列中使用 -g
選項。正則表達式將針對以下字串進行測試:專案名稱、測試檔案名稱、test.describe
名稱(如果有的話)、測試名稱和測試標籤,以空格分隔,例如 chromium my-test.spec.ts my-suite my-test
。
grep
選項對於標記測試也很有用。
用法
import { defineConfig } from '@playwright/test';
export default defineConfig({
grep: /smoke/,
});
類型
grepInvert
新增於:v1.10過濾器,僅運行標題與其中一個模式不匹配的測試。這與 testConfig.grep 相反。也可以在命令列中使用 --grep-invert
選項。
grepInvert
選項對於標記測試也很有用。
用法
import { defineConfig } from '@playwright/test';
export default defineConfig({
grepInvert: /manual/,
});
類型
ignoreSnapshots
新增於:v1.26是否跳過快照期望,例如 expect(value).toMatchSnapshot()
和 await expect(page).toHaveScreenshot()
。
用法
import { defineConfig } from '@playwright/test';
export default defineConfig({
ignoreSnapshots: !process.env.CI,
});
類型
maxFailures
新增於:v1.10整個測試套件運行中允許的最大測試失敗次數。達到此數字後,測試將停止並以錯誤退出。設定為零(預設)禁用此行為。
也可以在命令列中使用 --max-failures
和 -x
選項。
用法
import { defineConfig } from '@playwright/test';
export default defineConfig({
maxFailures: process.env.CI ? 1 : 0,
});
類型
metadata
新增於:v1.10將直接放入測試報告並序列化為 JSON 的元數據。
用法
import { defineConfig } from '@playwright/test';
export default defineConfig({
metadata: 'acceptance tests',
});
類型
name
新增於:v1.10配置名稱在報告和測試執行期間可見,除非被 testProject.name 覆蓋。
用法
import { defineConfig } from '@playwright/test';
export default defineConfig({
name: 'acceptance tests',
});
類型
outputDir
新增於:v1.10測試執行期間建立的檔案的輸出目錄。預設為 <package.json-directory>/test-results
。
用法
import { defineConfig } from '@playwright/test';
export default defineConfig({
outputDir: './test-results',
});
類型
詳細資訊
此目錄在開始時被清除。運行測試時,會在 testConfig.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');
});
preserveOutput
新增於:v1.10是否在 testConfig.outputDir 中保留測試輸出。預設為 'always'
。
'always'
- 為所有測試保留輸出;'never'
- 不為任何測試保留輸出;'failures-only'
- 僅為失敗的測試保留輸出。
用法
import { defineConfig } from '@playwright/test';
export default defineConfig({
preserveOutput: 'always',
});
類型
- "always" | "never" | "failures-only"
projects
新增於:v1.10Playwright Test 支援同時執行多個測試專案。請參閱 TestProject 以了解更多資訊。
用法
import { defineConfig, devices } from '@playwright/test';
export default defineConfig({
projects: [
{ name: 'chromium', use: devices['Desktop Chrome'] }
]
});
類型
quiet
新增於:v1.10是否抑制來自測試的 stdio 和 stderr 輸出。
用法
import { defineConfig } from '@playwright/test';
export default defineConfig({
quiet: !!process.env.CI,
});
類型
repeatEach
新增於:v1.10重複每個測試的次數,對於調試不穩定的測試很有用。
用法
import { defineConfig } from '@playwright/test';
export default defineConfig({
repeatEach: 3,
});
類型
reportSlowTests
新增於:v1.10是否報告慢速測試檔案。傳遞 null
以禁用此功能。
用法
import { defineConfig } from '@playwright/test';
export default defineConfig({
reportSlowTests: null,
});
類型
詳細資訊
耗時超過 threshold
毫秒的測試檔案被視為慢速,並且會報告最慢的檔案,最多不超過 max
個。將 max
傳遞為零會報告所有超過閾值的測試檔案。
reporter
新增於:v1.10要使用的報告器列表。每個報告器可以是
- 內建報告器名稱,如
'list'
或'json'
。 - 模組名稱,如
'my-awesome-reporter'
。 - 報告器的相對路徑,如
'./reporters/my-awesome-reporter.js'
。
您可以在元組中將選項傳遞給報告器,例如 ['json', { outputFile: './report.json' }]
。
在報告器指南中了解更多資訊。
用法
import { defineConfig } from '@playwright/test';
export default defineConfig({
reporter: 'line',
});
類型
respectGitIgnore
新增於:v1.45在搜尋測試檔案時,是否跳過 .gitignore
中的條目。預設情況下,如果未明確指定 testConfig.testDir 和 testProject.testDir,Playwright 將忽略任何與 .gitignore
條目匹配的測試檔案。
用法
testConfig.respectGitIgnore
類型
retries
新增於:v1.10給予失敗測試的最大重試次數。預設情況下,失敗的測試不會重試。了解更多關於測試重試的資訊。
用法
import { defineConfig } from '@playwright/test';
export default defineConfig({
retries: 2,
});
類型
shard
新增於:v1.10分片測試並僅執行選定的分片。以從 1 開始的形式指定,例如 { total: 5, current: 2 }
。
了解更多關於 Playwright Test 的並行性和分片資訊。
用法
import { defineConfig } from '@playwright/test';
export default defineConfig({
shard: { total: 10, current: 3 },
});
類型
snapshotPathTemplate
新增於:v1.28此選項配置一個模板,用於控制 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
以及以下使用 toHaveScreenshot()
呼叫的 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']);
});
});
支援的令牌列表
{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' } },
],
});
在此配置中
- 第一個專案沒有名稱,因此其快照將存儲在
<configDir>/__screenshots__/example.spec.ts/...
。 - 第二個專案有名稱,因此其快照將存儲在
<configDir>/__screenshots__/chromium/example.spec.ts/..
。 - 由於
snapshotPathTemplate
解析為相對路徑,因此它將相對於configDir
解析。 - 正斜線
"/"
可以用作任何平台上的路徑分隔符。
testDir
新增於:v1.10將遞迴掃描以查找測試檔案的目錄。預設為配置文件的目錄。
用法
import { defineConfig } from '@playwright/test';
export default defineConfig({
testDir: './tests/playwright',
});
類型
testIgnore
新增於:v1.10與這些模式之一匹配的檔案不會作為測試檔案執行。匹配是針對絕對檔案路徑執行的。字串被視為 glob 模式。
例如,'**/test-assets/**'
將忽略 test-assets
目錄中的任何檔案。
用法
import { defineConfig } from '@playwright/test';
export default defineConfig({
testIgnore: '**/test-assets/**',
});
類型
testMatch
新增於:v1.10僅與這些模式之一匹配的檔案會作為測試檔案執行。匹配是針對絕對檔案路徑執行的。字串被視為 glob 模式。
預設情況下,Playwright 查找與以下 glob 模式匹配的檔案:**/*.@(spec|test).?(c|m)[jt]s?(x)
。這表示帶有 ".test"
或 ".spec"
後綴的 JavaScript 或 TypeScript 檔案,例如 login-screen.wrong-credentials.spec.ts
。
用法
import { defineConfig } from '@playwright/test';
export default defineConfig({
testMatch: /.*\.e2e\.js/,
});
類型
timeout
新增於:v1.10每個測試的超時時間(毫秒)。預設為 30 秒。
這是所有測試的基本超時時間。此外,每個測試都可以使用 test.setTimeout() 配置自己的超時時間。了解更多關於各種超時的資訊。
用法
import { defineConfig } from '@playwright/test';
export default defineConfig({
timeout: 5 * 60 * 1000,
});
類型
tsconfig
新增於:v1.49適用於所有導入檔案的單個 tsconfig
的路徑。預設情況下,每個導入檔案的 tsconfig
都會單獨查找。請注意,當載入配置文件或其任何依賴項時,tsconfig
屬性無效。當指定 --tsconfig
命令列選項時,將忽略此屬性。
用法
import { defineConfig } from '@playwright/test';
export default defineConfig({
tsconfig: './tsconfig.test.json',
});
類型
updateSnapshots
新增於:v1.10是否使用測試運行產生的實際結果更新預期的快照。預設為 'missing'
。
'all'
- 所有執行的測試都將更新快照。'changed'
- 所有執行的測試都將更新不匹配的快照。匹配的快照將不會更新。'missing'
- 創建缺少的快照,例如在編寫新測試並首次運行它時。這是預設值。'none'
- 不更新快照。
了解更多關於快照的資訊。
用法
import { defineConfig } from '@playwright/test';
export default defineConfig({
updateSnapshots: 'missing',
});
類型
- "all" | "changed" | "missing" | "none"
updateSourceMethod
新增於:v1.50定義如何在原始碼中更新快照。
'patch'
- 創建一個統一的 diff 檔案,可用於稍後更新原始碼。這是預設值。'3way'
- 在原始碼中生成合併衝突標記。這允許用戶手動選擇相關更改,就像他們在 IDE 中解決合併衝突一樣。'overwrite'
- 使用新的快照值覆蓋原始碼。
用法
testConfig.updateSourceMethod
類型
- "overwrite" | "3way" | "patch"
use
新增於:v1.10所有測試的全域選項,例如 testOptions.browserName。了解更多關於配置的資訊,並參閱可用選項。
用法
import { defineConfig } from '@playwright/test';
export default defineConfig({
use: {
browserName: 'chromium',
},
});
類型
webServer
新增於:v1.10在測試期間啟動開發 Web 伺服器(或多個)。
用法
import { defineConfig } from '@playwright/test';
export default defineConfig({
webServer: {
command: 'npm run start',
url: 'http://127.0.0.1:3000',
timeout: 120 * 1000,
reuseExistingServer: !process.env.CI,
},
use: {
baseURL: 'https://127.0.0.1:3000/',
},
});
現在您可以在導航頁面時使用相對路徑
import { test } from '@playwright/test';
test('test', async ({ page }) => {
// This will result in https://127.0.0.1:3000/foo
await page.goto('/foo');
});
可以啟動多個 Web 伺服器(或背景進程)
import { defineConfig } from '@playwright/test';
export default defineConfig({
webServer: [
{
command: 'npm run start',
url: 'http://127.0.0.1:3000',
timeout: 120 * 1000,
reuseExistingServer: !process.env.CI,
},
{
command: 'npm run backend',
url: 'http://127.0.0.1:3333',
timeout: 120 * 1000,
reuseExistingServer: !process.env.CI,
}
],
use: {
baseURL: 'http://127.0.0.1:3000',
},
});
類型
- Object | Array<Object>
-
command
string要啟動的 Shell 命令。例如
npm run start
。 -
cwd
string (選填)衍生程序的當前工作目錄,預設為配置文件的目錄。
-
env
Object<string, string> (選填)要為命令設定的環境變數,預設為
process.env
。 -
ignoreHTTPSErrors
boolean (選填)擷取
url
時是否忽略 HTTPS 錯誤。預設為false
。 -
port
number (選填)您的 http 伺服器預期出現的端口。它會等待直到它接受連接。應指定
port
或url
之一。 -
reuseExistingServer
boolean (選填)如果為 true,它將在
port
或url
可用時重複使用現有的伺服器。如果該port
或url
上沒有伺服器正在運行,它將運行命令以啟動新伺服器。如果為false
,如果現有程序正在監聽port
或url
,它將拋出錯誤。這通常應設定為!process.env.CI
,以便在本地運行測試時允許本地開發伺服器。 -
stdout
"pipe" | "ignore" (選填)如果為
"pipe"
,它將命令的 stdout 管道傳輸到程序 stdout。如果為"ignore"
,它將忽略命令的 stdout。預設為"ignore"
。 -
stderr
"pipe" | "ignore" (選填)是否將命令的 stderr 管道傳輸到程序 stderr 或忽略它。預設為
"pipe"
。 -
timeout
number (選填)等待程序啟動並可用所需的時間(毫秒)。預設為 60000。
-
gracefulShutdown
Object (選填)-
signal
"SIGINT" | "SIGTERM" -
timeout
number
如何關閉程序。如果未指定,則強制
SIGKILL
程序組。如果設定為{ signal: 'SIGTERM', timeout: 500 }
,則向程序組發送SIGTERM
信號,如果程序組在 500 毫秒內未退出,則發送SIGKILL
。您也可以使用SIGINT
作為信號。0
超時時間表示不會發送SIGKILL
。Windows 不支援SIGTERM
和SIGINT
信號,因此在 Windows 上會忽略此選項。請注意,關閉 Docker 容器需要SIGTERM
。 -
-
url
string (選填)您的 http 伺服器上的 URL,預期在伺服器準備好接受連接時返回 2xx、3xx、400、401、402 或 403 狀態代碼。重定向(3xx 狀態代碼)將被跟隨,並且會檢查新位置。應指定
port
或url
之一。
-
詳細資訊
如果指定了端口,Playwright Test 將等待它在 127.0.0.1
或 ::1
上可用,然後再運行測試。如果指定了 URL,Playwright Test 將等待 URL 返回 2xx、3xx、400、401、402 或 403 狀態代碼,然後再運行測試。
對於持續整合,您可能希望使用 reuseExistingServer: !process.env.CI
選項,該選項不會在 CI 上使用現有伺服器。要查看 stdout,您可以設定 DEBUG=pw:webserver
環境變數。
port
(但不是 url
)作為 testOptions.baseURL 傳遞給 Playwright。例如,端口 8080
會產生等於 https://127.0.0.1:8080
的 baseURL
。如果 webServer
被指定為陣列,您必須明確配置 baseURL
(即使它只有一個條目)。
也建議在配置中指定 testOptions.baseURL,以便測試可以使用相對 URL。
workers
新增於:v1.10用於並行化測試的最大並行 worker 程序數。也可以設定為邏輯 CPU 核心的百分比,例如 '50%'
。
Playwright Test 使用 worker processes (工作進程) 來執行測試。 總是會有至少一個 worker process,但可以使用更多來加速測試執行。
預設為邏輯 CPU 核心數量的一半。 深入了解 Playwright Test 的 平行處理和分片。
用法
import { defineConfig } from '@playwright/test';
export default defineConfig({
workers: 3,
});
類型
已棄用
snapshotDir
新增於:v1.10使用 testConfig.snapshotPathTemplate 來設定快照路徑。
快照檔案 (使用 toMatchSnapshot
建立) 的基礎目錄,相對於設定檔而言。 預設為 testConfig.testDir。
用法
import { defineConfig } from '@playwright/test';
export default defineConfig({
snapshotDir: './snapshots',
});
類型
詳細資訊
每個測試的目錄可以透過 testInfo.snapshotDir 和 testInfo.snapshotPath() 存取。
此路徑將作為每個測試檔案快照目錄的基礎目錄。 將 snapshotDir
設定為 'snapshots'
,testInfo.snapshotDir 將解析為 snapshots/a.spec.js-snapshots
。