Reporter
测试运行器(Test runner)会在测试执行过程中通知报告器(Reporter)各种事件。报告器的所有方法都是可选的。
你可以通过实现一个包含部分报告器方法的类来创建自定义报告器。请确保将此类作为默认导出(export default)。
- TypeScript
- JavaScript
import type {
Reporter, FullConfig, Suite, TestCase, TestResult, FullResult
} from '@playwright/test/reporter';
class MyReporter implements Reporter {
constructor(options: { customOption?: string } = {}) {
console.log(`my-awesome-reporter setup with customOption set to ${options.customOption}`);
}
onBegin(config: FullConfig, suite: Suite) {
console.log(`Starting the run with ${suite.allTests().length} tests`);
}
onTestBegin(test: TestCase) {
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;
// @ts-check
/** @implements {import('@playwright/test/reporter').Reporter} */
class MyReporter {
constructor(options) {
console.log(`my-awesome-reporter setup with customOption set to ${options.customOption}`);
}
onBegin(config, suite) {
console.log(`Starting the run with ${suite.allTests().length} tests`);
}
onTestBegin(test) {
console.log(`Starting test ${test.title}`);
}
onTestEnd(test, result) {
console.log(`Finished test ${test.title}: ${result.status}`);
}
onEnd(result) {
console.log(`Finished the run: ${result.status}`);
}
}
module.exports = MyReporter;
现在,使用 testConfig.reporter 来使用此报告器。了解更多关于 使用报告器 的信息。
import { defineConfig } from '@playwright/test';
export default defineConfig({
reporter: [['./my-awesome-reporter.ts', { customOption: 'some value' }]],
});
以下是报告器调用的典型顺序
- reporter.onBegin() 会被调用一次,参数为一个包含所有其他套件(suite)和测试的根套件。了解更多关于 套件层级 的信息。
- reporter.onTestBegin() 会在每次测试运行时被调用。它接收一个正在执行的 TestCase 对象,以及一个几乎为空的 TestResult 对象。测试结果会在测试运行期间被填充(例如包含步骤和标准输出/标准错误信息),并在测试结束时获得最终的
status。 - reporter.onStepBegin() 和 reporter.onStepEnd() 会针对测试中执行的每个步骤被调用。当步骤执行时,测试运行尚未结束。
- reporter.onTestEnd() 会在测试运行结束后被调用。此时 TestResult 已完整,你可以使用 testResult.status、testResult.error 等属性。
- reporter.onEnd() 会在所有需要运行的测试结束后被调用一次。
- reporter.onExit() 会在测试运行器退出前立即被调用。
此外,当工作进程(worker process)产生标准输出时会调用 reporter.onStdOut() 和 reporter.onStdErr()(可能在测试执行期间),当测试执行之外出现问题时会调用 reporter.onError()。
如果你的自定义报告器不会向终端打印任何内容,请实现 reporter.printsToStdio() 并返回 false。这样,Playwright 除了使用你的自定义报告器外,还会使用标准终端报告器之一,以提升用户体验。
报告器错误
Playwright 会吞掉自定义报告器方法中抛出的任何错误。如果你需要检测或处理报告器错误,必须自行封装并处理它们。
合并报告 API 注意事项
当通过 merge-reports CLI 命令合并多个 blob 报告时,会调用相同的 Reporter API 来生成最终报告,所有现有的报告器应该无需任何更改即可正常工作。不过,存在一些细微差别,可能会影响某些自定义报告器。
- 来自不同分片(shard)的项目始终作为独立的 TestProject 对象保存。例如,如果 'Desktop Chrome' 项目被分片到 5 台机器上,那么在传递给 reporter.onBegin() 的配置中,将存在 5 个同名的项目实例。
方法
onBegin
新增于: v1.10在运行测试前调用一次。所有测试都已被发现并放入 Suite(套件)层级中。
用法
reporter.onBegin(config, suite);
参数
-
configFullConfig#解析后的配置。
-
包含所有项目、文件和测试用例的根套件。
onEnd
新增于: v1.10在所有测试运行结束后,或测试被中断时调用。注意,此方法可以返回一个 Promise,Playwright Test 将会等待它完成。报告器可以覆盖状态,从而影响测试运行器的退出代码。
用法
await reporter.onEnd(result);
参数
-
-
status"passed" | "failed" | "timedout" | "interrupted"测试运行状态。
-
startTimeDate测试运行的起始挂钟时间。
-
durationnumber测试运行持续时间(毫秒)。
完整测试运行的结果,
status可以是以下之一:'passed'- 一切按预期进行。'failed'- 有测试失败。'timedout'- 已达到 testConfig.globalTimeout。'interrupted'- 被用户中断。
-
返回
onError
新增于: v1.10在出现全局错误时调用,例如工作进程中未捕获的异常。
用法
reporter.onError(error);
reporter.onError(error, workerInfo);
参数
-
错误信息。
-
workerInfoWorkerInfo (可选)添加于: v1.60#包含产生此错误的工作进程的信息。对于未与特定工作进程关联的错误,此项为
undefined。
onExit
新增于:v1.33在测试运行器退出前立即调用。此时所有报告器都已接收到 reporter.onEnd() 信号,因此所有报告应该已构建完成。你可以在此钩子中运行上传报告的代码。
用法
await reporter.onExit();
返回
onStdErr
新增于: v1.10当工作进程中的标准错误被写入内容时调用。
用法
reporter.onStdErr(chunk, test, result);
参数
-
输出的数据块。
-
正在运行的测试。注意,输出可能发生在没有测试运行时,这种情况下该参数为
void。 -
resultvoid | TestResult#测试运行的结果,此对象会在测试运行期间被填充。
onStdOut
新增于: v1.10当工作进程中的标准输出被写入内容时调用。
用法
reporter.onStdOut(chunk, test, result);
参数
-
输出的数据块。
-
正在运行的测试。注意,输出可能发生在没有测试运行时,这种情况下该参数为
void。 -
resultvoid | TestResult#测试运行的结果,此对象会在测试运行期间被填充。
onStepBegin
新增于: v1.10当工作进程中开始一个测试步骤时调用。
用法
reporter.onStepBegin(test, result, step);
参数
onStepEnd
新增于: v1.10当工作进程中结束一个测试步骤时调用。
用法
reporter.onStepEnd(test, result, step);
参数
onTestBegin
新增于: v1.10在工作进程中开始测试后调用。
用法
reporter.onTestBegin(test, result);
参数
-
已开始的测试。
-
resultTestResult#测试运行的结果,此对象会在测试运行期间被填充。
onTestEnd
新增于: v1.10在工作进程中结束测试后调用。
用法
reporter.onTestEnd(test, result);
参数
-
已结束的测试。
-
resultTestResult#测试运行的结果。
printsToStdio
新增于: v1.10该报告器是否使用标准输入输出(stdio)进行报告。如果不使用,Playwright Test 可能会添加一些输出以增强用户体验。如果你的报告器不向终端打印内容,强烈建议返回 false。
用法
reporter.printsToStdio();
返回