测试分层
- 单元测试
单元测试确保基础单元(比如组件、类、函数)没问题
- 正确性,保证代码的正确性
- 自动化,通过编写测试用例,一次编写,多次运行
- 解释性,测试用例用于测试接口、模块的重要性,那么测试用例就会涉及如何使用这些API。
- 驱动开发,指导设计,代码被测试的前提是代码本身的可测试性,那么要保证代码的可测试性就要开发中注意API的设计。
- 保证重构,互联网行业产品迭代速度很快,迭代后必然存在代码重构的过程,有测试用例做后盾,就可以大胆的进行重构。
目的:单元测试能够让开发者明确知道代码结果
原则:单一职责,接口抽象,层次分离
断言库:保证最小单元是否正常运行检测方法
测试风格:测试驱动开发(TDD)、行为驱动开发(BDD)是敏捷开发方法论。
TDD,关注所有功能是否被实现
BDD,关注整体行为知否符合整体预期,编写每一行代码都有目的提供一个全面的测试用例集。
单元测试流程:
- 确定测试平台,确定测试平台,代码运行环境等。比如:Node端运行,Chrome运行,推荐Karma
- 选择测试框架,mocha,jasmine,jest,ava,辅助的断言库(chai),测试桩(Sinon,testDouble)
- 查看测试结果,主要看测试覆盖率。
单元测试框架:
- better-assert TDD断言库
- should.js BDD断言库
- expect.js BDD断言库
- chai.js TDD、BDD双模
- Jasmine.js BDD断言库
- Node.js 本身继承require(‘assert’)
- Intern 一个大而全的单元测试框架
- QUnit 一个游离在JQuery左右的测试框架
- Macaca 一套完整的自动化测试解决方案
- 集成测试
集成测试确保不同的组件组合在一起没有问题
- 自动化测试
端到端测试是最顶层的测试,即完全作为一个用户一样将程序作为一个完全的黑盒,打开应用程序模式输入,检查功能以及界面是否正确
其他测试
性能测试
基准测试
- 面向切面变成AOP无侵入式统计
- Benchmark基准测试方法,它并不是简单地统计执行多少次测试代码后对比时间,它对测试有着严密的抽样过程,执行多少次取决于采样到的数据能够完成统计。根据统计次数计算方差。
- 压力测试
- 对网络接口做压力测试需要检测的介个常用指标有吞吐率、响应时间和并发数,这些指标反映了服务器并发处理能力。
- PV网站当日访问人数UV独立访问人数。PV每天几十万甚至上百万就需要考虑压力测试。换算公式QPS = PV/t
- 常用压力测试工具是ab、siege、http_load
- 安全测试
安全漏洞检查
- XSS
- SQL
- CSRF
- 敏感路径、敏感词、敏感图片
代码检测工具ESLint
常用测试框架
- 单元测试 (karma)
Karma,karma不是一个测试框架,也不是一个断言库。karma只是启动一个HTTP服务器,并生成HTML文件。所以你可以选择你自己喜欢的测试框架。如Jasmine,Mocha,QUnit等等。
Jasmine,即是上面所说的JavaScript测试框架。它不依赖于其他任何JavaScript组件,它有干净的语法,Jasmine断言库可以让你简单的写出测试代码,(断言:表示为一些布尔表达式,你可以采用假设的方式,当程序输出的结果是否与假设的结果一致时,断言为真,否则,断言为假)在karma上运行Jasmine可以完成JavaScript的自动化测试、生成覆盖率报告等。
- e2e测试 (selenium-webdriver)
Selenium已经支持了大部分主流的浏览器,它是一个用于自动化测试的绝佳工具。
WebDriver(或者Selenium 2)基本上指的都是特定浏览器控制代码的语言绑定和实现。
WebDriver引入了一个JSON wire protocol用于将不同的语言和浏览器控制器进行交流。
- UI测试 || “UI走查” (backstopjs)
BackstopJS就是一个能够实现css自动化回归测试的工具,和Mocha这种依靠JavaScript判断断言语句正误和PhantomJS以模拟用户操作的测试工具不同,BackstopJS是一个基于比较网站快照的变化的回归测试工具,因此他更适给项目中的样式做回归测试,可以确保我们在重构网站样式的时候样式不发生变化,而且他支持设置多种浏览器尺寸,可以测试响应式布局。
- 接口测试 (mocha && mochawesome)
mocha是JavaScript的一种单元测试框架,既可以在浏览器环境下运行,也可以在Node.js环境下运行。
使用mocha,我们就只需要专注于编写单元测试本身,然后,让mocha去自动运行所有的测试,并给出测试结果。
mocha的特点主要有:
既可以测试简单的JavaScript函数,又可以测试异步代码,因为异步是JavaScript的特性之一;
可以自动运行所有测试,也可以只运行特定的测试;
可以支持before、after、beforeEach和afterEach来编写初始化代码。
使用mochawesome模块,可以生成漂亮的HTML格式的报告。


