测试
测试分类
- 单元测试 (深度 █) (广度 ▂)
- 集成测试 (深度 ▆) (广度 ▃)
- 皮下/端到端测试 (深度 ▃) (广度 ▆)
- UI测试 (深度 ▂) (广度 █))
单元测试
单元在每个编程语言定义不一样, 可是是一个函数, 一个模块, 一个包或者一个类, 甚至一个对象.
单元测试的独立性很重要, 他们不依赖其他单元, 假设依赖也需要mock
另一个单元
它具有很好的深度,但是对整个应用来说它不具备很好的覆盖面。
集成测试
它没有单元测试那么细致,但是具有相对较好的测试覆盖面。例如它可以测试功能的组合,以及像数据库或文件系统这样的外部资源等。
皮下/端到端测试
这种测试作用于UI层的下面一层,这也意味着它对整个应用来说有很好的覆盖率,但是深度欠佳。那一个MVC结构的应用来说,它就是针对刚好在Controller下面一层的测试,对于Web service来说,它就是对节点下面那层的测试。
UI测试
它的测试覆盖面很广,直接从UI层面进行测试,但是深度欠佳。
黑盒测试
黑盒测试一般也被称为功能测试,黑盒测试要求测试人员将程序看作一个整体,不考虑其内部结构和特性,只是按照期望验证程序是否能正常工作。黑盒测试更接近用户使用的真实场景。
黑盒测试还包含一些其他的测试方式,由于测试往往是不可穷举性的,因此如何如何设计测试用例保证测试覆盖尽可能多的场景
- 常用的测试方法
- 等价类划分, 在已有输入规则的情况下,确定合法输入与非法输入区间
- 有效等价类: 登陆密码6位数字
- 无效等价类: 位数>6,位数<6,全角数字,字母、特殊字符等……
- 边界值分析, 根据输入输出范围的边界值进行测试
- 边界值:6 ~ 12
- 有效等价类: 位数[6-12]
- 无效等价类:位数<6 位数>12
- 错误推测
- 异常分析
白盒测试
白盒测试是基于代码本身的测试,一般指对代码逻辑结构的测试。白盒测试是在了解代码结构的前提下进行的测试,目的是遍历尽可能多的可执行路径,得出测试数据。白盒测试方法比较多,主要是逻辑覆盖,即检查代码的每一行、每一次判断结果。
逻辑覆盖方式从发现错误能力上排序主要有以下几种:
- 语句覆盖 (让程序执行到每一行语句)
- 判定覆盖 (让每一个判断语句满足真假)
- 条件覆盖 (让每一个判断语句里面的每一个条件都取到真假值)
- 判定/条件覆盖 (同时满足2和3)
- 条件组合覆盖 (判断语句中条件的每种组合至少出现一次)
- 路径覆盖 (覆盖程序每一条执行路径)
前端单元测试
测试环境
JSDOM
优点: 速度快, 不需要浏览器启动
缺点: 无法测试如seesion或cookie等相关操作
PhantomJs
基于PhantomJs等无头浏览器
优点: 速度相对较快, 并且具有真实的DOM环境
缺点: 同样不在真实浏览器中运行,难以调试,并且项目issue非常多,puppeteer发布后作者宣布不再维护
Karma
优点: 配置简单,能在真实的浏览器中运行测试,并且karma能将测试代码在多个浏览器中运行,同时方便调试
缺点: 唯一的缺点就是相对前两者运行稍慢,但是在单元测试可接受范围内
测试工具
- 测试平台
- karma
- 测试框架
- mocha
- jest (无法和Karma进行集成)
- 测试辅助工具
- Enzyme Airbnb公司提供的React 测试工具,提供了Shallow Rendering(浅渲染) | Full Rendering (全渲染)| Static Rendering (静态渲染)几种方式来渲染方式来测试
- 断言库 – Chai
- 测试替身 - Sinon、testDouble等工具提供了如测试桩、拦截模拟请求、”时间旅行“等功能,主要用于解决”函数不纯”(比如测试回调是否被正确调用,XHR是否正确发起请求,时间延迟后函数行为是否正确)的测试问题。
- 测试覆盖率工具
- istanbul
- istanbul-instrumenter-loader
脚注
- (使用xUnit为.net core程序进行单元测试(1))[https://www.cnblogs.com/cgzl/p/8283610.html]
- (测试你的前端代码 - part1)[https://juejin.im/post/58d4de4f5c497d0057eb9177]
- (前端技术周刊 2018-12-10:前端自动化测试)[https://segmentfault.com/a/1190000017337575]
- (前端自动化测试概览)[https://juejin.im/entry/5b286a126fb9a00e45113435]
- ([译]如何调试JEST测试?)[https://yaowenjie.github.io/front-end/jest-how-do-you-debug-it]
- (使用 Jest + Enzyme 对 React 项目进行单元测试)[https://github.com/yuduxyz/blog/issues/2]