首页 > web前端 > js教程 > 在 Playwright HTML 报告中显示元数据:完整指南

在 Playwright HTML 报告中显示元数据:完整指南

Barbara Streisand
发布: 2024-12-30 21:13:09
原创
996 人浏览过

Playwright 是一个强大的测试框架,但它的 HTML 报告对于复杂的项目来说可能感觉很简单。在报告标题中显示提交消息、作者详细信息或 CI 构建链接等元数据不是很好吗?以下是实现这一目标的方法以及对 Playwright 功能的一些更深入的见解。

了解剧作家元数据

Playwright 文档提到了用于配置的元数据字段:

import { defineConfig } from '@playwright/test';

export default defineConfig({
  metadata: 'acceptance tests',
});
登录后复制
登录后复制

在撰写本文时(Playwright v1.49),它指出:

将直接放入序列化为 JSON 的测试报告中的元数据

但有一个问题:添加此配置不会在报告中显示任何元数据。如果您使用 TypeScript,您还会看到所提供示例的错误:

类型“字符串”不可分配给类型“元数据”。

显然,文档已经过时,但报告中的元数据确实是可能的。

真实的元数据配置

深入研究 Playwright 的源代码后,我发现了 HTML 报告支持的实际字段:

export type Metainfo = {
  'revision.id'?: string;
  'revision.author'?: string;
  'revision.email'?: string;
  'revision.subject'?: string;
  'revision.timestamp'?: number | Date;
  'revision.link'?: string;
  'ci.link'?: string;
  'timestamp'?: number;
};
登录后复制
登录后复制

只能显示这些字段。让我们在 playwright.config.ts 中配置它们:

import { defineConfig } from '@playwright/test';

export default defineConfig({
  reporter: 'html',
  metadata: {
    'revision.id': 'adcb0c51debdbe96a6a836e2ead9d40a859f6438',
    'revision.author': 'John Smith',
    'revision.email': 'john.smith@gmail.com',
    'revision.subject': 'Acceptance tests',
    'revision.timestamp': Date.now(),
    'revision.link': 'https://github.com/microsoft/playwright/pull/12734',
    'ci.link': 'https://github.com/microsoft/playwright/actions/workflows/tests_primary.yml',
    'timestamp': Date.now(),
  },
});
登录后复制
登录后复制

运行测试后,HTML 报告标题会精美地显示此元数据。

Show Metadata in Playwright HTML Report: A Complete Guide

自动化元数据填充

手动填充元数据字段并不实用,尤其是在 CI/CD 管道等动态环境中。自动化此过程可确保元数据准确且一致,无需手动操作。

第三方包

要自动化该过程,您可以利用任何提取 Git 提交信息的第三方包。这是一个简单的方法,让我们继续讨论更有趣的第二个选项。

利用 Playwright 的隐藏插件系统

Playwright 最有趣的发现之一是它的隐藏插件系统。虽然没有正式记录,但它提供了一种通过自定义插件扩展 Playwright 功能的方法。

我在审视剧作家本身的过程中得到了这个见解。 Playwright 支持隐藏配置字段“@playwright/test”,您可以在其中定义插件。

这是启用 gitCommitInfo 插件的示例:

import { defineConfig } from '@playwright/test';
import { gitCommitInfo } from 'playwright/lib/plugins';

export default defineConfig({
  reporter: 'html',
  // @ts-expect-error
  '@playwright/test': { 
    plugins: [gitCommitInfo()] 
  },
});
登录后复制

gitCommitInfo 插件有什么作用?

此插件提取 Git 提交详细信息并填充 HTML 报告中的元数据字段,包括:

  • 提交哈希
  • 提交消息
  • 作者姓名和电子邮件
  • 时间戳

此外,当在 CI/CD 环境中运行时,该插件可以使用标准环境变量(如 GITHUB_SHA 或 CI_COMMIT_SHA)自动填充字段。

启用插件并运行测试后,我得到了以下报告,其中自动填充了元数据:

Show Metadata in Playwright HTML Report: A Complete Guide

其他插件

我很好奇,Playwright还有其他隐藏的插件吗?
在plugins目录中只有一个插件——webServerPlugin。它允许在运行测试时启动和停止内置 Web 服务器。事实上,当你定义 config.webServer 选项时,这个插件是在幕后使用的。因此,插件系统在 Playwright 内部使用,尽管没有记录供公共使用。

插件系统是在早期版本的 Playwright 中引入的,但在某些时候被隐藏了。不幸的是,目前还没有计划公开它。

对元数据使用自定义函数

如果您希望在不依赖插件的情况下自动填充元数据,则可以使用自定义函数来实现。我改编了 gitCommitInfo 插件中的 gitStatusFromCLI() 函数,使其可以独立使用:

import { defineConfig } from '@playwright/test';

export default defineConfig({
  metadata: 'acceptance tests',
});
登录后复制
登录后复制

使用该函数填充 Playwright 配置中的元数据:

export type Metainfo = {
  'revision.id'?: string;
  'revision.author'?: string;
  'revision.email'?: string;
  'revision.subject'?: string;
  'revision.timestamp'?: number | Date;
  'revision.link'?: string;
  'ci.link'?: string;
  'timestamp'?: number;
};
登录后复制
登录后复制

运行测试后,我得到了包含填充元数据的相同 HTML 报告:

Show Metadata in Playwright HTML Report: A Complete Guide

这种方法使您可以完全控制元数据自动化,而无需依赖内部 Playwright 功能。

优化并行测试

一切看起来都不错,但是上面的代码存在性能问题。你能猜出问题是什么吗?

剧作家在工人中进行测试。当每个worker启动时,它会导入Playwright配置。如果 Playwright 配置执行繁重的操作(例如获取 Git 数据),它会减慢工作人员的速度。此外,多次执行该命令是没有意义的,因为它会返回相同的结果。

您可以通过仅在主worker中执行元数据函数来优化它。主worker可以通过空的TEST_WORKER_INDEX环境变量来检测:

import { defineConfig } from '@playwright/test';

export default defineConfig({
  reporter: 'html',
  metadata: {
    'revision.id': 'adcb0c51debdbe96a6a836e2ead9d40a859f6438',
    'revision.author': 'John Smith',
    'revision.email': 'john.smith@gmail.com',
    'revision.subject': 'Acceptance tests',
    'revision.timestamp': Date.now(),
    'revision.link': 'https://github.com/microsoft/playwright/pull/12734',
    'ci.link': 'https://github.com/microsoft/playwright/actions/workflows/tests_primary.yml',
    'timestamp': Date.now(),
  },
});
登录后复制
登录后复制

这可确保有效填充元数据而不影响性能。


结论

将元数据添加到 Playwright HTML 报告中是可能的,尽管没有详细记录。您可以手动配置元数据、利用隐藏的插件系统或实施自定义解决方案。

关键要点

  • 元数据字段仅限于特定键(revision.id、ci.link 等)。
  • 使用 Playwright 的隐藏插件或自定义脚本自动化元数据。
  • 通过仅在主工作线程中执行元数据逻辑来优化并行测试。

根据本文的研究,我向 Playwright 存储库提出了拉取请求,提出元数据字段的文档改进。

您是否尝试过将元数据添加到剧作家报告中?在评论中分享您的经验或挑战!

以上是在 Playwright HTML 报告中显示元数据:完整指南的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:dev.to
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板