报告器
简介
Playwright Test 提供了几种内置报告器以满足不同需求,并且支持自定义报告器。尝试内置报告器的最简单方法是使用 --reporter 命令行选项。
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',
});
内置报告器
所有内置报告器都显示有关失败的详细信息,主要区别在于成功运行时的详细程度。
列表报告器
列表报告器是默认的(在 CI 上,dot 报告器是默认的)。它会为每个正在运行的测试打印一行。
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 }]],
});
列表报告器支持以下配置选项和环境变量
| 环境变量名称 | 报告器配置选项 | 描述 | 默认值 |
|---|---|---|---|
PLAYWRIGHT_LIST_PRINT_STEPS | printSteps | 是否将每个步骤打印在单独的行上。 | false |
PLAYWRIGHT_FORCE_TTY | 是否生成适合实时终端的输出。支持 true、1、false、0、[WIDTH] 和 [WIDTH]x[HEIGHT]。[WIDTH] 和 [WIDTH]x[HEIGHT] 指定 TTY 的尺寸。 | 当终端处于 TTY 模式时为 true,否则为 false。 | |
FORCE_COLOR | 是否生成彩色输出。 | 当终端处于 TTY 模式时为 true,否则为 false。 |
行报告器
行报告器比列表报告器更简洁。它使用一行报告最后一个完成的测试,并在发生失败时打印失败信息。行报告器对于大型测试套件很有用,它可以显示进度但不会通过列出所有测试来刷屏输出。
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
行报告器支持以下配置选项和环境变量
| 环境变量名称 | 报告器配置选项 | 描述 | 默认值 |
|---|---|---|---|
PLAYWRIGHT_FORCE_TTY | 是否生成适合实时终端的输出。支持 true、1、false、0、[WIDTH] 和 [WIDTH]x[HEIGHT]。[WIDTH] 和 [WIDTH]x[HEIGHT] 指定 TTY 的尺寸。 | 当终端处于 TTY 模式时为 true,否则为 false。 | |
FORCE_COLOR | 是否生成彩色输出。 | 当终端处于 TTY 模式时为 true,否则为 false。 |
点报告器
点报告器非常简洁 - 每个成功的测试运行只生成一个字符。它是 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·············································
为已运行的每个测试显示一个字符,表示其状态
| 字符 | 描述 |
|---|---|
· | 通过 |
F | 失败 |
× | 失败或超时 - 并将重试 |
± | 重试时通过(易变的) |
T | 超时 |
° | 已跳过 |
点报告器支持以下配置选项和环境变量
| 环境变量名称 | 报告器配置选项 | 描述 | 默认值 |
|---|---|---|---|
PLAYWRIGHT_FORCE_TTY | 是否生成适合实时终端的输出。支持 true、1、false、0、[WIDTH] 和 [WIDTH]x[HEIGHT]。[WIDTH] 和 [WIDTH]x[HEIGHT] 指定 TTY 的尺寸。 | 当终端处于 TTY 模式时为 true,否则为 false。 | |
FORCE_COLOR | 是否生成彩色输出。 | 当终端处于 TTY 模式时为 true,否则为 false。 |
HTML 报告器
HTML 报告器会生成一个自包含的文件夹,其中包含测试运行的报告,可以作为网页提供服务。
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 报告器支持以下配置选项和环境变量
| 环境变量名称 | 报告器配置选项 | 描述 | 默认值 |
|---|---|---|---|
PLAYWRIGHT_HTML_TITLE | title | 要显示在生成的报告中的标题。 | 默认不显示标题 |
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/ |
PLAYWRIGHT_HTML_NO_COPY_PROMPT | noCopyPrompt | 如果为 true,则禁用渲染错误提示的复制。支持 true、1、false 和 0。 | false |
PLAYWRIGHT_HTML_NO_SNIPPETS | noSnippets | 如果为 true,则禁用在操作日志中渲染代码片段。如果存在顶级错误,带有代码片段的报告部分仍将渲染。支持 true、1、false 和 0。 | false |
Blob 报告器
Blob 报告包含测试运行的所有详细信息,以后可用于生成任何其他报告。它们的主要功能是方便合并来自分片测试的报告。
npx playwright test --reporter=blob
默认情况下,报告会写入 package.json 目录下的 blob-report 文件夹,或者当前工作目录(如果没有找到 package.json)。
报告文件名形如 report-<hash>.zip 或 report-<hash>-<shard_number>.zip(在使用分片时)。哈希值是可选的,由作为命令行参数传递的 --grep、--grepInverted、--project、testConfig.tag 和文件过滤器计算得出。哈希值保证了使用不同命令行选项运行 Playwright 会生成不同但运行之间稳定的报告名称。输出文件名可以在配置文件中覆盖,或作为 'PLAYWRIGHT_BLOB_OUTPUT_FILE' 环境变量传递。
- 分片
- 环境
使用 blob 报告器合并多个分片时,无需传递任何选项。
import { defineConfig } from '@playwright/test';
export default defineConfig({
reporter: 'blob',
});
当在不同环境中运行测试时,您可能希望使用 testConfig.tag 来添加一个与环境相对应的全局标签。此标签将为合并后的报告带来清晰度,并用于生成唯一的 blob 报告名称。
import { defineConfig } from '@playwright/test';
export default defineConfig({
reporter: 'blob',
tag: process.env.CI_ENVIRONMENT_NAME, // for example "@APIv2" or "@linux"
});
Blob 报告支持以下配置选项和环境变量
| 环境变量名称 | 报告器配置选项 | 描述 | 默认值 |
|---|---|---|---|
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 报告器
JSON 报告器会生成一个包含测试运行所有信息的对象。
最有可能的是,您希望将 JSON 写入文件。当使用 --reporter=json 运行时,请使用 PLAYWRIGHT_JSON_OUTPUT_NAME 环境变量
- Bash
- PowerShell
- 批处理
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 报告支持以下配置选项和环境变量
| 环境变量名称 | 报告器配置选项 | 描述 | 默认值 |
|---|---|---|---|
PLAYWRIGHT_JSON_OUTPUT_DIR | 保存输出文件的目录。如果指定了输出文件,则忽略此项。 | cwd 或配置目录。 | |
PLAYWRIGHT_JSON_OUTPUT_NAME | outputFile | 相对于输出目录的输出文件的基本文件名。 | JSON 报告打印到标准输出。 |
PLAYWRIGHT_JSON_OUTPUT_FILE | outputFile | 输出文件的完整路径。如果定义了该路径,则会忽略 PLAYWRIGHT_JSON_OUTPUT_DIR 和 PLAYWRIGHT_JSON_OUTPUT_NAME。 | JSON 报告打印到标准输出。 |
JUnit 报告器
JUnit 报告器会生成 JUnit 风格的 XML 报告。
最有可能的是,您希望将报告写入 XML 文件。当使用 --reporter=junit 运行时,请使用 PLAYWRIGHT_JUNIT_OUTPUT_NAME 环境变量
- Bash
- PowerShell
- 批处理
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 报告支持以下配置选项和环境变量
| 环境变量名称 | 报告器配置选项 | 描述 | 默认值 |
|---|---|---|---|
PLAYWRIGHT_JUNIT_OUTPUT_DIR | 保存输出文件的目录。如果未指定输出文件,则忽略此项。 | cwd 或配置目录。 | |
PLAYWRIGHT_JUNIT_OUTPUT_NAME | outputFile | 相对于输出目录的输出文件的基本文件名。 | JUnit 报告打印到标准输出。 |
PLAYWRIGHT_JUNIT_OUTPUT_FILE | outputFile | 输出文件的完整路径。如果定义了该路径,则会忽略 PLAYWRIGHT_JUNIT_OUTPUT_DIR 和 PLAYWRIGHT_JUNIT_OUTPUT_NAME。 | JUnit 报告打印到标准输出。 |
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 报告器在 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 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 命令行选项传递
npx playwright test --reporter="./myreporter/my-awesome-reporter.ts"
以下是一些您可以参考的开源报告器实现的简短列表,以帮助您编写自己的报告器