Skip to main content

JavaScript&QA

测试核心概念

  • 单元测试
  • 性能测试
  • 安全测试
  • 性能测试

单元测试

为什么要做测试

  • 目的:单元测试能够让开发者明确知道代码结果。
  • 原则:单一职责、接口抽象、层次分离
  • 断言库:保证最小单元是否正常原型检测方法
  • 测试风格:测试驱动开发(Test-Driven Development, TDD)、(Behaivor Driven Development,BDD)行为驱动开发均是敏捷开发方法论。
    • TDD关注所有的功能是否被实现(每一个功能都必须有对应的测试用例)suite配合test利用assert('tobi' == user.name)
    • BDD关注整体行为是否符合整体预期,编写一的每一行代码都有目的的提供一个全面的测试用例集。expect.should,desribe配合it利用自然语言expect(1).toEqual(fn())执行结果

单元测试框架

  • better-assert(TDD断言库)
  • should.js(BDD断言库)
  • expect.js(BDD断言库)
  • chai.jjs(TDD、BDD双模)
  • Jasmine.js(BDD断言库)
  • Node.js本身集成 require("assert")
  • Intern更是一个大而全的单元测试框架
  • Quint一个游离在jQuery左右的测试框架
  • Macaca一套完整的自动化测试解决方案,国产神器来自阿里巴巴

单元测试运行流程

graph TD; before(before)-.-beforeEach(beforeEach) -->circle((it)) -->after(after) -.-afterEach(afterEach)
每个测试用例通过describe进行设置
  1. before单个测试用例(it)开始前
  2. beforeEach每个测试用例开始前
  3. 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 instal karma-mocha --save-dev
  • npm install karma-chai --save-dev

报告和单元测试覆盖率检查

  • npm install karma-coverage --save-dev
  • coverageReporter:{type: 'html', dir: 'copverage/'}//配置代码覆盖测试率生成结果

Locale Dropdown

性能测试

基准测试

面向切面编程AOP无侵入式设计,Benchmark基准测试方法,它并不是简单地统计执行多少次测试代码后对比时间,它是对测试有着严密的抽样过程。执行多少次取决于采样到的数据能否完成统计。根据统计次数计算方法。

压力测试

对网络接口做压力测试需要检查的几个常用指标有吞吐量、响应时间和并发数,这些指标反映了服务器并发处理能力。PV网站当日访问人数UV独立访问人数。PV每天几十万甚至上百万就需要考虑压力测试。换算公式QPS=PV/t ps:1000000/10*60*60=27.7(100万请求集中在10个小时,服务器每秒处理27.7个业务请求)。常用的压力测试工具是ab,siege,http_load

ab -c 100 -b 100 http://localhost:8001每秒持续发出28个请求,Request per second表示服务器每秒处理请求数,即为QPS Failed request表示此次请求的请求书理论上压测值越大增加Connection Times连接时间,它包括客户端向服务器端建立连接、服务器端处理请求,等待报文响应的过程。

安全测试

安全漏洞检查

  • XSS
  • SQL
  • CSRF

功能测试

用户真实性检查

selenium-webdriver protractor selenium-standalone

冒烟测试smokeTest自由测试的一种,找到BUG开发修复,然后专门针对此BUG修复,有点:节省了时间防止build失败。缺点覆盖率极低。回归测试修改一处针对整体功能全部测试,一般配合自动化测试。

JsLint&JsHint

目的是javascript代码标准,保证团队代码规范,可以搭配自动化任务管理工具进行自动化测试。grunt-jshint grunt-jslint