Playwright-html-report源码解析

news2024/11/26 17:23:53

 执行命令生成html格式报告

 Playwright在执行完成测试,支持生成html格式的测试报告,如下图所示,使用"npx playwright test"执行测试,执行完成后,会提示“npx playwright show-report”命令。执行该命令,在http://localhost:9323地址上启动了一个web应用,该应用显示的就是生成的html报告。

生成的html报告内容如下所示:

点击某个test case,可以查看该case具体的执行步骤信息,如下图所示:

html-report源码解释

  那么playwright是如何生产html格式报告的呢?下载playwright source code,在packages下面有个html-reporter的目录,该目录下的代码选用了react框架,构建工具是vite。执行"npm run build"命令,可以build出html-reporter@0.0.0的lib,供其他模块使用。

  查看html-reporter的源码,可以看到html报告中的UI就是有react构建的,以html报告的header为例,header中包含了一个search框,另外,显示了All xx,Passed xx,Failed xx,Flaky xx,Skipped xx.查看headerView.tsx文件,内容如下所示:截图一本质上就是实现search检索框,截图二就是实现不同状态的tests数量显示。总结而言,html格式测试报告的UI是由react构建的。

  report-html目录有下多个组件,例如headerView,testCaseView,testFileView等,这些View最终都汇聚到reportView中。  要生成html格式报告,光用react还不行,还需要有测试结果相关的数据,才能渲染出期望结果。测试结果需要在测试执行过程中,测试执行结束后,收集到整个测试相关数据,然后调用

  Indext.tsx是应用的入口文件,主要内容如下所示:获取zip格式的report数据信息文件,读取文件内容,获取到json格式的数据信息,report.json。这些数据用于UI上测试结果数据信息显示,该文件中return的是<ReportView report={report}></ReportView>。

  zip数据信息来源于window.playwrightReportBase64.ZipReport 类实现了 LoadedReport 接口,它负责从ZIP归档中加载报告数据。报告数据存储在一个Base64编码的URI中,这个URI通过 window 对象的 playwrightReportBase64 属性提供。总结而言,report 数据来源于一个ZIP归档,该归档被编码为Base64字符串,并存储在全局 window 对象的一个属性中。ZipReport 类负责解析这个归档,并提取出所需的报告数据。

playwrightReportBase64从哪里生成

 从html-report的source code可以看到,读取的数据文件是从playwrightReportBase64 URL地址上获取的。那么,在哪里生成了这个数据文件呢?查看playwright/pakcages/playwright/src/reporter目录下,有一个html.ts文件,该文件主要负责收集测试过程中生成的测试数据。下面是部分source code,可以看到收集到数据后,被写入到了playwrightReportBase64 URL地址上。

在runner目录下的reporters.ts文件中,import了所有的reporter,用于生成测试报告。

  在runner目录下的runner.ts文件中,有犯法runAllTests(),该方法source code如下所示,可以看到在执行测试过程中,将测试执行结果进行的保存,用于后续的测试报告UI显示。

  以上就是playwright html-report生成原理。总结而言,就是在测试执行过程中监听测试执行情况,并记录测试数据结果信息,用react构建html格式的测试报告UI,在渲染报告的时候通过读取window.playwrightReportBase64 URL地址,获取测试结果信息,并显示在UI页面上。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1835074.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AI大模型探索之路-实战篇:智能化IT领域搜索引擎之HuggingFace网站在线搜索

系列篇章&#x1f4a5; No.文章1AI大模型探索之路-实战篇&#xff1a;智能化IT领域搜索引擎的构建与初步实践2AI大模型探索之路-实战篇&#xff1a;智能化IT领域搜索引擎之GLM-4大模型技术的实践探索3AI大模型探索之路-实战篇&#xff1a;智能化IT领域搜索引擎之知乎网站数据获…

【乐吾乐2D可视化组态编辑器】导航

支持点击图元&#xff0c;切换画面或跳转链接。 乐吾乐2D可视化组态编辑器地址&#xff1a;https://2d.le5le.com/ 切换画面 1. 添加事件 2. 设置事件行为 事件行为"发送消息"&#xff0c;消息名选择"导航"。 3. 配置消息参数 消息参数&#xff0c;…

LeetCode 48.旋转图像

1.做题要求: 2.从此题我们可以看出规律为第几行要变为倒数第几列&#xff0c;所以我们最好先把二维数组存入一维数组中&#xff0c;然后先从最后一列遍历&#xff0c;把一维数组里的元素&#xff0c;依次等于遍历的元素即可: void rotate(int** matrix, int matrixSize, int*…

1984-2022年全球河流和湖泊表面积 (Surface Area of Rivers and Lakes,SARL)数据集

简介 Nyberg 等人&#xff08;2024 年&#xff09;开发的 "河流和湖泊表面积&#xff08;SARL&#xff09;"数据集对 38 年间&#xff08;1984-2022 年&#xff09;河流和湖泊的水面面积变化进行了全面分析。这个分辨率为 30 米的全球数据集为了解地表水的动态提供了…

一文读懂 Transformer 神经网络模型

今天我们来聊一下人工智能&#xff08;AI&#xff09;生态领域相关的技术 - Transformer 神经网络模型 。 自从最新的大型语言模型&#xff08;LLaM&#xff09;的发布&#xff0c;例如 OpenAI 的 GPT 系列、开源模型 Bloom 以及谷歌发布的 LaMDA 等&#xff0c;Transformer 模…

java线程安全 ,死锁以及线程状态的介绍与使用

线程安全 1.什么时候发生:当多个线程访问同一个资源时,导致了数据有问题1.线程安全问题–>线程不安全的代码 public class MyTicket implements Runnable{//定义100张票int ticket 100;Overridepublic void run() {while(true){if (ticket>0){System.out.println(Thre…

【PL理论】(31) 类型系统:静态分析 (Static Analysis) | 静态类型系统 | 什么是类型?

&#x1f4ad; 写在前面&#xff1a;本章我们将进入类型系统的讲解&#xff0c;回顾一下之前我们整理的 F- 语言&#xff0c;然后介绍一下静态分析和静态类型系统。讨论程序员该如何处理一些 bug&#xff0c;有没有完美的静态分析器。 目录 0x00 回顾&#xff1a;F- 语言 0x…

Part 4.4 树形动态规划

树形动态规划&#xff0c;即在树上进行的动态规划。 因为树的递归性质&#xff0c;树形动态规划一般都是递归求解的。 没有上司的舞会 题目描述 某大学有 n n n 个职员&#xff0c;编号为 1 … n 1\ldots n 1…n。 他们之间有从属关系&#xff0c;也就是说他们的关系就像…

Sectigo OV通配符SSL证书多少钱?

在网络安全领域&#xff0c;SSL数字证书起着至关重要的作用&#xff0c;尤其是在保护网站和用户信息方面。而Sectigo OV通配符证书是一种常用的数字证书之一&#xff0c;它能够为同一域名下的多个子域名提供保护&#xff0c;还能够通过企业验证来增强安全性。那么&#xff0c;对…

对input输入框的正则限制

一、0-100的整数 正则&#xff1a; const inputRules ref([{required: false,trigger: "blur",validator: (rule, value, callback) > {const reg /^[0-9]$/; // 只允许整数if ((0 < value && value < 100 && reg.test(value)) ||valu…

如何打开azw/azw3文件?两个步骤解决

要打开AZW或AZW3格式的电子书&#xff0c;遵循以下步骤&#xff0c;无论你是Windows、Mac用户&#xff0c;还是使用移动设备&#xff0c;都可以轻松阅读这些亚马逊Kindle专用格式的电子书&#xff1a; 第一步&#xff1a;安装NeatReader&#xff1a; 访问NeatReader的官方网站或…

MySQl基础入门⑯【操作视图】完结

上一边文章内容 表准备 CREATE TABLE Students (id INT AUTO_INCREMENT PRIMARY KEY,name VARCHAR(100),email VARCHAR(255),major VARCHAR(100),score int,phone_number VARCHAR(20),entry_year INT,salary DECIMAL(10, 2) );数据准备 INSERT INTO Students (id, name, ema…

谷歌可穿戴设备与生成式AI模型PH-LLM:打造个性化健康监测与指导的新纪元

随着移动和可穿戴设备的普及&#xff0c;它们为个人健康监测提供了前所未有的机会&#xff0c;通过收集步数、心率变异性、睡眠持续时间等连续、精细和纵向数据&#xff0c;帮助用户实时跟踪自己的健康状况。这些数据不仅可以用于简单的监测&#xff0c;还可以结合生成式人工智…

什么是模型轻量化?如何自动进行模型轻量化?

轻量化是已经是3D可视化业界人所共知的一个概念&#xff0c;虽然至今没有任何严谨的学术或者理论定义&#xff0c;但是这个概念已经几乎成为了行业的标准。它的大意是说&#xff0c;一个适用用于浏览器端渲染的模型数据&#xff0c;包括几何数据和行业数据&#xff0c;必然可以…

数据库、中台、报表平台之间的关系

我最近在接触报表平台和中台&#xff0c;发现他们跟我平常用的数据库不是一个东西。然后&#xff0c;我开始了摸索他们的过程&#xff0c;终于&#xff0c;我在理清他们的关系以后&#xff0c;简单写一个入门级的区分。 数据库&#xff1a; 定义&#xff1a; 数据库是被长期存…

MySQL 下载及安装教程

MySQL是一款开源的关系数据库管理系统&#xff0c;被广泛应用于各种应用程序和网站的数据管理中。以下是下载和安装MySQL的详细步骤。 1. 访问MySQL官方网站 首先&#xff0c;打开你的浏览器&#xff0c;访问MySQL官方网站&#xff1a; MySQL官方网站: https://www.mysql.com …

同三维T80004EHU 高清HDMI/USB编码器

1路HDMI或1路USB输入&#xff0c;带1路3.5音频输入&#xff0c;高清1080P60 来百度APP畅享高清图片 产品简介&#xff1a; 同三维T80004EHU 高清 HDMI/USB编码器是一款1路HDMI或1路USB高清编码器&#xff0c;。可将 HDMI 或USB视频源编码压缩成网络流&#xff0c;通过有线网络…

springboot 3.x 之 集成rabbitmq实现动态发送消息给不同的队列

背景 实际项目中遇到针对不同类型的消息&#xff0c;发送消息到不同的队列&#xff0c;而且队列可能还不存在&#xff0c;需要动态创建&#xff0c;于是写了如下代码&#xff0c;实践发现没啥问题&#xff0c;这里分享下。 环境 springboot 3.2 JDK 17 rabbitMQ模型介绍 图片…

银河麒麟系统升级openssh至9.7p1

银河麒麟系统升级openssh至9.7p1 升级过程建议参照链接 https://blog.csdn.net/zt19820204/article/details/137877652 当前环境 开始安装 # 1.查看当前服务器的openssh版本 ssh -V# 2.openssh下载地址 https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/# 3.升级opens…