Playwright Test 自带了一些适用于不同需求的内置 reporter,也支持提供自定义 reporter。尝试内置 reporter 最简单的方法,是传入 --reporter 命令行选项。 citeturn434691view0
npx playwright test --reporter=line如果你需要更细粒度的控制,可以在配置文件中以编程方式指定 reporter。 citeturn434691view0
import { defineConfig } from '@playwright/test';export default defineConfig({ reporter: 'line',});多个 reporters
Section titled “多个 reporters”你可以同时使用多个 reporter。例如你可以使用 'list' 获得较好的终端输出,同时使用 'json' 获取包含测试结果的完整 JSON 文件。 citeturn434691view0
import { defineConfig } from '@playwright/test';
export default defineConfig({ reporter: [ ['list'], ['json', { outputFile: 'test-results.json' }] ],});在 CI 上使用 reporter
Section titled “在 CI 上使用 reporter”你可以在本地和 CI 上使用不同的 reporter。例如,使用简洁的 'dot' reporter 可以避免过多输出。这也是 CI 上的默认值。 citeturn434691view0
import { defineConfig } from '@playwright/test';
export default defineConfig({ // 在 CI 上使用简洁的 'dot',本地运行时默认使用 'list' reporter: process.env.CI ? 'dot' : 'list',});内置 reporters
Section titled “内置 reporters”所有内置 reporter 都会显示失败的详细信息,它们之间的主要区别在于成功运行时的详细程度。 citeturn434691view0
List reporter
Section titled “List reporter”List reporter 是默认 reporter(CI 上默认是 dot reporter)。它会为每个正在运行的测试打印一行。 citeturn434691view0
npx playwright test --reporter=listimport { defineConfig } from '@playwright/test';
export default defineConfig({ reporter: 'list',});下面是一次测试运行过程中的输出示例。失败信息会列在末尾。 citeturn434691view0
npx playwright test --reporter=listRunning 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:你可以通过传入下面这个配置项来启用 step 渲染。 citeturn434691view0
import { defineConfig } from '@playwright/test';
export default defineConfig({ reporter: [['list', { printSteps: true }]],});List reporter 支持以下配置项和环境变量: citeturn434691view0
PLAYWRIGHT_LIST_PRINT_STEPS/printSteps:是否将每个步骤单独打印为一行。默认值:falsePLAYWRIGHT_FORCE_TTY:是否输出适合实时终端的内容。支持true、1、false、0、[WIDTH]和[WIDTH]x[HEIGHT]。[WIDTH]与[WIDTH]x[HEIGHT]可指定 TTY 尺寸。默认值:终端在 TTY 模式下为true,否则为falseFORCE_COLOR:是否输出彩色内容。默认值:终端在 TTY 模式下为true,否则为false
Line reporter
Section titled “Line reporter”Line reporter 比 list reporter 更简洁。它会使用单行来报告最近完成的测试,并在失败发生时立即打印失败信息。Line reporter 适用于大型测试套件,因为它能展示进度,同时不会因为列出全部测试而刷屏。 citeturn434691view0
npx playwright test --reporter=lineimport { defineConfig } from '@playwright/test';
export default defineConfig({ reporter: 'line',});下面是一次测试运行过程中的输出示例。失败信息会内联显示。 citeturn434691view0
npx playwright test --reporter=lineRunning 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 .gitignoreLine reporter 支持以下配置项和环境变量: citeturn698822view0
PLAYWRIGHT_FORCE_TTY:是否输出适合实时终端的内容。支持true、1、false、0、[WIDTH]和[WIDTH]x[HEIGHT]FORCE_COLOR:是否输出彩色内容
Dot reporter
Section titled “Dot reporter”Dot reporter 非常简洁——每个成功测试仅输出一个字符。它是 CI 上的默认值,适合不希望看到大量输出的场景。 citeturn434691view0turn698822view0
npx playwright test --reporter=dotimport { defineConfig } from '@playwright/test';
export default defineConfig({ reporter: 'dot',});下面是一次测试运行过程中的输出示例。失败信息会列在末尾。 citeturn434691view0turn698822view0
npx playwright test --reporter=dotRunning 124 tests using 6 workers······F·············································每个已运行的测试都会显示一个字符,用于表示其状态: citeturn434691view0turn698822view0
| 字符 | 说明 |
|---|---|
· | 通过 |
F | 失败 |
× | 失败或超时,并将进行重试 |
± | 重试后通过(flaky) |
T | 超时 |
° | 跳过 |
Dot reporter 支持以下配置项和环境变量: citeturn698822view0
PLAYWRIGHT_FORCE_TTYFORCE_COLOR
HTML reporter
Section titled “HTML reporter”HTML reporter 会生成一个自包含文件夹,其中包含一次测试运行的报告,并可作为网页进行服务。 citeturn698822view0
npx playwright test --reporter=html默认情况下,如果有测试失败,HTML 报告会自动打开。你可以通过 Playwright 配置中的 open 属性,或 PLAYWRIGHT_HTML_OPEN 环境变量控制这一行为。可选值包括 always、never 和 on-failure(默认值)。你也可以配置用于提供 HTML 报告服务的 host 和 port。 citeturn698822view0
import { defineConfig } from '@playwright/test';
export default defineConfig({ reporter: [['html', { open: 'never' }]],});默认情况下,报告会写入当前工作目录中的 playwright-report 文件夹。你可以使用 PLAYWRIGHT_HTML_OUTPUT_DIR 环境变量或 reporter 配置来覆盖该位置。 citeturn698822view0
import { defineConfig } from '@playwright/test';
export default defineConfig({ reporter: [['html', { outputFolder: 'my-report' }]],});如果你把 data 子目录中的附件上传到其他位置,可以使用 attachmentsBaseURL 选项,让 HTML 报告知道去哪里查找这些附件。 citeturn698822view0
import { defineConfig } from '@playwright/test';export default defineConfig({ reporter: [['html', { attachmentsBaseURL: 'https://external-storage.com/' }]],});快速打开最近一次测试运行报告的方法如下: citeturn698822view0
npx playwright show-report如果使用的是自定义文件夹名称: citeturn698822view0
npx playwright show-report my-report你也可以传入一个 .zip 归档文件,例如从 CI 构件中下载的报告。该归档必须在顶层包含 index.html。Playwright 会将其解压到一个临时目录并提供服务。 citeturn698822view0
npx playwright show-report playwright-report.zipHTML reporter 支持以下配置项和环境变量: citeturn698822view0
PLAYWRIGHT_HTML_TITLE/title:显示在生成报告中的标题。默认:不显示标题PLAYWRIGHT_HTML_OUTPUT_DIR/outputFolder:保存报告的目录。默认:playwright-reportPLAYWRIGHT_HTML_OPEN/open:何时在浏览器中打开 HTML 报告,可选'always'、'never'或'on-failure'。默认:'on-failure'PLAYWRIGHT_HTML_HOST/host:报告在浏览器中打开时所绑定的主机名。默认:localhostPLAYWRIGHT_HTML_PORT/port:报告在浏览器中打开时使用的端口。默认:9323,若不可用则使用任意可用端口PLAYWRIGHT_HTML_ATTACHMENTS_BASE_URL/attachmentsBaseURL:上传到单独位置的数据目录附件的基址。默认:data/PLAYWRIGHT_HTML_NO_COPY_PROMPT/noCopyPrompt:若为true,禁用错误的 Copy prompt 渲染。默认:falsePLAYWRIGHT_HTML_NO_SNIPPETS/noSnippets:若为true,禁用 action log 中的代码片段渲染。默认:falsePLAYWRIGHT_HTML_DO_NOT_INLINE_ASSETS/doNotInlineAssets:若为true,JavaScript、CSS 和报告数据会作为独立文件写在index.html旁边,而不是内联嵌入。适用于启用严格 CSP 且不允许内联脚本和样式的场景。默认:false
Blob reporter
Section titled “Blob reporter”Blob report 包含了测试运行的全部详细信息,之后可以用于生成其他任意类型的报告。它的主要作用是帮助合并来自分片测试的报告。 citeturn698822view0
npx playwright test --reporter=blob默认情况下,报告会写入 blob-report 目录,该目录位于 package.json 所在目录,或当前工作目录(若未找到 package.json)。报告文件名通常类似 report-<hash>.zip;使用分片时则类似 report-<hash>-<shard_number>.zip。hash 是一个可选值,由 --grep、--grepInverted、--project、testConfig.tag 以及命令行传入的文件过滤条件计算得出。这个 hash 可以保证:使用不同命令行选项运行 Playwright 时,会生成不同但在多次运行之间保持稳定的报告文件名。 citeturn698822view0
输出文件名可以在配置文件中覆盖,或通过 PLAYWRIGHT_BLOB_OUTPUT_FILE 环境变量传入。 citeturn698822view0
当使用 blob report 合并多个分片时,无需传入任何额外选项。 citeturn698822view0
import { defineConfig } from '@playwright/test';
export default defineConfig({ reporter: 'blob',});当你在不同环境中运行测试时,可能希望使用 testConfig.tag 添加一个与环境对应的全局标签。这个标签会让合并后的报告更清晰,并会用于生成唯一的 blob 报告名称。 citeturn698822view0
import { defineConfig } from '@playwright/test';
export default defineConfig({ reporter: 'blob', tag: process.env.CI_ENVIRONMENT_NAME, // 例如 "@APIv2" 或 "@linux"});Blob reporter 支持以下配置项和环境变量: citeturn698822view0
PLAYWRIGHT_BLOB_OUTPUT_DIR/outputDir:保存输出的目录。写入新报告前会删除现有内容。默认:blob-reportPLAYWRIGHT_BLOB_OUTPUT_NAME/fileName:报告文件名。默认:report-<project>-<hash>-<shard_number>.zipPLAYWRIGHT_BLOB_OUTPUT_FILE/outputFile:输出文件完整路径。若定义了该值,则outputDir和fileName会被忽略。默认:undefined
JSON reporter
Section titled “JSON reporter”JSON reporter 会输出一个包含测试运行全部信息的对象。 citeturn698822view0
通常你会希望把 JSON 写入文件。使用 --reporter=json 运行时,可以使用 PLAYWRIGHT_JSON_OUTPUT_NAME 环境变量: citeturn698822view0
PLAYWRIGHT_JSON_OUTPUT_NAME=results.json npx playwright test --reporter=jsonPowerShell
Section titled “PowerShell”$env:PLAYWRIGHT_JSON_OUTPUT_NAME="results.json"npx playwright testset PLAYWRIGHT_JSON_OUTPUT_NAME=results.jsonnpx playwright test在配置文件中,也可以直接传入选项: citeturn698822view0
import { defineConfig } from '@playwright/test';
export default defineConfig({ reporter: [['json', { outputFile: 'results.json' }]],});JSON reporter 支持以下配置项和环境变量: citeturn698822view0
PLAYWRIGHT_JSON_OUTPUT_DIR:保存输出文件的目录。若已指定输出文件,则会忽略。默认:cwd或配置目录PLAYWRIGHT_JSON_OUTPUT_NAME/outputFile:输出文件的基础文件名,相对于输出目录。默认:JSON 报告会打印到 stdoutPLAYWRIGHT_JSON_OUTPUT_FILE/outputFile:输出文件完整路径。若定义,则PLAYWRIGHT_JSON_OUTPUT_DIR和PLAYWRIGHT_JSON_OUTPUT_NAME会被忽略。默认:JSON 报告会打印到 stdout
JUnit reporter
Section titled “JUnit reporter”JUnit reporter 会生成 JUnit 风格的 XML 报告。 citeturn698822view0
通常你会希望把报告写入 XML 文件。使用 --reporter=junit 运行时,可以使用 PLAYWRIGHT_JUNIT_OUTPUT_NAME 环境变量: citeturn698822view0
PLAYWRIGHT_JUNIT_OUTPUT_NAME=results.xml npx playwright test --reporter=junitPowerShell
Section titled “PowerShell”$env:PLAYWRIGHT_JUNIT_OUTPUT_NAME="results.xml"npx playwright testset PLAYWRIGHT_JUNIT_OUTPUT_NAME=results.xmlnpx playwright test在配置文件中,也可以直接传入选项: citeturn698822view0
import { defineConfig } from '@playwright/test';
export default defineConfig({ reporter: [['junit', { outputFile: 'results.xml' }]],});JUnit reporter 支持以下配置项和环境变量: citeturn698822view0
PLAYWRIGHT_JUNIT_OUTPUT_DIR:保存输出文件的目录。若未指定输出文件,则会忽略。默认:cwd或配置目录PLAYWRIGHT_JUNIT_OUTPUT_NAME/outputFile:输出文件的基础文件名,相对于输出目录。默认:JUnit 报告打印到 stdoutPLAYWRIGHT_JUNIT_OUTPUT_FILE/outputFile:输出文件完整路径。若定义,则PLAYWRIGHT_JUNIT_OUTPUT_DIR和PLAYWRIGHT_JUNIT_OUTPUT_NAME会被忽略。默认:JUnit 报告打印到 stdoutPLAYWRIGHT_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 annotations
Section titled “GitHub Actions annotations”在 GitHub Actions 中运行时,你可以使用内置的 github reporter 自动生成失败注释。 citeturn698822view0
请注意,其他 reporter 也都可以在 GitHub Actions 中工作,但不会提供注释。此外,如果你使用 matrix strategy 运行测试,不建议使用这种注释方式,因为失败的堆栈跟踪会成倍增加,从而遮挡 GitHub 的文件视图。 citeturn698822view0
import { defineConfig } from '@playwright/test';export default defineConfig({ // 在 GitHub Actions CI 上使用 'github' 生成注释,再配合简洁的 'dot' // 本地运行时默认使用 'list' reporter: process.env.CI ? 'github' : 'list',});自定义 reporters
Section titled “自定义 reporters”你可以通过实现一个带有部分 reporter 方法的类来创建自定义 reporter。更多内容请参阅 Reporter API。 citeturn698822view0
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 使用这个 reporter。 citeturn698822view0
import { defineConfig } from '@playwright/test';
export default defineConfig({ reporter: './my-awesome-reporter.ts',});或者直接把 reporter 文件路径作为 --reporter 命令行参数传入: citeturn698822view0
npx playwright test --reporter="./myreporter/my-awesome-reporter.ts"下面是一份开源 reporter 实现的简短列表,在编写你自己的 reporter 时可以参考: citeturn698822view0
- Allure Reporter
- Github Actions Reporter
- Mail Reporter
- ReportPortal
- Monocart