跳转到主要内容

报告器

简介

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

内置报告器

所有内置报告器都会显示有关失败的详细信息,主要区别在于成功运行时的详细程度。

列表报告器 (List reporter)

列表报告器是默认设置(CI 环境除外,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.config.ts
import { defineConfig } from '@playwright/test';

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

列表报告支持以下配置选项和环境变量:

环境变量名称报告器配置选项描述默认值
PLAYWRIGHT_LIST_PRINT_STEPSprintSteps是否将每个步骤打印在单独的一行上。false
PLAYWRIGHT_LIST_PRINT_FAILURES_INLINEprintFailuresInline是否在失败的测试之后立即打印失败详细信息,而不是在最后打印。false
PLAYWRIGHT_FORCE_TTY是否生成适合实时终端的输出。支持 true1false0[WIDTH][WIDTH]x[HEIGHT][WIDTH][WIDTH]x[HEIGHT] 指定 TTY 维度。当终端处于 TTY 模式时为 true,否则为 false
FORCE_COLOR是否生成彩色输出。当终端处于 TTY 模式时为 true,否则为 false
NO_COLOR是否禁用彩色输出 (no-color.org)。任何非空值都会禁用颜色。未设置

行报告器 (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

行报告支持以下配置选项和环境变量:

环境变量名称报告器配置选项描述默认值
PLAYWRIGHT_FORCE_TTY是否生成适合实时终端的输出。支持 true1false0[WIDTH][WIDTH]x[HEIGHT][WIDTH][WIDTH]x[HEIGHT] 指定 TTY 维度。当终端处于 TTY 模式时为 true,否则为 false
FORCE_COLOR是否生成彩色输出。当终端处于 TTY 模式时为 true,否则为 false
NO_COLOR是否禁用彩色输出 (no-color.org)。任何非空值都会禁用颜色。未设置

点报告器 (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·············································

每个运行的测试都会显示一个字符,表示其状态:

字符描述
·通过
F失败
×失败或超时 - 将进行重试
±重试通过(不稳定)
T超时
°已跳过

点报告支持以下配置选项和环境变量:

环境变量名称报告器配置选项描述默认值
PLAYWRIGHT_FORCE_TTY是否生成适合实时终端的输出。支持 true1false0[WIDTH][WIDTH]x[HEIGHT][WIDTH][WIDTH]x[HEIGHT] 指定 TTY 维度。当终端处于 TTY 模式时为 true,否则为 false
FORCE_COLOR是否生成彩色输出。当终端处于 TTY 模式时为 true,否则为 false
NO_COLOR是否禁用彩色输出 (no-color.org)。任何非空值都会禁用颜色。未设置

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

您还可以传递 .zip 压缩包——例如从 CI 构件中下载的压缩包。压缩包的顶层必须包含 index.html。Playwright 会将其解压到临时目录并提供报告。

npx playwright show-report playwright-report.zip

HTML 报告支持以下配置选项和环境变量:

环境变量名称报告器配置选项描述默认值
PLAYWRIGHT_HTML_TITLEtitle在生成的报告中显示的标题。默认不显示标题
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_URLattachmentsBaseURL上传 data 子目录附件的独立位置。仅在您将报告和 data 分别上传到不同位置时需要。data/
PLAYWRIGHT_HTML_NO_COPY_PROMPTnoCopyPrompt如果为 true,则禁用错误复制提示的渲染。支持 true1false0false
PLAYWRIGHT_HTML_NO_SNIPPETSnoSnippets如果为 true,则禁用操作日志中的代码片段渲染。如果存在顶层错误,则该包含代码片段的报告部分仍将呈现。支持 true1false0false
PLAYWRIGHT_HTML_DO_NOT_INLINE_ASSETSdoNotInlineAssets如果为 true,JavaScript、CSS 和报告数据将作为单独的文件与 index.html 一起写入,而不是内联嵌入。当在禁止内联脚本和样式的严格 内容安全策略 (CSP) 下提供报告时,请使用此选项。支持 true1false0false

Blob 报告器

Blob 报告包含有关测试运行的所有详细信息,以后可用于生成任何其他报告。它们的主要功能是促进分片测试的报告合并。

npx playwright test --reporter=blob

默认情况下,报告会被写入 package.json 所在目录或当前工作目录(如果未找到 package.json)中的 blob-report 目录。

报告文件名看起来像 report-<hash>.zip,或者在使用分片时为 report-<hash>-<shard_number>.zip。Hash 是一个可选值,由 --grep--grepInverted--projecttestConfig.tag 以及作为命令行参数传递的文件过滤器计算得出。该 Hash 保证了使用不同的命令行选项运行 Playwright 将产生不同的、但在运行之间保持稳定的报告名称。输出文件名可以在配置文件中覆盖,或通过 'PLAYWRIGHT_BLOB_OUTPUT_FILE' 环境变量传递。

当使用 blob 报告合并多个分片时,无需传递任何选项。

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

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

Blob 报告支持以下配置选项和环境变量:

环境变量名称报告器配置选项描述默认值
PLAYWRIGHT_BLOB_OUTPUT_DIRoutputDir保存输出的目录。在写入新报告之前,现有内容将被删除。blob-report
PLAYWRIGHT_BLOB_OUTPUT_NAMEfileName报告文件名。report-<project>-<hash>-<shard_number>.zip
PLAYWRIGHT_BLOB_OUTPUT_FILEoutputFile输出文件的完整路径。如果已定义,outputDirfileName 将被忽略。undefined

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_NAME 将被忽略。JSON 报告被打印到标准输出 (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_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 Actions 中运行时,您可以使用内置的 github 报告器来获取自动失败注解。

请注意,所有其他报告器也可以在 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 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"

以下是开源报告器实现列表,您在编写自己的报告器时可以参考: