報告器
簡介
Playwright Test 附帶一些內建的報告工具,以滿足不同的需求,並且能夠提供自訂的報告工具。嘗試內建報告工具的最簡單方法是傳遞 --reporter
command line option。
npx playwright test --reporter=line
為了獲得更多控制,您可以在設定檔中以程式化方式指定報告器。
import { defineConfig } from '@playwright/test';
export default defineConfig({
reporter: 'line',
});
多個報告器
你可以同時使用多個報告器。例如 你可以使用 'list'
來獲得漂亮的終端輸出,並使用 'json'
來獲得包含測試結果的綜合 json 檔案。
import { defineConfig } from '@playwright/test';
export default defineConfig({
reporter: [
['list'],
['json', { outputFile: 'test-results.json' }]
],
});
CI 上的報告器
您可以在本地和 CI 上使用不同的報告器。例如,使用簡潔的 'dot'
報告器可以避免過多的輸出。這是 CI 上的預設設定。
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
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:
您可以透過傳遞以下配置選項選擇進入步驟渲染:
import { defineConfig } from '@playwright/test';
export default defineConfig({
reporter: [['list', { printSteps: true }]],
});
清單報告支援以下配置選項和環境變數:
Environment Variable Name | Reporter Config Option | Description | Default |
---|---|---|---|
PLAYWRIGHT_LIST_PRINT_STEPS | printSteps | 是否將每個步驟打印在自己的行上。 | 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
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 Name | Reporter Config Option | Description | Default |
---|---|---|---|
PLAYWRIGHT_FORCE_TTY | 是否產生適合即時終端機的輸出。如果指定了數字,該數字也將用作終端機寬度。 | 當終端機處於 TTY 模式時為 true ,否則為 false 。 | |
FORCE_COLOR | 是否產生彩色輸出。 | 當終端機處於 TTY 模式時為 true ,否則為 false 。 |
Dot reporter
Dot reporter 非常簡潔 - 每次成功的測試執行只會產生一個字元。它是 CI 上的預設選項,適用於不需要大量輸出的情況。
npx playwright test --reporter=dot
import { defineConfig } from '@playwright/test';
export default defineConfig({
reporter: 'dot',
});
以下是在測試執行過程中的範例輸出。失敗將列在最後。
npx playwright test --reporter=dot
Running 124 tests using 6 workers
······F·············································
每個已執行測試都會顯示一個字元,指示其狀態:
Character | Description |
---|---|
· | 通過 |
F | 失敗 |
× | 失敗或超時 - 將重試 |
± | 重試通過(不穩定) |
T | 超時 |
° | 跳過 |
Dot report 支援以下設定選項和環境變數:
Environment Variable Name | Reporter Config Option | Description | Default |
---|---|---|---|
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
環境變數來控制此行為。該屬性的可能值為 always
、never
和 on-failure
(預設)。
你也可以設定用來提供 HTML 報告的 host
和 port
。
import { defineConfig } from '@playwright/test';
export default defineConfig({
reporter: [['html', { open: 'never' }]],
});
預設情況下,報告會寫入當前工作目錄中的 playwright-report
資料夾。可以使用 PLAYWRIGHT_HTML_OUTPUT_DIR
環境變數或報告配置來覆蓋該位置。
在設定檔案中,直接傳遞選項:
import { defineConfig } from '@playwright/test';
export default defineConfig({
reporter: [['html', { outputFolder: 'my-report' }]],
});
如果你正在從資料夾上傳附件到其他位置,你可以使用 attachmentsBaseURL
選項來讓 html 報告知道在哪裡尋找它們。
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 Name | Reporter Config Option | Description | Default |
---|---|---|---|
PLAYWRIGHT_HTML_OUTPUT_DIR | outputFolder | 儲存報告的目錄。 | playwright-report |
PLAYWRIGHT_HTML_OPEN | open | 何時在瀏覽器中開啟 html 報告,可選擇 'always' 、'never' 或 'on-failure' | 'on-failure' |
PLAYWRIGHT_HTML_HOST | host | 當報告在瀏覽器中開啟時,將綁定到此主機名。 | localhost |
PLAYWRIGHT_HTML_PORT | port | 當報告在瀏覽器中開啟時,將在此埠上提供服務。 | 9323 或當 9323 不可用時的任何可用埠。 |
PLAYWRIGHT_HTML_ATTACHMENTS_BASE_URL | attachmentsBaseURL | data 子目錄中的附 件上傳到的單獨位置。僅當您將報告和 data 分別上傳到不同位置時才需要。 | data/ |
Blob reporter
Blob 報告包含有關測試執行的所有詳細資訊,並且可以在稍後用於生成任何其他報告。它們的主要功能是促進來自分片測試的報告合併。
npx playwright test --reporter=blob
預設情況下,報告會寫入 package.json 目錄或當前工作目錄(如果未找到 package.json)中的 blob-report
目錄。報告文件名看起來像 report-<hash>.zip
或 report-<hash>-<shard_number>.zip
,當使用 sharding 時。hash 是一個可選值,從 --grep
、--grepInverted
、--project
和作為命令行參數傳遞的文件過濾器計算得出。hash 保證了使用不同命令行選項執行 Playwright 時會產生不同但在多次執行之間穩定的報告名稱。輸出文件名可以在配置文件中被覆蓋,或作為 'PLAYWRIGHT_BLOB_OUTPUT_FILE'
環境變數傳遞。
import { defineConfig } from '@playwright/test';
export default defineConfig({
reporter: [['blob', { outputFile: `./blob-report/report-${os.platform()}.zip` }]],
});
Blob 報告支援以下配置選項和環境變數:
Environment Variable Name | Reporter Config Option | Description | Default |
---|---|---|---|
PLAYWRIGHT_BLOB_OUTPUT_DIR | outputDir | 儲存輸出的目錄。寫入新報告前會刪除現有內容。 | blob-report |
PLAYWRIGHT_BLOB_OUTPUT_NAME | fileName | 報告檔案名稱。 | report-<project>-<hash>-<shard_number>.zip |
PLAYWRIGHT_BLOB_OUTPUT_FILE | outputFile | 輸出檔案的完整路徑。如果已定義,outputDir 和 fileName 將被忽略。 | undefined |
JSON reporter
JSON reporter 會產生一個包含所有測試執行資訊的物件。
很可能你想將 JSON 寫入檔案。當使用 --reporter=json
執行時,使用 PLAYWRIGHT_JSON_OUTPUT_NAME
環境變數:
- Bash
- PowerShell
- Batch
PLAYWRIGHT_JSON_OUTPUT_NAME=results.json npx playwright test --reporter=json
$env:PLAYWRIGHT_JSON_OUTPUT_NAME="results.json"
npx playwright test --reporter=json
set PLAYWRIGHT_JSON_OUTPUT_NAME=results.json
npx playwright test --reporter=json
在設定檔案中,直接傳遞選項:
import { defineConfig } from '@playwright/test';
export default defineConfig({
reporter: [['json', { outputFile: 'results.json' }]],
});
JSON 報告支援以下的設定選項和環境變數:
Environment Variable Name | Reporter Config Option | Description | Default |
---|---|---|---|
PLAYWRIGHT_JSON_OUTPUT_DIR | 儲存輸出檔案的目錄。如果指定了輸出檔案,則忽略此項。 | cwd 或配置目錄。 | |
PLAYWRIGHT_JSON_OUTPUT_NAME | outputFile | 輸出檔案的基本檔名,相對於輸出目錄。 | JSON 報告將打印到 stdout。 |
PLAYWRIGHT_JSON_OUTPUT_FILE | outputFile | 輸出檔案的完整路徑。如果已定義,PLAYWRIGHT_JSON_OUTPUT_DIR 和 PLAYWRIGHT_JSON_OUTPUT_NAME 將被忽略。 | JSON 報告將打印到 stdout。 |
JUnit reporter
JUnit reporter 產生 JUnit 風格的 xml 報告。
很可能您想將報告寫入 xml 文件。當使用 --reporter=junit
執行時,使用 PLAYWRIGHT_JUNIT_OUTPUT_NAME
環境變數:
- Bash
- PowerShell
- Batch
PLAYWRIGHT_JUNIT_OUTPUT_NAME=results.xml npx playwright test --reporter=junit
$env:PLAYWRIGHT_JUNIT_OUTPUT_NAME="results.xml"
npx playwright test --reporter=junit
set PLAYWRIGHT_JUNIT_OUTPUT_NAME=results.xml
npx playwright test --reporter=junit
在設定檔案中,直接傳遞選項:
import { defineConfig } from '@playwright/test';
export default defineConfig({
reporter: [['junit', { outputFile: 'results.xml' }]],
});
JUnit 報告支援以下配置選項和環境變數:
Environment Variable Name | Reporter Config Option | Description | Default |
---|---|---|---|
PLAYWRIGHT_JUNIT_OUTPUT_DIR | 儲存輸出檔案的目錄。如果未指定輸出檔案則忽略。 | cwd 或 config 目錄。 | |
PLAYWRIGHT_JUNIT_OUTPUT_NAME | outputFile | 輸出檔案的基本檔名,相對於輸出目錄。 | JUnit 報告會列印到 stdout。 |
PLAYWRIGHT_JUNIT_OUTPUT_FILE | outputFile | 輸出檔案的完整路徑。如果已定義,PLAYWRIGHT_JUNIT_OUTPUT_DIR 和 PLAYWRIGHT_JUNIT_OUTPUT_NAME 將被忽略。 | JUnit 報告會列印到 stdout。 |
PLAYWRIGHT_JUNIT_STRIP_ANSI | stripANSIControlSequences | 是否在將文字寫入報告之前移除 ANSI 控制序列。 | 預設情況下,輸出文字會原樣添加。 |
PLAYWRIGHT_JUNIT_INCLUDE_PROJECT_IN_TEST_NAME | includeProjectInTestName | 是否在每個測試案例的名稱前綴中包含 Playwright 專案名稱。 | 預設情況下不包含。 |
PLAYWRIGHT_JUNIT_SUITE_ID | 根 <testsuites/> 報告條目上的 id 屬性值。 | 空字串。 | |
PLAYWRIGHT_JUNIT_SUITE_NAME | 根 <testsuites/> 報告條目上的 name 屬性值。 | 空字串。 |
GitHub Actions 註釋
您可以使用內建的 github
reporter 在 GitHub Actions 執行時獲取自動失敗註釋。
請注意,所有其他報告器也可以在 GitHub Actions 上工作,但不提供註釋。此外,如果使用矩陣策略執行測試,不建議使用此註釋類型,因為堆疊追蹤失敗會倍增並模糊 GitHub 檔案檢視。
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。
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。
import { defineConfig } from '@playwright/test';
export default defineConfig({
reporter: './my-awesome-reporter.ts',
});
或者只需將 reporter 文件路徑作為 --reporter
命令行選項傳遞:
npx playwright test --reporter="./myreporter/my-awesome-reporter.ts"