Playwright-html-report源码解析

 执行命令生成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页面上。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Qt Object:智能即时聊天室项目

目录 1.项目介绍 2.设计思路 3.Pro文件配置 4.项目演示 5.项目开源 项目介绍 智能即时聊天室系统&#xff08;AIChatProject&#xff09;是一个高效、灵活的即时通讯解决方案。它融合了百度的开源大型语言模型——文心一言&#xff0c;通过API接口实现深度集成。系统专为聊天和…

文件上传漏洞-下篇

一、白名单绕过 目录路径检测绕过 00截断 简介&#xff1a; 0x00是字符串的结束标识符&#xff0c;攻击者可以利用手动添加字符串标识符的方式来将后面的内容进行截断&#xff0c;而后面的内容又可以帮助我们绕过检测。 饶过条件 利用操作&#xff1a;Pass-12 要求&#xff…

关于application/x-www-form-urlencoded跟application/json请求的区别

当你的java方法是这样定义的 PostMapping("/rePushMedicalRecord") public String rePushMedicalRecord(RequestParam("topicId") String topicId){ } 参数是RequestParam接收&#xff0c;则请求时需要用application/x-www-form-urlencoded请求 如果是R…

多重排序【今日题记】

多重排序 多重排序题目分析思路代码代码结构体知识多重排序 需要对多个条件进行排序,因此可以称之为多重排序。 题目 某生物实验室记录了n种(n<=1000)病毒信息,每种病毒都有编号、传染性和致病性三个基本信息,编号是1000-9999的人工编号,其中的传染性和致病性是用0-10…

移动端的HSR技术

overdraw问题&#xff1a; overdraw顾名思义就是过度绘制&#xff0c;就是在渲染过程中**绘制一帧FBO&#xff08;或者RenderTarget&#xff09;**超过一次相同像素的现象!这个是CG的问题&#xff01;特别在是用来大量的透明混合的情况下会产生的&#xff0c;当然客户端andrio…

艾多美用“艾”为生命加油,献血活动回顾

用艾为生命加油 6月10日~16日&#xff0c;艾多美中国开启献血周活动&#xff0c;已经陆续收到来自烟台总部、山东、广东、河南、四川、重庆、贵阳&#xff0c;乌鲁木齐&#xff0c;吉林&#xff0c;等地区的艾多美员工、会员、经销商发来的爱心助力&#xff0c;截止到目前&…

KIVY BLOG Kivy tutorial 007: Introducing kv language

Kivy tutorial 007: Introducing kv language – Kivy Blog DECEMBER 18, 2019 BY ALEXANDER TAYLOR Kivy tutorial 007: Introducing kv language Kivy 导师课007&#xff1a; 介绍kv语言 Central themes: kv language, building a gui, integration with Python 中心主题:…

【React】富文本编辑器react-quill

安装 react-quill 富文本编辑器 npm i react-quill2.0.0-beta.2报错解决&#xff1a; npm i react-quill2.0.0-beta.2 --legacy-peer-deps导入编辑器组件和配套样式文件 import ReactQuill from react-quill // 1 import react-quill/dist/quill.snow.css // 2const Publi…

JR-8000系列机架式多路4K超高清光端机

集中式 4K超高清光传输设备 1 产品特性 ⚫ 支持高达 8 通道 SMPTE 全格式 SDI 信号输入 ⚫ 发送端带有 LOOPOUT 环出端口&#xff0c;具备消抖动功能&#xff0c;可作为信号调理或级联信号源使用 ⚫ 接收端支持双输出端口 ⚫ 支持传输速率&#xff1a;143Mbps-11.88Gbps ⚫…

Redis源码学习:ziplist的数据结构和连锁更新问题

ziplist ziplist 是 Redis 中一种紧凑型的列表结构&#xff0c;专门用来存储元素数量少且每个元素较小的数据。它是一个双端链表&#xff0c; 可以在任意一端进行压入/弹出操作&#xff0c;并且该操作的时间复杂度为O(1)。 ziplist数据结构 <zlbytes><zltail>&l…

CS162 Operating System-lecture2

A tread is suspended or no longer executing when its state’s not loaded in registers the point states is pointed at some other thread .so the thread that’s suspended is actually siting in memory and not yet executing or not executing at all with some thi…

Antd Table 表格 拖拽列宽

antd 的表格组件的列宽&#xff0c;是通过width属性去初始化的&#xff0c;有时候渲染的内容不固定&#xff0c;这个宽做不到通用所以研究怎么实现表格列宽拖动&#xff0c;主要的实现步骤如下&#xff1a; 使用table的components API修改表格头部为 react-resizable提供的组件…

实验13 BGP路径选择

实验13 BGP路径选择 一、 原理描述二、 实验目的三、 实验内容四、 实验配置五、 实验步骤 一、 原理描述 与域内路由不同&#xff0c;域间路由更加注重策略&#xff0c;而不是技术。在域内进行选路&#xff0c;可以使用路由算法计算出到达目的子网的最短路径&#xff1b;而在…

cocos 如何使用九宫格图片,以及在微信小程序上失效。

1.在图片下方&#xff0c;点击edit。 2.拖动线条&#xff0c;使四角不被拉伸。 3.使用。 其他 在微信小程序上失效&#xff0c;需要将packable合图功能取消掉。

[保姆级教程]uniapp实现底部导航栏

文章目录 前置准备工作安装HBuilder-X新建uniapp项目教程使用HBuilder-X启动uniapp项目教程 实现底部导航栏package.json中配置导航栏详细配置内容 前置准备工作 安装HBuilder-X 详细步骤可看上文》》 新建uniapp项目教程 详细步骤可看上文》》 使用HBuilder-X启动uniapp项…

帆软使用总结-新建填报报表

1.界面设计 选择菜单[文件>新建普通报表] 2.分别把B3、C3设置为文本控件 3.选中D3&#xff0c;并设置为下拉控件 4.选择菜单[模板>报表填报属性] 5.选择菜单[模板>模板web属性] 2.效果演示

Day5(和为s的两个数字)双指针

输入一个递增排序的数组和一个数字s&#xff0c;在数组中查找两个数&#xff0c;使得它们的和正好是s。如果有多对数字的和等于s&#xff0c;则输出任意一对即可。 二、思路 1.首先&#xff0c;将不符合要求的值给排除&#xff0c;有以下三种&#xff1a; 数组元素个数不足两个…

基于JSP的交通事故档案管理系统

开头语&#xff1a;你好&#xff0c;我是计算机学长猫哥&#xff0c;如果你对系统有更多的期待或建议&#xff0c;欢迎随时联系我。 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;JSPJava 工具&#xff1a;ECLIPSE、Tomcat 系统展示 首页 管理员界…

深入理解计算机系统 CSAPP 家庭作业6.46

理解题意:G是有向图g的邻接矩阵 G[j*dim i] G[j*dim i] || G[i*dim j]; 通过i和j遍历G中的所有元素,||运算将遍历到的元素对称起来. 下面我们来优化col_convert(int *G, int dim) : void col_convert(int N, int G[N][N], int bsize) {if(bsize < 0 || bsize > N…

堆的实现详解

目录 1. 堆的概念和特点2. 堆的实现2.1 堆向下调整算法2.2堆的创建2.3 建堆时间复杂度2.4 堆的插入2.5 堆的删除2.6 堆的代码实现2.6.1 结构体2.6.2 初始化2.6.3 销毁2.6.4 插入2.6.5 删除2.6.6 获取堆顶2.6.7 判空2.6.8 个数2.6.9 向上调整2.6.10 向下调整3. 堆的实现测试测试…