Skip to main content

報告器

簡介

Playwright Test 附帶一些內建的報告工具,以滿足不同的需求,並且能夠提供自訂的報告工具。嘗試內建報告工具的最簡單方法是傳遞 --reporter command line option

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

內建報告器

所有內建報告器顯示有關失敗的詳細資訊,主要在於成功執行的冗長度有所不同。

List reporter

預設情況下,List reporter 是預設的 (除了在 CI 上 Dot reporter 是預設的)。它會為每個正在執行的測試列印一行。

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 }]],
});

清單報告支援以下配置選項和環境變數:

Environment Variable NameReporter Config OptionDescriptionDefault
PLAYWRIGHT_LIST_PRINT_STEPSprintSteps是否將每個步驟打印在自己的行上。false
PLAYWRIGHT_FORCE_TTY是否生成適合即時終端的輸出。如果指定了一個數字,則該數字也將用作終端寬度。當終端處於 TTY 模式時為 true,否則為 false
FORCE_COLOR是否生成彩色輸出。當終端處於 TTY 模式時為 true,否則為 false

Line reporter

Line reporter 比 List reporter 更簡潔。它使用單行報告最後完成的測試,並在發生失敗時打印出來。Line reporter對於大型測試套件非常有用,它顯示進度但不會通過列出所有測試來刷屏輸出。

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

行報告支援以下配置選項和環境變數:

Environment Variable NameReporter Config OptionDescriptionDefault
PLAYWRIGHT_FORCE_TTY是否產生適合即時終端機的輸出。如果指定了數字,該數字也將用作終端機寬度。當終端機處於 TTY 模式時為 true,否則為 false
FORCE_COLOR是否產生彩色輸出。當終端機處於 TTY 模式時為 true,否則為 false

Dot reporter

Dot reporter 非常簡潔 - 每次成功的測試執行只會產生一個字元。它是 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·············································

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

CharacterDescription
·通過
F失敗
×失敗或超時 - 將重試
±重試通過(不穩定)
T超時
°跳過

Dot report 支援以下設定選項和環境變數:

Environment Variable NameReporter Config OptionDescriptionDefault
PLAYWRIGHT_FORCE_TTY是否產生適合即時終端機的輸出。如果指定了數字,該數字也將用作終端機寬度。當終端機處於 TTY 模式時為 true,否則為 false
FORCE_COLOR是否產生彩色輸出。當終端機處於 TTY 模式時為 true,否則為 false

HTML reporter

HTML reporter 會產生一個自包含的資料夾,其中包含測試執行的報告,可以作為網頁提供。

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 報告支援以下配置選項和環境變數:

Environment Variable NameReporter Config OptionDescriptionDefault
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 reporter

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

npx playwright test --reporter=blob

預設情況下,報告會寫入 package.json 目錄或當前工作目錄(如果未找到 package.json)中的 blob-report 目錄。報告文件名看起來像 report-<hash>.zipreport-<hash>-<shard_number>.zip,當使用 sharding 時。hash 是一個可選值,從 --grep--grepInverted--project 和作為命令行參數傳遞的文件過濾器計算得出。hash 保證了使用不同命令行選項執行 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 報告支援以下配置選項和環境變數:

Environment Variable NameReporter Config OptionDescriptionDefault
PLAYWRIGHT_BLOB_OUTPUT_DIRoutputDir儲存輸出的目錄。寫入新報告前會刪除現有內容。blob-report
PLAYWRIGHT_BLOB_OUTPUT_NAMEfileName報告檔案名稱。report-<project>-<hash>-<shard_number>.zip
PLAYWRIGHT_BLOB_OUTPUT_FILEoutputFile輸出檔案的完整路徑。如果已定義,outputDirfileName 將被忽略。undefined

JSON reporter

JSON reporter 會產生一個包含所有測試執行資訊的物件。

很可能你想將 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 報告支援以下的設定選項和環境變數:

Environment Variable NameReporter Config OptionDescriptionDefault
PLAYWRIGHT_JSON_OUTPUT_DIR儲存輸出檔案的目錄。如果指定了輸出檔案,則忽略此項。cwd 或配置目錄。
PLAYWRIGHT_JSON_OUTPUT_NAMEoutputFile輸出檔案的基本檔名,相對於輸出目錄。JSON 報告將打印到 stdout。
PLAYWRIGHT_JSON_OUTPUT_FILEoutputFile輸出檔案的完整路徑。如果已定義,PLAYWRIGHT_JSON_OUTPUT_DIRPLAYWRIGHT_JSON_OUTPUT_NAME 將被忽略。JSON 報告將打印到 stdout。

JUnit reporter

JUnit reporter 產生 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 報告支援以下配置選項和環境變數:

Environment Variable NameReporter Config OptionDescriptionDefault
PLAYWRIGHT_JUNIT_OUTPUT_DIR儲存輸出檔案的目錄。如果未指定輸出檔案則忽略。cwd 或 config 目錄。
PLAYWRIGHT_JUNIT_OUTPUT_NAMEoutputFile輸出檔案的基本檔名,相對於輸出目錄。JUnit 報告會列印到 stdout。
PLAYWRIGHT_JUNIT_OUTPUT_FILEoutputFile輸出檔案的完整路徑。如果已定義,PLAYWRIGHT_JUNIT_OUTPUT_DIRPLAYWRIGHT_JUNIT_OUTPUT_NAME 將被忽略。JUnit 報告會列印到 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 reporter 在 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',
});

自訂報告器

你可以透過實作具有一些 reporter 方法的類別來建立自訂 reporter。了解更多關於 Reporter 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 文件路徑作為 --reporter 命令行選項傳遞:

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

第三方報告展示