Reporters

简介

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 上使用不同的报告器。例如,在 CI 上使用简洁的 'dot' 报告器来避免过多的输出。

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

内置 reporters

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

List 报告器

List 报告器是默认的(在 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 }]],
});

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

环境变量名称 报告配置选项 描述 默认值

PLAYWRIGHT_LIST_PRINT_STEPS

printSteps

是否将每个步骤单独打印在一行。

false

PLAYWRIGHT_FORCE_TTY

是否生成适合实时终端的输出。如果指定了数字,它还将用作终端宽度。

当终端处于 TTY 模式时为 true,否则为 false

FORCE_COLOR

是否生成带有颜色的输出。

当终端处于 TTY 模式时为 true,否则为 false

Line 报告器

行报告比列表报告更简洁。它使用一行来报告最后完成的测试,并在发生失败时打印错误。行报告适用于大型测试套件,它展示了进度,但不会通过列出所有测试来干扰输出。

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
环境变量名称 Reporter 配置选项 描述 默认值

PLAYWRIGHT_FORCE_TTY

是否生成适合实时终端的输出。如果指定了数字,它还将作为终端宽度使用。

当终端处于 TTY 模式时为 true,否则为 false

FORCE_COLOR

是否生成彩色输出。

当终端处于 TTY 模式时为 true,否则为 false

Dot 报告器

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·············································

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

字符 描述

·

Passed

F

Failed

x

Failed or timed out - and will be retried

±

Passed on retry (flaky)

T

Timed out

°

Skipped

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

环境变量名称 报告配置选项 描述 默认值

PLAYWRIGHT_FORCE_TTY

是否生成适合实时终端的输出。如果指定了数字,它还将用作终端宽度。

在 TTY 模式下为 true,否则为 false

FORCE_COLOR

是否生成彩色输出。

在 TTY 模式下为 true,否则为 false

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

如果您将附件从 data 文件夹上传到其他位置,可以使用 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 报告支持以下配置选项和环境变量:

环境变量名称 报告配置选项 描述 默认值

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 或任何可用端口

PLAYWRIGHT_HTML_ATTACHMENTS_BASE_URL

attachmentsBaseURL

上传附件的单独位置,仅在报告和数据分开上传时需要。

data/

Blob 报告器

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

npx playwright test --reporter=blob

默认情况下,报告会写入 package.json 目录中的 blob-report 目录,或者在当前工作目录中(如果没有找到 package.json)。报告文件名类似于 report-<hash>.zip,或者在使用分片时为 report-<hash>-<shard_number>.zip。其中,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 报告支持以下配置选项和环境变量:

环境变量名称 Reporter 配置选项 描述 默认值

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

  • 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

在配置文件中,直接传递选项:

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

export default defineConfig({
  reporter: [['json', { outputFile: 'results.json' }]],
});

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

环境变量名称 报告配置选项 描述 默认值

PLAYWRIGHT_JSON_OUTPUT_DIR

输出文件的保存目录。如果指定了输出文件,则此选项被忽略。

当前工作目录或配置目录

PLAYWRIGHT_JSON_OUTPUT_NAME

outputFile

输出文件的基础文件名,相对于输出目录。

JSON 报告将打印到标准输出 (stdout)。

PLAYWRIGHT_JSON_OUTPUT_FILE

outputFile

输出文件的完整路径。如果定义了此选项,将忽略 PLAYWRIGHT_JSON_OUTPUT_DIR 和 PLAYWRIGHT_JSON_OUTPUT_NAME。

JSON 报告将打印到标准输出 (stdout)。

JUnit 报告器

JUnit 报告生成 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

在配置文件中,直接传递选项:

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

export default defineConfig({
  reporter: [['junit', { outputFile: 'results.xml' }]],
});

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

环境变量名称 报告配置选项 描述 默认值

PLAYWRIGHT_JUNIT_OUTPUT_DIR

保存输出文件的目录。如果未指定输出文件,则会被忽略。

当前工作目录或配置目录

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 文件视图。

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

自定义 reporters

您可以通过实现一个包含一些报告方法的类来创建自定义报告器。了解更多关于 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"

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

  • Allure Reporter

  • GitHub Actions Reporter

  • Mail Reporter

  • ReportPortal

  • Monocart