单元测试和集成测试之间的差别在哪里?单元测试和集成测试之间的差别有多大?
概念
单元测试
(相关资料图)
UnitTesting,简称UT。是指对软件中的最小测试单元进行检查和验证,这是最低级别的测试活动,前端开发中单元可以是一个function也可以是一个class,也可以是一个组件。
对他们的输出做断言检查,是一个白盒测试,一般由开发者进行编写,开发者可以通过编写执行UT来判断自己的逻辑是否正确。
集成测试
Integration Testing,其实集成测试就是根据业务功能需要把多个单元整合起来进行测试。引用 React 官网上的说法:“单元测试”和“集成测试”之间的差别可能会很。
如果你在测试一个表单,用例是否应该也测试表单里的按钮呢?一个按钮组件又需不需要有他自己的测试套件?重构按钮组件是否应该影响表单的测试用例?不同的团队或产品可能会得出不同的答案。
端到端测试
end-to-end,简称e2e,也被称作功能测试(Functional Testing)或者浏览器测试或者冒烟测试,是指从使用者的角度出发,对真实系统进行测试。
e2e测试本质上是一种黑盒测试,相当于模拟用户访问应用程序,主要检查界面或功能是否正确,自动化测试不完善的时候通常是由人工来完成这项测试工作。
界面测试
User Interface Testing,简称UI测试,与e2e测试存在大量重叠,通常在做e2e的时候就能够覆盖UI测试。
TDD
Test Drive Development,即测试驱动开发。
简单地说就是先根据需求写测试用例,再代码实现,接着测试,循环此过程直到产品的实现。
可以看出来,TDD 的基本思路就是通过测试来推动整个开发的进行,但测试驱动开发并不只是单纯的测试工作,而是把需求分析,设计,质量控制量化的过程。
BDD
Behavior Drive Development,即行为驱动开发,BDD可以看作是对TDD的一种补充,或者说是TDD的一个分支。
在TDD中,我们并不能完全保证根据设计所编写的测试就是用户所期望的功能。BDD将这一部分简单和自然化,用自然语言来描述,让开发、测试、BA以及客户都能在这个基础上达成一致。
BDD更加依赖于需求行为和文档来驱动开发,这些文档的描述跟测试代码很相似。e2e测试更多是和BDD的开发模式进行结合。
综上所述,后文主要会针对单元测试和端到端测试常用的工具进行使用说明和对比。
前端测试工具
前端测试工具有很多,可以分为几类:
断言库
测试覆盖率工具
测试框架
断言库
测试的时候我们需要使用断言来判断代码是否到达目的,如果没有断言,我们的测试也将失去意义。
assert
assert是Node.JS内置的断言库,下面是一个简单的例子:
const assert = require("assert");assert(1 === 2);const test = "hello world";assert.strictEqual("hello world", test);
chai
这个断言库很全很强大,提供了常用的assert、should、expect断言关键字。
power-assert
如果你在使用assert的话,无需使用 require("power-assert")来引入power-assert,它的API与assert一样,而且拥有强大的提示信息,如下图所示。
安装:
npm i power-assert
(左右滑动查看完整代码)
测试覆盖率工具
Istanbul
这个软件以土耳其最大城市伊斯坦布尔命名,因为土耳其地毯世界闻名,而地毯是用来覆盖的。
安装:
npm install -g istanbul
(左右滑动查看完整代码)
运行:
istanbul cover path
(左右滑动查看完整代码)
测试框架
测试框架的作用是提供一些方便的语法来描述测试用例,比如可以对一组用例进预处理和后处理(beforeAll、beforeEach、afterAll、afterEach等),使用describe函数表示一组用例。
下面将会列举一些常见的测试框架,并做简单的分析。
Jest
Jest 是Facebook出品的一个测试框架,算是一个大而全的测试框架,内置断言、测试覆盖率工具、Mock工具,开箱即用,支持浏览器和 NodeJS,支持BDD写法(也就是expect语法)是React官方推荐使用的测试框架。
Jest既可以用来做单元测试,也可以用来做端到端测试,在做端到端测试的时候可以使用jsdom,网络请求使用本地mock数据,这样可以确保毫秒级完成单元测试,如果需要使用真实DOM,还是需要配合其它测试工具。
Mocha
Macha也是一个功能丰富的JS测试框架,支持浏览器和NodeJS,不过没有内置断言库、测试覆盖率工具和Mock工具,需要和其他三方库配合使用,比如配合chai使用 就可以支持TDD写法(也就是assert.equal语法),当然BDD写法也是支持的。
Mocha既可以用来做单元测试,也可以用来做端到端测试,做端到端测试的时候需要配合其它测试工具。
Jasmine
Jasmine是一个BDD测试框架,支持浏览器和NodeJS,内置断言库、mock工具等,经常配合Karam使用,但是随着Jest这种大而全的框架的崛起,Jasmine显得比较老派,现在热度逐年下降,使用的人也越来越少。
e2e 测试工具
Cypress
Cypress一个e2e测试框架,测试界面和文档做到极致的一个产品。
PhantomJS
PhantomJS,一个基于webkit内核的无头浏览器,没有UI界面。用js代码模拟一些web界面上的操作,用起来比较不方便,不太推荐使用。
NightmareJS
NightmareJS,一个轻量级浏览器自动化测试库。基于Electron和PhantomJS类似,但是快了大约2倍且更现代。
Nightmare还有个优点——它提供了一个Chrome插件daydream,该插件可以通过录制屏幕,自动化生成测试代码,不过最近一次更新是在2019年,也不太推荐使用。
Playwright
Playwright为现代web应用程序提供可靠的端到端测试。支持使用NodeJS、python、Java、.net四种编程语言的API,同时支持Google Chrome和 Microsoft Edge(带有Chromium)、Apple Safari(带有WebKit)和 Mozilla Firefox。
Playwright支持所有浏览器和所有平台的无头(无浏览器 UI)和有头(带浏览器 UI)模式。Headed非常适合调试,而Headless速度更快,适合CI/云执行。
Storybook
Storybook是一个开源工具,用于独立构建UI组件和页面。它简化了UI开发、测试和文档编制。
Selenium
Selenium是e2e测试鼻祖级的框架,有多种编程语言的版本,它是基于webdriver而不是webkit内核实现的,所以,Selenium的浏览器兼容性相对于其他浏览器要好很多。
Nightwatch
Nightwatch原Selenium,是一个用于web网站或应用的自动化测试框架,使用node.js和W3C WebDriver API。
他也是一个完整和集成的解决方案,使用BDD方式,用于网络应用程序和网站的端到端测试。它还可用于Node.js单元和集成测试。
Nightwatch的兼容性比较好,Firefox、Chrome、Safari、edge都可以测。
Protractor
Protractor是一个针对Angular的e2e测试框架。
测试框架运行环境
Karam
Karam官网介绍是一个可以在多个浏览器中执行js代码的简单工具。它不是一个完整的测试框架,没有断言库,只是启动了一个http服务器,然后生成测试html文件,执行测试用例的js。
严格来讲Karam其实不算是一个测试框架,而是一个运行测试框架的环境。
Puppeteer
Puppeteer是一个node库,他提供了一组用来操纵Chrome的API,通俗来说就是一个headless chrome浏览器(当然你也可以配置成有UI的,默认是没有的)。
既然是浏览器,那么我们手工可以在浏览器上做的事情Puppeteer都能胜任,另外,Puppeteer 翻译成中文是“木偶”意思,所以听名字就知道,操纵起来很方便。
配合headless-recorder,一个Chrome插件,可以对操作进行录制,录制的操作有puppeteer和playwright两个版本。
其它测试工具
AVA
AVA是Node.JS的测试工具,具有简洁的API、详细的错误输出、支持新语法以及流程隔离。
标签:
相关推荐:
最新新闻:
- 智·行两会 | 智水华夏,共绘安澜,新华三以数智创新赋能水利事业高质量发展
- 单元测试和集成测试之间的差别在哪里?单元测试和集成测试之间的差别有多大?
- 暗黑3白金币怎么获取?暗黑3白金币获取方法
- 世界今日报丨最安全、最有效的磁盘分区软件——AcronisSelect
- 怎么防御CC攻击?分布式拒绝服务攻击的危害及防御方法
- 全球新资讯:苹果古典音乐月底上线
- 【易语言】验证码短信接口对接DEMO示例:天天精选
- 佳能相机5d与6d有什么区别?佳能相机如何使用?
- 前沿资讯!如何解决图片转PDF的问题?JPG图片转换成PDF文件的方法
- 44岁的郭保新第六次担任“0”号指挥员 曾因压力过大夜夜失眠-天天看热讯
- python中的"%s"用法 你了解多少? 世界看点
- 怎样制作视频?NERO多媒体软件使用方法介绍 天天新动态
- 【联想服务站】笔记本预装的Windows8系统改装教程
- 惠普笔记本散热器价格是多少?60-100元之间有什么区别?
- 公然抄袭《老头环》?开发商回应:Epic商城买的模型|环球百事通
- 快看点丨WEB常见Bug MyEclipse/Eclipse调式技巧详解
- 支付宝小程序是什么?支付宝小程序有哪些特色?-今日看点
- JUL是什么?java原生日志框架JUL源码 环球报资讯
- 香奈儿越涨价越好卖 其杭州大厦店2002年全年销售额达18亿
- 【世界新要闻】日服Switch会员新试玩:《FIFA 23传奇版》 3月20日开启
- 尼尔·德鲁克曼:贝拉·拉姆齐还将《最后生还者》第二季出演艾莉 天天亮点
- 全球短讯!《守望先锋》副总裁将于3月底离开暴雪
- 每日信息:孕妈妈蕾哈娜献唱《黑豹2》主题曲:表演气场十分强大
- 《赛博朋克2077》高清重制mod 更出色的图形画面 天天亮点
- iQOO Z7i 发布,千元入门机售价 899 元起
- 2023 款比亚迪海豹申报信息曝光,动力调整售价或降低 热点聚焦
- 第95届奥斯卡获奖名单 杨紫琼成就最佳女主角|通讯
- 美国硅谷银行破产后 官方称:储户可支取存款-全球看点
- 蕨菜致癌是真的吗食用注意事项_蕨菜致癌是真的-天天微速讯
- 世界今头条!为“美”奔赴,仙库3D数字化形体美学亮相广州美博会
- 仙库智能以3D数智技术助力产康门店逆势掘金 全球快资讯
- 全球今头条!维山W7智能交互终端助力智慧政务提速增效!
- 焦点热门:AMD:不是不出 RTX4090 级显卡,是因为高价不划算
- 环球短讯!不顾设计团队警告?库克力推AR头显今年发布
- 腾讯申请多个微信刷掌商标 图案与之前不同
- 《原子之心》成本至少2500万美元 续作已在筹备中_环球聚焦
- 《命运2》突袭“恐惧根源”第一天超过10万名玩家通关|今头条
- AMD:我们也可以做出RTX 4090!只是不想做而已
- 世界微动态丨《西线无战事》包揽奥斯卡四项大奖!目前豆瓣8.5
- 笔记本电脑可以换显卡吗?笔记本怎么装外置显卡?
- 口袋妖怪修改器是什么?口袋妖怪修改器使用方法
- 维山高拍仪系列产品通过国家级信创认证,为金融行业提供完整解决方案_世界最新
- tencent是什么文件?文件夹内都包含什么文件?
- dnf高级装扮兑换券怎么使用?dnf高级装扮兑换券使用方法
- 怎么找到电脑里的临时文件夹?找到电脑里的临时文件夹方法
- Portraiture是什么软件?Portraiture注册码及安装使用教程
- 浏览器提示网站还原错误怎么办?浏览器提示网站还原错误解决步骤
- Win10为什么360安全卫士打不开?360安全卫士打不开原因分析
- tplink初始密码是什么?tplink无线网卡驱动怎么安装?
- 如何用PS制作流光字?PS制作流光字效果教程
- thunderbolt雷电接口是什么?thunderbolt雷电接口怎么用?
- 如何设置电脑保护色为绿色?将电脑保护色设置为绿色步骤
- WDS是什么意思?WDS一般应用于哪些方面?WDS概念解析
- steam下载速度越来越慢怎么办?steam下载速度越来越慢解决方法
- 《瞬息全宇宙》关继威激动哭:妈妈我得奥斯卡奖了!
- 《最后生还者》最后一集开播:IMDb评分高达9.8!
- 最新资讯:岛国网红主播公开卡片收藏估价 限量版众多总计4600万
- 传闻:《龙珠Z:电光火石》新作目标今年9月发售
- 环球观热点:粉丝分析《星空》新视频:游戏图像和游戏性改进
- 【天天新视野】《流浪地球2》票房破40亿 中国影史排名第十
- PS5出货量可能突破6000万:索尼信心满满
- Win10极限精简版更新:可远程操控-环球滚动
- 北京绿色消费券来袭 逛京东入手红米Note12 Pro新品立省200元
- 约834元!国产厂商道格三防平板电脑Doogee R10曝光:配备10800mAh电池
- 魔兽世界不兼容怎么回事(魔兽世界不兼容服务器)
- 腾讯T13技术大佬被曝遭裁员:47岁 在鹅厂打工15年 环球微速讯
- 传亚马逊正在暗地布局web3 将注力区块链游戏
- 《潜行者2》泄露:角色服装设计、游戏截图等
- Windows常见的系统进程有哪些?Windows常见系统进程分享
- cad怎么设置图形界限?介绍cad设置图形界限的详细操作方法
- 双硬盘双系统怎样引导?双硬盘双系统引导的处理步骤
- 对路径的访问被拒绝怎么办?ps怎么把选区转为路径?
- IGBT是什么?IGBT结构图及IGBT工作原理详解
- MDB文件是什么?MDB文件怎么打开?打开MDB格式文件的方法
- win10自带网速显示在哪?电脑如何查看网速?