前端自动化测试精讲

news2024/12/24 22:03:42

单元测试 + 端对端测试 + 持续集成方案,在项目中落地前端自动化测试

作者介绍

祯民,字节跳动前端开发工程师,掘金小册《SSR实战:官网开发指南》作者,公众号「祯民讲前端」作者。曾负责 抖音前端技术团队官网 和 字节官网中文版 的开发,现维护抖音直播内容安全相关的业务,同时也是第五届字节跳动青训营《Nextjs实战项目》、《前端自动化》课程讲师,对前端自动化测试有长期的深入调研和思考,目前在给互娱中后台业务落地单元测试。

小册介绍

前端自动化测试精讲 - 祯民 - 掘金小册单元测试 + 端对端测试 + 持续集成方案,在项目中落地前端自动化测试。「前端自动化测试精讲」由祯民撰写,405人购买https://s.juejin.cn/ds/hp29XWB/

对前端开发而言,自动化测试的重要性不言而喻。对核心组件覆盖自动化测试,可以有效地保证组件功能的单一,起到警醒工程师的作用,而不至于让不同的业务代码相互耦合;新同学可以通过单测快速 get 到这个组件打算做什么、有什么能力,不论是后续的维护还是重构都会更有底气。

对于通用的基础建设,相比手工测试,自动化测试的覆盖率更有说服力,并且可以有效规避某次修改引起的历史功能的异常,从而保证整体功能的稳定。

想必大家也知道自动化测试的重要性。其实,对于前端工程师而言,最大的痛点在于,不知道该怎么去写对应的测试用例。

相比 Golang 、 Java 等纯后端逻辑的自动化测试,前端的自动化测试大部分需要模拟浏览器环境,进行对应 DOM 和 事件效果的断言,测试的过程与常规逻辑的测试有所不同,很多同学想要针对组件进行测试也无从下手。

为此,我特意向 Semi 方向同学取经,一起探讨了如何有效地进行代码测试,并且向项目中进行推广。经过长达几个月的业务实践完善,综合未来趋势和单测稳定性等因素(具体会在2 | 技术选型:React Testing Library Or Enzyme? 中详细介绍),在 Semi 测试方案选型上做出了更适合同学们学习的改进,技术选型上使用 Jest + React Testing Library + Cypress + Storybook。

Jest 是一个 JavaScript 集大成的测试库,是我们单元测试的基础,而 React Testing Library 则提供了一些 React Component 的 Api ,来协助我们进行 React Dom 和事件相关的单测编写。通过单元测试,我们只能覆盖组件中的除滚动外的大部分场景,对于一些复杂场景覆盖就会比较困难,而 Cypress + Storybook 则可以通过 E2E 端对端的方式帮我们弥补这部分覆盖的缺陷。

我将基于这套技术,来展开小册的内容,最终设计出如下的小册大纲,希望可以借此帮助同学们写出高质量代码,提高整体编程素质。

小册模块可以分为四个方向,单元测试 、端对端测试、持续集成、测试理论。

  • 单元测试:我们将结合不同的案例来学习 Jest 的基础知识,并基于 React Testing Library 模拟浏览器 dom 和事件,对组件进行更加精准的自动化测试,这将是本小册最重点的学习内容,通过这部分的学习,大家将对大部分场景的自动化测试游刃有余。
  • 端对端测试:我们将学习从用户视角进行对应的端对端测试,在这个模块,我们将使用业内主流的端对端测试方案 Cypress 进行用户操作的模拟,完善单测无法覆盖的复杂场景,比如滚动、页面跳转等。
  • 持续集成:我们将站在项目视角,介绍如何将自动化测试覆盖到项目开发中,自动生成测试报告的内容。
  • 测试理论:我们将深度思考如何善用自动化测试,不让它成为 kpi 的工具和工程师的负担。工欲善其事,必先利其器,去思考理解自动化测试的意义,结合项目的实际场景,才能真正实现提高整体项目代码质量和风格的初衷。

看过我上一本小册的同学应该大致了解我的写作风格,同样地,为了大家可以更好的理解理论知识,我将针对具体的场景,从零手写教学代码, 结合代码讲解对应的知识,每一节课如果涉及代码,将会在课程的最顶部加上对应仓库的链接,大家可以 clone 下来结合学习加深印象。

你将获得

小册将会从四个维度带大家学习自动化测试:

  1. 使用 Jest + React Testing Library 来对浏览器 Dom 和事件进行模拟,掌握如何对组件场景进行前端的单元测试。
  2. 使用 Cypress 进行用户视角的端对端测试,补全单元测试难以模拟的场景。
  3. 对项目进行自动化测试覆盖率的覆盖,并进行测试报告的自动生成,将自动化测试融入代码开发中。
  4. 对自动化测试的边界和深度有更深入的思考,因地制宜,结合项目场景去使用自动化测试,避免秀技和沦为 kpi 的自动化测试工具人。

目标用户

这本小册适合有下面需求的同学来学习:

  • 不了解自动化测试,希望入门自动化测试的同学;
  • 有一定单测基础,但一直很困惑前端怎么进行环境模拟,不知道该怎么对 dom 和事件进行单测的同学;
  • 想系统了解怎么落地自动化测试落地到自己项目的同学;
  • 对自己的项目代码不满意,觉得耦合度过高,对代码质量有自我追求的同学。

这本小册不会有过复杂的逻辑,考虑到受众,希望有更多的同学可以参与这部分的学习,所以会尽可能地减少技术栈对小册学习的限制,对学习小册的同学有下面这一条要求:

  • 熟悉 React 最佳,使用但并不涉及过多 React 语法,所以有扎实前端 JS 功底即可,最重要的是有一颗对代码追求极致的心。

名人推荐

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

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

相关文章

RV1126笔记十二:实现RTMP单路拉流

若该文为原创文章,转载请注明原文出处。 一、介绍 相比推流,拉流就简单了一点,只需要连接RTMP服务器,获取流,把数据解码出来显示和播放就可以,使用的是易百纳板子,测试时音频输出是不正常的,所以只解析了视数据,不处理音频。如果想测试音频,建议用其他开发板,正点…

TikTok 加速团结独立站,跨境电商的又一次红利期?

TikTok近年来在国际上非常流行。2021年8月,TikTok的全球下载量首次超过Facebook,成为全球最大的下载量。TikTok的诞生打破了海外社交媒体的垄断,TikTok营销成为许多跨境卖家的重点之一。 封号事件发生后,许多跨境卖家开始向独立站…

我的周刊(第071期)

我的信息周刊,记录这周我看到的有价值的信息,主要针对计算机领域,内容主题极大程度被我个人喜好主导。这个项目核心目的在于记录让自己有印象的信息做一个留存以及共享。🎯 项目Free-TVUrl-Merge[1]免费 TvBox 影视站聚合&#xf…

H7068 DIGITAL SYSTEMS AND MICROPROCESSOR DESIGN: COURSEWORK 2022 verilog-仿真

内容: 给cpubank写testbench: 1.the testbench have test a variety of operations the sequence described: i) Reset: The test bench should first reset the register bank. The reset is synchronous. It should also set rrd1, rrd2, d, rwr, rwren to zero. ii) Stor…

自然语言处理NLP——图神经网络与图注意力模型(GNN、GCN、GAT)

目录 系列文章目录 一、图神经网络 1.图与图嵌入 2.GNN动机 2.1 CNN的缺陷与非结构性数据 2.2 图嵌入的缺陷 3.GNN详解 3.1 GNN简介 3.2 GNN模型 3.3 GNN框架 3.4 GNN局限与优化 二、图卷积神经网络 1.卷积 2.GCN详解 2.1 GCN动机 2.2 GCN简介 2.3 GCN思想与模…

前端(htmlCSSJavaScript)基础

关于前端更多知识请关注官网:w3school 在线教程全球最大的中文 Web 技术教程。https://www.w3school.com.cn/ 1.HTML HTML(HyperText Markup Language):超文本标记语言 超文本:超越了文本的限制,比普通文本更强大。除了文字信息…

Xcode 如何在 silicon Mac 上调试 iOS 版本的 App

功能需求 自从 M1 处理器 Mac 推出以后,我们可以用原生方式在 silicon Mac 系统上运行 iPhone 或 iPad 上的 App。 然而,当发现上架后的 iPhone / iPad App 在 silicon Mac 上运行表现异常时,我们如何在 Xcode 中调试它们呢?比如:在 silicon Mac 中 SwiftUI 弹出的 shee…

跳表Skiplist

介绍 对于有n个元素的链表,会分成log(n1),比如下图为四层,最下面是所有元素都有,往上面走隔着空元素越来越少,保证查询效率为logn 如何插入元素: 最关键的就是新插入的节点应该跨越多少层**——>由抛硬…

解析 Navicat 最受欢迎的功能 | SQL 查询编辑器与 SQL 创建工具

近期发起的线上投票调查中,我们很高兴地看到:SQL 查询编辑器、SQL 创建工具已成为用户最常用的功能之一,并且深受用户欢迎!在人类社会发展的历史长河中,离不开工具的演进与发展。而 Navicat 作为领先的数据库管理开发工…

setContentView学习(一)

setContentView流程分两种情况,一种是继承自Activity的情况,另一种是继承自AppCompatActivity的情况,下面分别介绍。 先说继承自Activity的情况,源码为android-30 public class Activity extends ContextThemeWrapper {public void setContentView(Lay…

【综合】简单加解密——寻找序列号

【综合】简单加解密——寻找序列号 下面文字对你可能有用(复制粘贴): #include <stdlib.h> #include <string.h> #include “malloc.h” #define MaxPass 66 // 最多66段密文 #define NumbPwdTable 5 // 密码表的份数 #define SizePwdTable 0x210 // 每份密码表占…

Hulu | 圣诞剧集推荐(2022)

Happy Holidays&#xff01;寒冷的冬日&#xff0c;迎接我们的不仅仅有礼物、欢笑和香气扑鼻的热红酒&#xff0c;还有新上映的节日大片&#x1f3ac;。每每想到节日电影&#xff0c;我们的脑海中总会浮现出真爱至上、小鬼当家这样的经典节日老片&#xff0c;但如果今年的你准备…

前端小知识:赋予变量默认值(逻辑与运算符、空值合并运算符、逻辑空运算符)

8. 逻辑与运算符、空值合并运算符、逻辑空运算符&#xff08;可用赋予默认值&#xff09; &#xff08;空值合并运算符&#xff09;官方文档&#xff1a; https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/Nullish_coalescing   &#xff08;逻辑…

搭建VScode在Windows的ubuntu子系统下开发环境

大家一般都是装的windows系统&#xff0c;但是要学习linux C后台开发&#xff0c;又不想装linux&#xff0c;也没有另一台机器。 windows11的应用商城有ubuntu可以安装&#xff0c;因此&#xff0c;我们可以用vscode远程ubuntu进行c的开发 1&#xff0c;安装vscode 微软官网安…

【Pycharm教程】在 PyCharm 中使用 Vim 编辑器 (IdeaVim)

IdeaVim插件在 PyCharm 编辑器中模拟 Vim&#xff0c;包括普通、插入和可视模式、命令行和 Ex 模式、Vim 正则表达式和配置以及其他功能。 安装 IdeaVim 插件 1.在Settings/Preferences对话框 ( CtrlAltS) 中&#xff0c;选择Plugins。 2.在Marketplace中找到IdeaVim插件&…

RabbitMQ 第一天 基础 5 Spring 整合RabbitMQ 5.4 Spring 整合 RabbitMQ【配置详解】

RabbitMQ 【黑马程序员RabbitMQ全套教程&#xff0c;rabbitmq消息中间件到实战】 文章目录RabbitMQ第一天 基础5 Spring 整合RabbitMQ5.4 Spring 整合 RabbitMQ【配置详解】5.4.1 配置详解第一天 基础 5 Spring 整合RabbitMQ 5.4 Spring 整合 RabbitMQ【配置详解】 5.4.1 配…

由SOFARPC示例介绍基本流程和基础源码

由SOFARPC示例介绍基本流程和基础源码 1. Server 先看 Server 端测试方法&#xff1a; public class QuickStartServer {public static void main(String[] args) {ServerConfig serverConfig new ServerConfig().setProtocol("bolt") // 设置一个协议&#xff0…

内容资产管理11问

&#x1f447;点击一键关注主笔&#xff1a;邹小困、邝晴岚主持人&#xff1a;增长黑盒分析师Emma出品&#xff1a;增长黑盒研究组前言在这个信息爆炸的数据时代&#xff0c;各个行业正积极推进数字化转型&#xff0c;产业升级与技术赋能成为主题之一。在推进企业线上线下融合的…

SEO 已死,LLMO 万岁

“北风那个吹&#xff0c;雪花那个飘”&#xff0c;我手捧一杯咖啡&#xff0c;听着白毛女。朋友坐在对面高谈阔论&#xff1a;“有了 ChatGPT&#xff0c;我再也不缺内容了&#xff0c;SEO 的春天就要来了&#xff01;”然而他没有看到真相是 —— ChatGPT 直接颠覆了 SEO 行业…

JVM【垃圾回收相关概念和垃圾回收器】

垃圾回收相关概念 System.gc()的理解 在默认情况下&#xff0c;通过**system.gc&#xff08;&#xff09;**者Runtime.getRuntime().gc() 的调用&#xff0c;会显式触发FullGC&#xff0c;同时对老年代和新生代进行回收&#xff0c;尝试释放被丢弃对象占用的内存。 然而syste…