前端实现自动化测试

news2024/11/24 6:44:49

什么是前端测试

我们经常说的单元测试其实只是前端测试的一种。前端测试分为单元测试,UI 测试,集成测试和端到端测试。
● 单元测试:是指对软件中的最小可测试单元进行检查和验证,通常指的是独立测试单个函数。
● UI 测试:是对图形交互界面的测试。
● 集成测试:就是测试应用中不同模块如何集成,如何一起工作,这和它的名字一致。
● 端到端测试(e2e):是站在用户角度的测试,把我们的程序看成是一个黑盒子,我不懂你内部是怎么实现的,我只负责打开浏览器,把测试内容在页面上输入一遍,看是不是我想要得到的结果。
在这里插入图片描述

为什么要做自动化测试

● 产品周期较长,需要不断进行迭代/重构的项目
● 测试人力不足,回归测试耗时耗力
● 验证代码正确性,保障产品质量
● 提高测试效率
● 起到文档作用

适合引入自动化测试的场景

  1. 公共库类的开发维护
  2. 中长期项目的迭代/重构
  3. 引用了不可控的第三方依赖

测试有两种模式

● BDD(Behavior-driven development):行为驱动开发,先实现功能后写测试。
● TDD(Test-driven development):测试驱动开发,先写测试后实现功能
● 我们在开发业务系统的时候难免要自己封装一些 hook、组件、工具函数,那么我们可以使用 TDD 来做(借助 Vitest 或者 Cypress 的单元测试功能),开发业务代码的时候使用 BDD 来做(借助 Cypress 的 E2E 测试功能 )

前端测试的框架有什么?

前端实现自动化测试页面的关键是选择合适的自动化测试框架和工具。以下是一些常用的工具和框架:

  • 单元测试(Unit Test)有 Mocha, Ava, Karma, Jest, Jasmine, Vitest 等。
  • 集成测试(Integration Test)和 UI 测试(UI Test)有 ReactTestUtils, Test Render, Enzyme, React-Testing-Library, Vue-Test-Utils 等。
  • E2E 测试框架主要包括 Puppeteer、Cypress、Playwright(微软出品,配合vscode插件使用)、Selenium 、cucumber、TestCafe、python等。
    • 它们之间各有优劣,适用场景也有所不同,我们会在下面进行比较。
      • 与其他测试场景的重要不同之一,就是 E2E 测试是可以由测试同学来编写的(如支持 Python 和 Java 的 Selenium),在产品进行迭代的同时,测试同学会按照功能点变化对应地完善测试用例,同时确保以往所有功能的测试用例不受影响。
      • 结论:非常简单的场景使用 Puppeteer(需要搭配 Jest-Puppeteer),PC 应用使用 Cypress, Playwright,移动端应用使用 Playwright。
  • 压力测试
    • 后端服务特殊的测试场景则是压力测试,在某些时候也可以被等价于性能测试,从某些方面它其实也是在模拟用户,只不过不是模拟一个用户的交互行为,而是模拟较大量级的用户访问,以此来测试服务的性能。本质上压力测试并不是在测试 API 的逻辑,而是承载 API 的服务器性能与负载均衡相关逻辑。进行压力测试可以很简单地使用脚本开多线程并发请求,也可以使用 Apache Bench、Webbench、wrk(wrk2)测试工具,或者 npm 社区也有 autocannon 这样的实现

针对具体的需求和项目特点,可以选择相应的自动化测试框架和工具,然后可以根据测试用例和测试需求,设计和实现自动化测试页面。常用的实现方式包括模拟用户操作、模拟网络请求、模拟响应等。

前端自动化测试工具优势劣势对比

框架名称支持测试类型可视化测试自带断言库开箱即用录制生成脚本优势劣势
SeleniumWeb UI支持多种语言,支持跨平台,使用广泛速度较慢,需要手动处理浏览器驱动的下载和管理
CypressWeb UI速度快,自带断言库,可视化测试,支持动态测试数据,可适用于测试和开发环境不支持多浏览器测试,只能运行在 Chromium 内核浏览器上
PuppeteerWeb UI支持跨平台,提供了高级 API 可以控制浏览器的行为,使用方便不能运行在非 Chrome 浏览器上,需要手动处理浏览器驱动的下载和管理
PlaywrightWeb UI支持多种语言,可视化测试,支持多浏览器测试,速度快没有 Selenium 和 Cypress 那么成熟和稳定,生态相对较小
CucumberBDD支持 BDD 测试,易于阅读和理解,可用于业务人员和开发人员之间的交流需要手动编写步骤定义和步骤实现,使用过程较为繁琐
TestCafeWeb UI可以运行在多个浏览器上,速度快,自带断言库,不需要编写显式等待对特殊网站的支持较差,文档相对较少
PythonWeb UI/API用 Python 写测试代码,可用于 Web UI 和 API 测试对于不熟悉 Python 的前端工程师来说使用难度较大
React-Testing-LibraryReact 组件测试专注于测试 React 组件,易于使用和理解,支持 Jest 和其他测试框架不支持非 React 项目的测试
JestWeb UI/API自带断言库,支持异步测试,能够模拟浏览器环境,对 React 和 Vue 有较好的支持对特殊网站的支持较差,部分 API 变动不够友好
VitestWeb UI可以运行在多个浏览器上,支持多种测试类型,使用 Jasmine 作为断言库生态相对较小,文档相对较少

注:Web UI 表示 Web 界面测试,API 表示接口测试,BDD 表示行为驱动开发,React 组件测试表示专门针对 React 组件的测试。

选择第三方 NPM 包标准

● 检查开源许可证
● 看贡献频率和下载量
● 权衡包体积大小
● 是否有大型开发团队在进行维护
● 评估安全性

背景-项目架构 (业务不同,跳过)

○ ice + tech ui + react , mpa多页应用
■ ice官方推荐:
● jest and vitest , ui测试 和 非ui测试
● 组件 UI 测试推荐使用 @testing-library/react 和 @testing-library/jest-dom

最终的测试方案 (根据项目环境自行制定)

  • 最终的测试方案
    • Jest + Playwright
      • Jest:一个基于JavaScript的测试框架,用于测试React应用程序。它可以进行单元测试、集成测试和端到端测试,并且提供了许多有用的测试工具和断言库。
      • Playwright:开箱即用, 支持录制,脚本清晰,方便维护, 比selenium启动和执行速度更快.
  • 单测
    • Jest
      • 纯函数的单元测试
  • 集成测试/e2e 测试
    • Playwright
      • 站在用户视角并且以真正的运行环境来测试整个流程和功能的,组件的单元测式升级版
  • ui 测试
    • @testing-library/react 和 @testing-library/jest-dom
    • @testing-library/react 简单而完整的 React DOM 测试实用程序
    • @testing-library/jest-dom 断言关于 DOM 状态的自定义匹配器。
      • 目前场景不太需要

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

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

相关文章

2023美赛Y题二手帆船价格--成品论文、思路、数据、代码

2023美赛Y题二手帆船价格 第一时间在CSDN分享 最新进度在文章最下方卡片,加入获取一手资源:2023美赛Y题二手帆船价格–成品论文、思路、数据、代码 可以提供关于帆船特性的信息: BoatTrader (https://www.boattrader.com/):一个网站,允许您根…

WindowsGUI自动化测试项目实战+辛酸过程+经验分享

WindowsGUI自动化测试项目实战辛酸过程经验分享一、前言⚜ 起因⚜ 项目要求⚜ 预研过程⚜⚜ 框架选型⚜⚜ 关于UIaotumation框架⚜ 预研成果二、项目介绍💓 测试对象💓 技术栈💓 项目框架说明三、项目展示🤣 界面实现效果&#x1…

【深度学习】windows10环境配置详细教程

【深度学习】windows10环境配置详细教程 文章目录【深度学习】windows10环境配置详细教程Anaconda31.安装Anaconda32.卸载Anaconda33.修改Anaconda3安装虚拟环境的默认位置安装cuda/cudnn1.安装合适的CUDA2.安装对应的CUDNN3.卸载CUDA/CUDNNconda虚拟环境独立安装cuda/cudnn1.搭…

随想录Day55--动态规划: 392.判断子序列 , 115.不同的子序列

392.判断子序列 思路 (这道题也可以用双指针的思路来实现,时间复杂度也是O(n)) 动态规划五部曲分析如下: 1.确定dp数组(dp table)以及下标的含义 dp[i][j] 表示以下标i-1为结尾的字符串s,和…

基线配置管理在网络中的重要性

在网络环境中,配置通常被认为具有不可估量的价值,因为设备配置的微小变化可以在几分钟内成就或破坏整个网络基础设施。 这些配置分为两部分:启动配置和运行配置。在网络设备中,默认情况下,第一个配置版本被视为运行和…

el-input-number的精度问题

前言 el-input-number 饿了么的数字输入框组件,在项目中听常用的。而这个组件比较常用的属性就是精度设置,给组件添加属性precision 。 其实吧,之前一直没怎么研究,保留几位小数就直接填几就好了,比如保留两位小数&am…

4.mysql内置函数

目录 日期函数 字符串函数 数学函数 其它函数 日期函数 获得当前年月日:

<点云>Bin-picking数据集

题目:工业料仓拣选的大规模6D物体姿态估计数据集 Abstract 介绍了一种新的公共数据集,用于6D对象姿态估计和用于工业bin-picking的实例分割。数据集包括合成场景和真实场景。对于这两者,提供了包括6D姿势 (位置和方向) 的点云、深度图像和注…

【华为机试真题详解JAVA实现】—从单向链表中删除指定值的节点

目录 一、题目描述 二、解题代码 一、题目描述 输入一个单向链表和一个节点的值,从单向链表中删除等于该值的节点,删除后如果链表中无节点则返回空指针。 链表的值不能重复。 构造过程,例如输入一行数据为: 6 2 1 2 3 2 5 1 4 5 7 2 2 则第一个参数6表示输入总共6个节点,…

C++基础语法(内存管理)

我们在学习C语言的时候,可以在栈区中使用内存空间,但栈区的空间毕竟很有限而且随着栈的销毁,该栈里的数据都会被销毁掉。因此我们学习了堆,堆的空间比栈要大很多很多,并且堆区空间的数据,只要我们不主动释放…

STM32 学习笔记_2 下载,GPIO 介绍

下载 Keil 编译例程 编译两个按钮,一个向下是部分编译,两个向下箭头是全部编译。对于未编译文件两个按钮等效。 点击编译后,linking 是链接,结果里面的几个数据的意义代表大小: 数据类型占用Flash or SRAM说明Code…

测试:腾讯云3年轻量2核4G5M服务器CPU内存带宽流量系统盘性能

2核4G云服务器可以选择腾讯云轻量应用服务器,自带5M公网带宽,5M带宽下载速度峰值可达640KB/秒,系统盘为60GB SSD盘,每月500GB流量包,折合每天16GB流量,2核4G5M轻量服务器一年168、198元15个月、三年628元&a…

从存算分离说起:金融行业数据库分布式改造之路

从上世纪90年代正式起步至今,中国数据库发展已走过近30年岁月。以2000年前后为拐点,以MySQL为首的开源数据库,在互联网厂商的推动下,逐步进入生产业务;而为了使单实例能力平庸的MySQL能够满足高性能要求,互…

Vulnhub:Digitalworld.local (JOY)靶机

kali:192.168.111.111 靶机:192.168.111.130 信息收集 端口扫描 nmap -A -v -sV -T5 -p- --scripthttp-enum 192.168.111.130 使用enum4linux枚举目标smb服务,发现两个系统用户 enum4linux -a 192.168.111.130 ftp可以匿名登陆&#xff…

基于CH32F203利用TIM1 同时输出4通道固定PWM占空比波形

基于CH32F203利用TIM1 同时输出4通道固定PWM占空比波形📌相关篇《关于CH32F203程序下载方式说明》📍有关CH32F203资料手册以及SDK资料:https://www.wch.cn/products/CH32F103.html🌴《树莓派RP2040 100M 24通道逻辑分析仪开源项目…

相关系数python实现

皮尔逊相关系数的python实现一、相关系数公式二、python实现法1:直接按公式算法2:调用numpy中的corrcoef方法法3:调用scipy.stats中的pearsonr方法法4:调用pandas.Dataframe中的corr方法一、相关系数公式 R的值在-1和1之间&#…

AJAX | 拦截器、文件上传和下载

💗wei_shuo的个人主页 💫wei_shuo的学习社区 🌐Hello World ! AJAX Ajax即Asynchronous Javascript And XML(异步JavaScript和XML);Ajax技术网页应用能够快速地将增量更新呈现在用户界面上&…

Docker 镜像原理

Linux文件系统由bootfs和rootfs两部分组成:- bootfs:包含bootloader(引导加载程序)和 kernel(内核)- rootfs: root文件系统,包含的就是典型 Linux 系统中的/dev,/proc&am…

Verilog | 二进制与格雷码

一、格雷码简介 格雷码是一个叫弗兰克格雷的人在 1953 年发明的,最初用于通信。格雷码是一种循环二进制码或者叫作反射二进制码。格雷码的特点是从一个数变为相邻的一个数时,只有一个数据位发生跳变,由于这种特点,就可以避免二进…

基于DSP+FPGA+AD9238的冲击波超压测试系统设计与实现

对冲击波关键特征参数进行可靠、精确地评估是进行军事行动规划的前提和依据, 测试结果可以为战斗部设计提供参考,也可以为武器弹体材料的研发制造提供有效依据。 近年来,随着集成电子技术与软件系统取得突破性成果,冲击波测试技术…