单元测试
why
-
正确性:测试可以验证代码的正确性,在上线前做到心里有底
-
自动化:当然手工也可以测试,通过console可以打印出内部信息,但是这是一次性的事情,下次测试还需要从头来过,效率不能得到保证。通过编写测试用例,可 以做到一次编写,多次运行
-
解释性:测试用例用于测试接口、模块的重要性,那么在测试用例中就会涉及如何使用这些API。其他开发人员如果要使用这些API,那阅读测试用例是一种很好地途 径,有时比文档说明更清晰
-
驱动开发,指导设计:代码被测试的前提是代码本身的可测试性,那么要保证代码的可测试性,就需要在开发中注意API的设计,TDD将测试前移就是起到这么一个 作用
-
保证重构:互联网行业产品迭代速度很快,迭代后必然存在代码重构的过程,那怎么才能保证重构后代码的质量呢?有测试用例做后盾,就可以大胆的进行重构
how
-
目的:单元测试能够让开发者明确知道代码结果
-
原则:单一职责、接口抽象、层次分离
-
断言库:保证最小单元是否正常运行检测方法
-
测试风格:测试驱动开发(Test-Driven Development,TDD)、(Behavior Driven Development,BDD)行为驱动开发均是敏捷开发方法论。
- TDD关注所有的功能是否被实现(每一个功能都必须有对应的测试用 例),suite配合test利用assert(‘tobi’ == user.name);
- BDD关注整体行为是否符合整体预期,编写的每一行代码都有目的提供一个全面的测试用例集。expect/should,describe配合it利用自然语言expect(1).toEqual(fn())执行结果
单元测试框架
-
better-assert(TDD断言库)
-
should.js(BDD断言库)
-
expect.js(BDD断言库)
-
chai.js(TDD BDD双模)
-
Jasmine.js(BDD断言库)
-
Node.js本身集成 require(“assert”)
-
Intern 更是一个大而全的单元测试框架
-
QUnit 一个游离在jQuery左右的测试框架
-
Macaca 一套完整的自动化测试解决方案 国产神器来自阿里巴巴
单元测试运行流程
-
每一个测试用例组通过 describe进行设置
- before单个测试用例(it)开始前
- beforeEach每一个测试用例开始前
- it定义测试用例并利用断言库进行设置chai如:expect(x).to.equal(true); 异步mocha
- 以上专业术语叫mock
自动化单元测试
-
karma 自动化runner集成PhantomJS无刷新
-
npm install -g karma
-
npm install karma-cli —save-dev
-
npm install karma-chrome-launcher —save-dev
-
npm install karma-phantomjs-launcher —save-dev
-
npm install karma-mocha —save-dev
-
npm install karma-chai —save-dev
报告和单测覆盖率检查
-
npm install karma-coverage —save-dev
-
coverageReporter: { type: ‘html’,dir: ‘coverage/’ } //配制代码覆盖测试率生成结果
性能测试
基准测试
- 面向切面编程AOP无侵入式统计
- Benchmark基准测试方法,它并不是简单地统计 执行多少次测试代码后对比时间,它对测试有着 严密的抽样过程。执行多少次取决于采样到的数 据能否完成统计。根据统计次数计算方差
压力测试
-
对网络接口做压力测试需要检查的几个常用指标有吞吐率、响应时间和并发数,这些指标反映了服务器并发处理能力
-
PV网站当日访问人数 UV独立访问人数。PV每天几十万甚至上百万就 需要考虑压力测试。换算公式QPS=PV/t
ps:1000000/ 106060=27.7(100万请求集中在10个小时,服务器每秒处理27.7 个业务请求)
-
常用的压力测试工具是ab、siege、http_load
-
ab -c 100 -n 100 http://localhost:8001 每秒持续发出28个请求 Request per second 表示服务器每秒处理请求数即为QPS 。Failed requests 表示此次请求失败的请求数 理论上压测值越大增加 Connection Times 连接时间,它包括客户端向服务器端建立连接、服 务器端处理请求、等待报文响应的过程
安全测试
安全漏洞检查
-
XSS
-
SQL
-
CSRF
功能测试
用户真实性检查
-
selenium-webdriver
-
protractor selenium-standalone
-
冒烟测试 SmokeTest 自由测试的一种,找到一个BUG开发 修复,然后专门针对此BUG,优点节省生煎防止build失败, 缺点是覆盖率极低
-
回归测试 修改一处对整体功能全部测试,一般配合自动化 测试
JsLint&JsHint
JavaScript Lint&Hint
-
目的:检测JavaScript代码标准
-
原因:JavaScript代码诡异,保证团队代码规范
-
lint: http://www.jslint.com/
-
hint: http://www.jshint.com/
-
搭配自动化任务管理工具完善自动化测试grunt- jshint、grunt-jslint