报告者
测试运行器在测试执行期间通知报告者各种事件。报告者所有方法都是可选的。
您可以通过实现包含某些报告者方法的类来创建自定义报告者。确保将此类导出为默认值。
- 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() 使用包含所有其他套件和测试的根套件调用一次。 了解有关 套件层次结构 的更多信息。
- reporter.onTestBegin() 为每次测试运行调用。 它给出了一个将要执行的 TestCase 和一个几乎为空的 TestResult。 测试结果将在测试运行时填充(例如,使用步骤和标准输入/输出),并在测试完成后获得最终的
status
。 - reporter.onStepBegin() 和 reporter.onStepEnd() 为测试中的每个执行步骤调用。 当执行步骤时,测试运行尚未完成。
- reporter.onTestEnd() 在测试运行完成后调用。 此时,TestResult 已完成,您可以使用 testResult.status、testResult.error 等。
- reporter.onEnd() 在所有应运行的测试完成后调用一次。
- reporter.onExit() 在测试运行器退出之前立即调用。
此外,当在工作进程中生成标准输出时(可能在测试执行期间)会调用 reporter.onStdOut() 和 reporter.onStdErr(),并且当测试执行之外出现问题时会调用 reporter.onError()。
如果您的自定义报告者没有打印任何内容到终端,请实现 reporter.printsToStdio() 并返回 false
。 这样,Playwright 除了您的自定义报告者之外,还会使用一个标准终端报告者来增强用户体验。
合并报告 API 说明
当通过 merge-reports
CLI 命令合并多个 blob
报告时,会调用相同的 Reporter API 来生成最终报告,并且所有现有报告者都应该在没有任何更改的情况下工作。 不过,也有一些细微的差别可能会影响一些自定义报告者。
- 来自不同分片的项目始终保持为单独的 TestProject 对象。 例如,如果项目“桌面 Chrome”在 5 台机器上进行分片,则配置传递到 reporter.onBegin() 中时,将有 5 个具有相同名称的项目实例。
方法
onBegin
添加于:v1.10在运行测试之前调用一次。 所有测试都已发现并放入 Suite 的层次结构中。
用法
reporter.onBegin(config, suite);
参数
-
config
FullConfig#解析的配置。
-
包含所有项目、文件和测试用例的根套件。
onEnd
添加于:v1.10在所有测试运行完成后或测试被中断后调用。 请注意,此方法可能会返回 Promise,并且 Playwright Test 将等待它。 报告者可以覆盖状态,从而影响测试运行器的退出代码。
用法
await reporter.onEnd(result);
参数
result
Object#-
status
"passed" | "failed" | "timedout" | "interrupted"测试运行状态。
-
startTime
[日期]测试运行开始墙上时间。
-
duration
number测试运行持续时间(毫秒)。
status
可以是以下之一'passed'
- 一切按预期进行。'failed'
- 任何测试都失败了。'timedout'
- 已达到 testConfig.globalTimeout。'interrupted'
- 被用户中断。
-
返回值
onError
添加于:v1.10在某些全局错误时调用,例如工作进程中的未处理异常。
用法
reporter.onError(error);
参数
onExit
添加于:v1.33在测试运行器退出之前立即调用。 此时,所有报告者都已收到 reporter.onEnd() 信号,因此所有报告都应构建完成。 您可以在此挂钩中运行上传报告的代码。
用法
await reporter.onExit();
返回值
onStdErr
添加于:v1.10当工作进程中向标准错误写入内容时调用。
用法
reporter.onStdErr(chunk, test, result);
参数
-
输出块。
-
正在运行的测试。 请注意,输出可能在没有测试运行时发生,在这种情况下,这将是 void。
-
result
void | TestResult#测试运行的结果,此对象在测试运行时填充。
onStdOut
添加于:v1.10当工作进程中向标准输出写入内容时调用。
用法
reporter.onStdOut(chunk, test, result);
参数
-
输出块。
-
正在运行的测试。 请注意,输出可能在没有测试运行时发生,在这种情况下,这将是 void。
-
result
void | TestResult#测试运行的结果,此对象在测试运行时填充。
onStepBegin
添加于:v1.10当工作进程中某个测试步骤开始时调用。
用法
reporter.onStepBegin(test, result, step);
参数
onStepEnd
添加于:v1.10当工作进程中某个测试步骤结束时调用。
用法
reporter.onStepEnd(test, result, step);
参数
onTestBegin
添加于:v1.10在工作进程中测试开始后调用。
用法
reporter.onTestBegin(test, result);
参数
-
已开始的测试。
-
result
TestResult#测试运行的结果,此对象在测试运行时填充。
onTestEnd
添加于:v1.10在工作进程中测试结束后调用。
用法
reporter.onTestEnd(test, result);
参数
-
已结束的测试。
-
result
TestResult#测试运行的结果。
printsToStdio
添加于:v1.10此报告程序是否使用 stdio 进行报告。如果它不使用 stdio,Playwright Test 可能会添加一些输出以增强用户体验。如果您的报告程序不打印到终端,强烈建议返回 false
。
用法
reporter.printsToStdio();
返回值