测试

测试分类

  • 单元测试 (深度 █) (广度 ▂)
  • 集成测试 (深度 ▆) (广度 ▃)
  • 皮下/端到端测试 (深度 ▃) (广度 ▆)
  • UI测试 (深度 ▂) (广度 █))

单元测试

单元在每个编程语言定义不一样, 可是是一个函数, 一个模块, 一个包或者一个类, 甚至一个对象.
单元测试的独立性很重要, 他们不依赖其他单元, 假设依赖也需要mock另一个单元

它具有很好的深度,但是对整个应用来说它不具备很好的覆盖面。

集成测试

它没有单元测试那么细致,但是具有相对较好的测试覆盖面。例如它可以测试功能的组合,以及像数据库或文件系统这样的外部资源等。

皮下/端到端测试

这种测试作用于UI层的下面一层,这也意味着它对整个应用来说有很好的覆盖率,但是深度欠佳。那一个MVC结构的应用来说,它就是针对刚好在Controller下面一层的测试,对于Web service来说,它就是对节点下面那层的测试。

UI测试

它的测试覆盖面很广,直接从UI层面进行测试,但是深度欠佳。

黑盒测试

黑盒测试一般也被称为功能测试,黑盒测试要求测试人员将程序看作一个整体,不考虑其内部结构和特性,只是按照期望验证程序是否能正常工作。黑盒测试更接近用户使用的真实场景。

黑盒测试还包含一些其他的测试方式,由于测试往往是不可穷举性的,因此如何如何设计测试用例保证测试覆盖尽可能多的场景

  • 常用的测试方法
  • 等价类划分, 在已有输入规则的情况下,确定合法输入与非法输入区间
  • 有效等价类: 登陆密码6位数字
  • 无效等价类: 位数>6,位数<6,全角数字,字母、特殊字符等……
  • 边界值分析, 根据输入输出范围的边界值进行测试
  • 边界值:6 ~ 12
  • 有效等价类: 位数[6-12]
  • 无效等价类:位数<6 位数>12
  • 错误推测
  • 异常分析

白盒测试

白盒测试是基于代码本身的测试,一般指对代码逻辑结构的测试。白盒测试是在了解代码结构的前提下进行的测试,目的是遍历尽可能多的可执行路径,得出测试数据。白盒测试方法比较多,主要是逻辑覆盖,即检查代码的每一行、每一次判断结果。

逻辑覆盖方式从发现错误能力上排序主要有以下几种:

  1. 语句覆盖 (让程序执行到每一行语句)
  2. 判定覆盖 (让每一个判断语句满足真假)
  3. 条件覆盖 (让每一个判断语句里面的每一个条件都取到真假值)
  4. 判定/条件覆盖 (同时满足2和3)
  5. 条件组合覆盖 (判断语句中条件的每种组合至少出现一次)
  6. 路径覆盖 (覆盖程序每一条执行路径)

前端单元测试

测试环境

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

脚注

posted @ 2018-12-13 17:09  学友2000  阅读(293)  评论(0编辑  收藏  举报