前端自动化测试(一):揭秘自动化测试秘诀

目录

    • @[TOC](目录)
    • 前言
    • 自动化测试 VS 手动测试
    • 测试分类
    • 何为单元测试
    • 单元测试的优缺点
      • 优点
      • 缺点
    • 测试案例
      • 测试代码
    • 测试函数的封装
    • 实现 `expect` 方法
    • 实现 `test` 函数
    • 结语

在这里插入图片描述

正文开始如果觉得文章对您有帮助,请帮我三连+订阅,谢谢💖💖💖


前言

在日常开发中,我们常会遇到下面的问题:

  • 每次在版本发布上线之前,需要在电脑前蹲上好几个小时甚至更长时间对你的应用进行测试,这个过程非常枯燥而痛苦。
  • 当代码的复杂度达到一定级别,且维护者的数量不止你一个时,你会逐渐察觉到在开发新功能或修复 bug 时会变得越发小心翼翼。即使代码看起来没问题,你心里还是会犯嘀咕:这个 Feature 会不会带来其他 Bug?这个 Fix 会不会引入其他 “Feature”?
  • 当你想要对项目中的代码进行重构时,会花费大量时间进行回归测试。

以上这些问题大多源于开发者使用的最基本的手动测试方式。解决这些问题的根本在于引入自动化测试方案

自动化测试 VS 手动测试

特性自动化测试手动测试
速度快速,可以连续运行多个测试用例。慢,需要逐个测试用例手动执行。
一致性高,每次执行结果一致。低,可能因人为因素导致结果不一致。
覆盖率高,可以覆盖大量测试用例。低,可能遗漏一些测试用例。
成本初始成本高,需要编写和维护测试脚本。初始成本低,但随着测试用例增加,成本可能增加。
维护需要维护测试脚本,但一旦建立,维护成本较低。每次更改需求或功能时,需要重新执行所有测试用例。
灵活性低,测试用例需要预先定义。高,可以根据需要随时调整测试用例。
准确性高,可以精确执行测试用例。低,可能因人为因素导致测试结果不准确。
重复性高,可以重复执行测试用例。低,重复执行测试用例可能会出错。
资源需要专门的测试工具和环境。需要测试人员和测试设备。
发现问题可以发现一些手动测试难以发现的问题。可以发现一些自动化测试难以发现的问题。
适用场景适用于回归测试、持续集成等场景。适用于探索性测试、用户验收测试等场景。
可扩展性随着测试用例的增加,可以扩展测试范围。随着测试用例的增加,执行时间可能显著增加。
风险测试脚本可能存在缺陷,导致测试结果不准确。测试人员可能因疲劳或疏忽导致测试结果不准确。

测试分类

前端开发最常见的测试主要是以下几种:

  • 单元测试:验证独立的单元是否正常工作。
  • 集成测试:验证多个单元协同工作。
  • 端到端测试:从用户角度以机器的方式在真实浏览器环境验证应用交互。
  • 快照测试:验证程序的 UI 变化。

何为单元测试

  • 单元测试是对应用程序最小的部分(单元)运行测试的过程。通常,测试的单元是函数,但在前端应用中,组件也是被测单元。
  • 单元测试可以单独调用源代码中的函数并断言其行为是否正确。
  • 与端到端测试不同,单元测试运行速度很快,只需几秒钟即可完成,因此你可以在每次代码变更后运行单元测试,从而快速得到变更是否破坏现有功能的反馈。
  • 单元测试应该避免依赖性问题,比如不存取数据库、不访问网络等,而是使用工具虚拟出运行环境。这样可以最小化测试成本,不需花大力气搭建各种测试环境。

单元测试的优缺点

优点

  • 提升代码质量,减少 Bug。
  • 快速反馈,减少调试时间。
  • 让代码维护更容易。
  • 有助于代码的模块化设计。
  • 代码覆盖率高。

缺点

  • 由于单元测试是独立的,无法保证多个单元一起运行时是否正确。

测试案例

上面提到单元测试的单元是函数,我们可以写两个函数,然后进行测试。看下面的例子:

// math.js
function sum (a, b) {return a + b; 
}function subtract (x, y) {return x - y;
}module.exports = {sum,subtract
};

测试代码

通过测试代码可以很方便地帮助验证代码的正确性。

const { sum, subtract } = require('./math');const result = sum(1, 2);
const expected = 3;if (result !== expected) {throw new Error(`1 + 2 应该等于 ${expected},但是结果却是 ${result}`);
}const result2 = subtract(2, 1);
const expected2 = 1;if (result2 !== expected2) {throw new Error(`2 - 1 应该等于 ${expected2},但是结果却是 ${result2}`);
}

测试函数的封装

之前示例的测试代码太过繁琐,可以思考如何封装得更简便一些,例如:

expect(sum(1, 2)).toBe(3);
expect(subtract(2, 1)).toBe(1);

这样的测试代码就像自然语言说话一样,很舒服。

实现 expect 方法

function expect (result) {return {toBe (actual) {if (result !== actual) {throw new Error(`预期值和实际值不相等,预期 ${result},实际 ${actual}`);}}};
}

实现 test 函数

增加错误提示信息:

const { sum, subtract } = require('./math');test('测试加法', () => {expect(sum(1, 2)).toBe(3);
});test('测试减法', () => {expect(subtract(2, 1)).toBe(1);
});function test (description, callback) {try {callback();console.log(`${description} 通过测试`);} catch (err) {console.error(`${description} 没有通过测试:${err}`);}
}function expect (result) {return {toBe (actual) {if (result !== actual) {throw new Error(`预期值和实际值不相等,预期 ${result},实际 ${actual}`);}}};
}

结语

自动化测试是前端开发中提升效率、保证质量的利器。它不仅能够减轻手动测试的繁重工作,还能在代码发生变动时迅速提供反馈,确保代码的稳定性和可靠性。通过本文的介绍,相信你已经对自动化测试有了简单理解,后面我会继续介绍更多使用的测试工具

在实际项目中,合理地引入自动化测试,不仅能够大幅度提升开发效率,还能让你在面对复杂的项目需求和频繁的代码变更时更加从容。


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

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

相关文章

使用MariaDB数据库管理系统

前言:本博客仅作记录学习使用,部分图片出自网络,如有侵犯您的权益,请联系删除 一、数据库管理系统 数据库是指按照某些特定结构来存储数据资料的数据仓库; 数据库管理系统是一种能够对数据库中存放的数据进行建立、修…

操作系统——笔记(1)

操作系统是管理计算机硬件资源,控制其他程序运行并为用户提供交互操作界面的系统软件的集合,控制和管理着整个计算机系统的硬件和软件资源,是最基本的系统软件。 常见的操作系统:ios、windows、Linux。 计算机系统的结构层次&am…

css气泡背景特效

css气泡背景特效https://www.bootstrapmb.com/item/14879 要创建一个CSS气泡背景特效,你可以使用CSS的伪元素(:before 和 :after)、border-radius 属性来创建圆形或椭圆形的“气泡”,以及background 和 animation 属性来设置背景…

Dify中接入GPT-4o mini模型

GPT-4o mini模型自己承认是基于GPT-3.5架构的模型,有图有真相: 一.GPT-4o mini官网简介 GPT-4o mini(“o"代表"omni”)是小型型号类别中最先进的型号,也是OpenAI迄今为止最便宜的型号。它是多模态的&#x…

hadoop大数据安全管理:ldap、keberos、ranger

hadoop大数据中认证一般用keberos,授权用ranger,kerberos和Ldap组件共同组成整个集群的安全鉴权体系,Ldap负责用户数据存储。 kerberos Kerberos 是一种网络认证协议,用于在不安全的网络中以安全的方式对用户和服务进行身份验证。…

【MySQL】Ubuntu22.04 安装 MySQL8 数据库详解

🔥博客主页: 小羊失眠啦. 🎥系列专栏:《C语言》 《数据结构》 《C》 《Linux》《MySQL》《Qt》 ❤️感谢大家点赞👍收藏⭐评论✍️ 一、安装目录 1.1 更新软件源 sheepAron:/root$ sudo apt update1.2 安装mysql_ser…

Spring之Spring Bean的生命周期

Spring Bean的生命周期 通过BeanDefinition获取bean的定义信息调用构造函数实例化beanBean的依赖注入处理Aware接口(BeanNameAware、BeanFactoryAware、ApplicationContextAware)Bean的后置处理器BeanPostProcessor-前置初始化方法(Initiali…

UE4 自动换行——按排序关键字1.2.3.

要自动换行的字符串举例&#xff1a;“有效节点为:1.demo-worker-02 2.demo-worker-01 3.demo-master-01” 1.获取相邻两位字符串&#xff0c;组合后与关键字比较 2.当两位字符串与关键字相等&#xff0c;附加一次换行 3.其他例如 1)2)3)、(1)(2)(3)、<1><2><…

springboot配置文件如何读取pom.xml的值

比如想读取profile.active的值&#xff0c;默认属性为pro 在maven中加入以下插件&#xff1a; <plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-resources-plugin</artifactId><version>3.2.0</version>&l…

goenv丝滑控制多版本go

安装 先装下goenv brew install goenv去 ~/.bash_profile 添加一下 export GOENV_ROOT"$HOME/.goenv" export PATH"$GOENV_ROOT/bin:$PATH" eval "$(goenv init -)"执行一下让配置生效 source ~/.bash_profile插一嘴&#xff0c;如果之前是在…

保持形态真实性的大脑生成建模| 文献速递-基于人工智能(AI base)的医学影像研究与疾病诊断

Title 题目 Realistic morphology-preserving generative modelling of the brain 保持形态真实性的大脑生成建模 01 文献速递介绍 医学影像研究通常受到数据稀缺和可用性的限制。治理、隐私问题和获取成本都限制了医学影像数据的访问&#xff0c;加上深度学习算法对数据的…

(十九)原生js案例之h5地里位置信息与高德地图的初使用

h5 地里位置信息 1. 获取当前位置信息 window.onload function () {const oBtn document.querySelector("#btn");const oBox document.querySelector("#box");oBtn.onclick function () {window.navigator.geolocation.getCurrentPosition(function (…

SQL每日一题:游戏玩法分析 I

题干 活动表 Activity&#xff1a; --------------------- | Column Name | Type | --------------------- | player_id | int | | device_id | int | | event_date | date | | games_played | int | --------------------- 在 SQL 中&#xff0c;表的主键是 (player_id, eve…

49 IRF 经典案例

49 IRF 经典案例 一 H3C-FWW-RF 脚本 <IRF-MATER-FW1000>display current-configuration #version 7.1.064, Alpha 7164 #sysname IRF-MATER-FW1000 # context Admin id 1 #telnet server enable #irf mac-address persistent timerirf auto-update enableundo irf l…

案例研究|柯尼卡美能达软件开发(大连)有限公司基于DataEase构筑内部数据可视化体系

柯尼卡美能达软件开发&#xff08;大连&#xff09;有限公司于2007年5月25日注册成立。公司以“洞悉在工作的人们真实情况&#xff0c;探寻他们的愿望&#xff0c;持续提供使人们更加幸福的服务”为使命&#xff0c;致力于系统品质测试服务、软件开发服务、IT安全服务、高级BPO…

2024最新手机软件APP下载排行网站源码 软件下载站PHP源码

源码介绍 这是一款简洁蓝色的手机软件下载应用排行、平台和最新发布网站源码&#xff0c;主要包括主页、APP列表页、APP详情介绍页、新闻资讯列表、新闻详情页、关于我们等模块页面。 软件下载站PHP网站源码&#xff0c;简单的部署上线&#xff0c;访问首页安装程序&#xff…

小程序收银视频介绍

千呼新零售2.0系统是零售行业连锁店一体化收银系统&#xff0c;包括线下收银线上商城连锁店管理ERP管理商品管理供应商管理会员营销等功能为一体&#xff0c;线上线下数据全部打通。 适用于商超、便利店、水果、生鲜、母婴、服装、零食、百货、宠物等连锁店使用。 详细介绍请…

【测开能力提升-Javascript】JavaScript运算符流程结构

1. 递增递减运算符 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title><script>// 前置递增运算符var age10age //类似于ageage1&#xff0c; 先加1后返回值alert(age)// 后置…

总结一些vue3小知识3

1.限制时间选择器只能选择后面的日期 说明&#xff1a;disabled-date属性是一个用来判断该日期是否被禁用的函数&#xff0c;接受一个 Date 对象作为参数。 应该返回一个 Boolean 值。 <el-date-picker class"w180" v-model"datas.form.timeDate[0]" …

Shiro安全框架(上)

目录 第一章 权限概述 1、什么是权限 2、身份认证概念-Authentication 【1】什么是认证 【2】对象 2、用户授权概念-Authorization 【1】什么是授权 【2】授权流程 第二章 Shiro概述 1、Shiro简介 【1】什么是Shiro? 【2】Shiro 的特点 2、核心组件 第三章 Shiro…