跳到主要內容

記者

簡介

Playwright Test 內建幾個記者,可滿足不同需求,並能提供自訂記者。試用內建記者最簡單的方式是傳遞 --reporter 命令列選項

npx playwright test --reporter=line

若要取得更多控制權,您可以在組態檔中以程式設計方式指定記者。

playwright.config.ts
import { defineConfig } from '@playwright/test';

export default defineConfig({
reporter: 'line',
});

多個記者

您可以同時使用多個記者。例如,您可以使用 'list' 取得良好的終端機輸出,並使用 'json' 取得包含測試結果的完整 json 檔案。

playwright.config.ts
import { defineConfig } from '@playwright/test';

export default defineConfig({
reporter: [
['list'],
['json', { outputFile: 'test-results.json' }]
],
});

CI 上的記者

您可以在本機和 CI 上使用不同的記者。例如,使用簡潔的 'dot' 記者可以避免過多的輸出。這是 CI 上的預設值。

playwright.config.ts
import { defineConfig } from '@playwright/test';

export default defineConfig({
// Concise 'dot' for CI, default 'list' when running locally
reporter: process.env.CI ? 'dot' : 'list',
});

內建記者

所有內建記者都會顯示關於失敗的詳細資訊,主要差異在於成功執行的詳細程度。

列表記者

列表記者是預設記者 (CI 上預設為 dot 記者除外)。它會為每個正在執行的測試印出一行。

npx playwright test --reporter=list
playwright.config.ts
import { defineConfig } from '@playwright/test';

export default defineConfig({
reporter: 'list',
});

以下是測試執行中途的範例輸出。失敗將列在最後。

npx playwright test --reporter=list
Running 124 tests using 6 workers

1 ✓ should access error in env (438ms)
2 ✓ handle long test names (515ms)
3 x 1) render expected (691ms)
4 ✓ should timeout (932ms)
5 should repeat each:
6 ✓ should respect enclosing .gitignore (569ms)
7 should teardown env after timeout:
8 should respect excluded tests:
9 ✓ should handle env beforeEach error (638ms)
10 should respect enclosing .gitignore:

您可以透過傳遞以下組態選項來選擇步驟呈現

playwright.config.ts
import { defineConfig } from '@playwright/test';

export default defineConfig({
reporter: [['list', { printSteps: true }]],
});

列表報告支援以下組態選項和環境變數

環境變數名稱記者組態選項描述預設值
PLAYWRIGHT_LIST_PRINT_STEPSprintSteps是否在自己的行上印出每個步驟。false
PLAYWRIGHT_FORCE_TTY是否產生適用於即時終端機的輸出。如果指定數字,也將用作終端機寬度。當終端機處於 TTY 模式時為 true,否則為 false
FORCE_COLOR是否產生彩色輸出。當終端機處於 TTY 模式時為 true,否則為 false

行記者

行記者比列表記者更簡潔。它使用單行報告最後完成的測試,並在發生失敗時印出失敗。行記者適用於大型測試套件,它會顯示進度,但不會透過列出所有測試來垃圾訊息輸出。

npx playwright test --reporter=line
playwright.config.ts
import { defineConfig } from '@playwright/test';

export default defineConfig({
reporter: 'line',
});

以下是測試執行中途的範例輸出。失敗會內嵌報告。

npx playwright test --reporter=line
Running 124 tests using 6 workers
1) dot-reporter.spec.ts:20:1 › render expected ===================================================

Error: expect(received).toBe(expected) // Object.is equality

Expected: 1
Received: 0

[23/124] gitignore.spec.ts - should respect nested .gitignore

行報告支援以下組態選項和環境變數

環境變數名稱記者組態選項描述預設值
PLAYWRIGHT_FORCE_TTY是否產生適用於即時終端機的輸出。如果指定數字,也將用作終端機寬度。當終端機處於 TTY 模式時為 true,否則為 false
FORCE_COLOR是否產生彩色輸出。當終端機處於 TTY 模式時為 true,否則為 false

點記者

點記者非常簡潔 - 每個成功執行的測試只產生一個字元。它是 CI 上的預設值,適用於您不想要大量輸出的情況。

npx playwright test --reporter=dot
playwright.config.ts
import { defineConfig } from '@playwright/test';

export default defineConfig({
reporter: 'dot',
});

以下是測試執行中途的範例輸出。失敗將列在最後。

npx playwright test --reporter=dot
Running 124 tests using 6 workers
······F·············································

每個已執行的測試都會顯示一個字元,指出其狀態

字元描述
·通過
F失敗
×失敗或逾時 - 且將重試
±重試時通過 (不穩定)
T逾時
°略過

點報告支援以下組態選項和環境變數

環境變數名稱記者組態選項描述預設值
PLAYWRIGHT_FORCE_TTY是否產生適用於即時終端機的輸出。如果指定數字,也將用作終端機寬度。當終端機處於 TTY 模式時為 true,否則為 false
FORCE_COLOR是否產生彩色輸出。當終端機處於 TTY 模式時為 true,否則為 false

HTML 記者

HTML 記者會產生一個獨立的資料夾,其中包含測試執行的報告,可以作為網頁提供服務。

npx playwright test --reporter=html

預設情況下,如果某些測試失敗,HTML 報告會自動開啟。您可以透過 Playwright 組態中的 open 屬性或 PLAYWRIGHT_HTML_OPEN 環境變數來控制此行為。該屬性的可能值為 alwaysneveron-failure (預設值)。

您也可以組態用於提供 HTML 報告服務的 hostport

playwright.config.ts
import { defineConfig } from '@playwright/test';

export default defineConfig({
reporter: [['html', { open: 'never' }]],
});

預設情況下,報告會寫入目前工作目錄中的 playwright-report 資料夾。可以使用 PLAYWRIGHT_HTML_OUTPUT_DIR 環境變數或記者組態來覆寫該位置。

在組態檔中,直接傳遞選項

playwright.config.ts
import { defineConfig } from '@playwright/test';

export default defineConfig({
reporter: [['html', { outputFolder: 'my-report' }]],
});

如果您要從資料資料夾上傳附件到其他位置,您可以使用 attachmentsBaseURL 選項,讓 html 報告知道在哪裡尋找它們。

playwright.config.ts
import { defineConfig } from '@playwright/test';

export default defineConfig({
reporter: [['html', { attachmentsBaseURL: 'https://external-storage.com/' }]],
});

開啟上次測試執行報告的快速方法是

npx playwright show-report

或者,如果有名稱自訂的資料夾

npx playwright show-report my-report

HTML 報告支援以下組態選項和環境變數

環境變數名稱記者組態選項描述預設值
PLAYWRIGHT_HTML_OUTPUT_DIRoutputFolder儲存報告的目錄。playwright-report
PLAYWRIGHT_HTML_OPENopen何時在瀏覽器中開啟 html 報告,選項為 'always''never''on-failure' 其中之一'on-failure'
PLAYWRIGHT_HTML_HOSThost當報告在瀏覽器中開啟時,它將繫結到此主機名稱。localhost
PLAYWRIGHT_HTML_PORTport當報告在瀏覽器中開啟時,它將在此連接埠上提供服務。9323 或任何可用的連接埠 (當 9323 無法使用時)。
PLAYWRIGHT_HTML_ATTACHMENTS_BASE_URLattachmentsBaseURLdata 子目錄上傳附件的個別位置。只有在您將報告和 data 分別上傳到不同位置時才需要。data/

Blob 記者

Blob 報告包含關於測試執行的所有詳細資訊,稍後可用於產生任何其他報告。它們的主要功能是促進合併來自分片測試的報告。

npx playwright test --reporter=blob

預設情況下,報告會寫入 package.json 目錄或目前工作目錄 (如果找不到 package.json) 中的 blob-report 目錄。報告檔名看起來像 report-<hash>.zipreport-<hash>-<shard_number>.zip (當使用分片時)。雜湊是從 --grep--grepInverted--project 和作為命令列引數傳遞的檔案篩選器計算的可選值。雜湊保證使用不同命令列選項執行 Playwright 將產生不同但執行之間穩定的報告名稱。輸出檔名可以在組態檔中覆寫,或作為 'PLAYWRIGHT_BLOB_OUTPUT_FILE' 環境變數傳遞。

playwright.config.ts
import { defineConfig } from '@playwright/test';

export default defineConfig({
reporter: [['blob', { outputFile: `./blob-report/report-${os.platform()}.zip` }]],
});

Blob 報告支援以下組態選項和環境變數

環境變數名稱記者組態選項描述預設值
PLAYWRIGHT_BLOB_OUTPUT_DIRoutputDir儲存輸出的目錄。現有內容會在寫入新報告之前刪除。blob-report
PLAYWRIGHT_BLOB_OUTPUT_NAMEfileName報告檔名。report-<project>-<hash>-<shard_number>.zip
PLAYWRIGHT_BLOB_OUTPUT_FILEoutputFile輸出檔案的完整路徑。如果已定義,則會忽略 outputDirfileNameundefined

JSON 記者

JSON 記者會產生一個物件,其中包含關於測試執行的所有資訊。

您很可能想要將 JSON 寫入檔案。當使用 --reporter=json 執行時,請使用 PLAYWRIGHT_JSON_OUTPUT_NAME 環境變數

PLAYWRIGHT_JSON_OUTPUT_NAME=results.json npx playwright test --reporter=json

在組態檔中,直接傳遞選項

playwright.config.ts
import { defineConfig } from '@playwright/test';

export default defineConfig({
reporter: [['json', { outputFile: 'results.json' }]],
});

JSON 報告支援以下組態選項和環境變數

環境變數名稱記者組態選項描述預設值
PLAYWRIGHT_JSON_OUTPUT_DIR儲存輸出檔案的目錄。如果已指定輸出檔案,則會忽略。cwd 或組態目錄。
PLAYWRIGHT_JSON_OUTPUT_NAMEoutputFile輸出的基本檔名,相對於輸出目錄。JSON 報告會印出到 stdout。
PLAYWRIGHT_JSON_OUTPUT_FILEoutputFile輸出檔案的完整路徑。如果已定義,則會忽略 PLAYWRIGHT_JSON_OUTPUT_DIRPLAYWRIGHT_JSON_OUTPUT_NAMEJSON 報告會印出到 stdout。

JUnit 記者

JUnit 記者會產生 JUnit 樣式的 xml 報告。

您很可能想要將報告寫入 xml 檔案。當使用 --reporter=junit 執行時,請使用 PLAYWRIGHT_JUNIT_OUTPUT_NAME 環境變數

PLAYWRIGHT_JUNIT_OUTPUT_NAME=results.xml npx playwright test --reporter=junit

在組態檔中,直接傳遞選項

playwright.config.ts
import { defineConfig } from '@playwright/test';

export default defineConfig({
reporter: [['junit', { outputFile: 'results.xml' }]],
});

JUnit 報告支援以下組態選項和環境變數

環境變數名稱記者組態選項描述預設值
PLAYWRIGHT_JUNIT_OUTPUT_DIR儲存輸出檔案的目錄。如果未指定輸出檔案,則會忽略。cwd 或組態目錄。
PLAYWRIGHT_JUNIT_OUTPUT_NAMEoutputFile輸出的基本檔名,相對於輸出目錄。JUnit 報告會印出到 stdout。
PLAYWRIGHT_JUNIT_OUTPUT_FILEoutputFile輸出檔案的完整路徑。如果已定義,則會忽略 PLAYWRIGHT_JUNIT_OUTPUT_DIRPLAYWRIGHT_JUNIT_OUTPUT_NAMEJUnit 報告會印出到 stdout。
PLAYWRIGHT_JUNIT_STRIP_ANSIstripANSIControlSequences是否在將 ANSI 控制序列寫入報告之前,從文字中移除它們。預設情況下,會依原樣新增輸出文字。
PLAYWRIGHT_JUNIT_INCLUDE_PROJECT_IN_TEST_NAMEincludeProjectInTestName是否在每個測試案例中包含 Playwright 專案名稱作為名稱前綴。預設情況下不包含。
PLAYWRIGHT_JUNIT_SUITE_ID<testsuites/> 報告項目的 id 屬性值。空字串。
PLAYWRIGHT_JUNIT_SUITE_NAME<testsuites/> 報告項目的 name 屬性值。空字串。

GitHub Actions 註解

您可以使用內建的 github 記者,在 GitHub actions 中執行時取得自動失敗註解。

請注意,所有其他記者在 GitHub Actions 上也能運作,但不提供註解。此外,如果使用矩陣策略執行測試,則不建議使用此註解類型,因為堆疊追蹤失敗會倍增並模糊 GitHub 檔案檢視。

playwright.config.ts
import { defineConfig } from '@playwright/test';

export default defineConfig({
// 'github' for GitHub Actions CI to generate annotations, plus a concise 'dot'
// default 'list' when running locally
reporter: process.env.CI ? 'github' : 'list',
});

自訂記者

您可以透過實作具有某些記者方法的類別來建立自訂記者。深入瞭解記者 API。

my-awesome-reporter.ts
import type {
FullConfig, FullResult, Reporter, Suite, TestCase, TestResult
} from '@playwright/test/reporter';

class MyReporter implements Reporter {
onBegin(config: FullConfig, suite: Suite) {
console.log(`Starting the run with ${suite.allTests().length} tests`);
}

onTestBegin(test: TestCase, result: TestResult) {
console.log(`Starting test ${test.title}`);
}

onTestEnd(test: TestCase, result: TestResult) {
console.log(`Finished test ${test.title}: ${result.status}`);
}

onEnd(result: FullResult) {
console.log(`Finished the run: ${result.status}`);
}
}

export default MyReporter;

現在將此記者與 testConfig.reporter 搭配使用。

playwright.config.ts
import { defineConfig } from '@playwright/test';

export default defineConfig({
reporter: './my-awesome-reporter.ts',
});

或者,只需傳遞記者檔案路徑作為 --reporter 命令列選項

npx playwright test --reporter="./myreporter/my-awesome-reporter.ts"

以下是您可以查看以撰寫自己的記者的一些開放原始碼記者實作的簡短清單