JavaScript&QA工程师

测试分层

  • 单元测试

单元测试确保基础单元(比如组件、类、函数)没问题

  1. 正确性,保证代码的正确性
  2. 自动化,通过编写测试用例,一次编写,多次运行
  3. 解释性,测试用例用于测试接口、模块的重要性,那么测试用例就会涉及如何使用这些API。
  4. 驱动开发,指导设计,代码被测试的前提是代码本身的可测试性,那么要保证代码的可测试性就要开发中注意API的设计。
  5. 保证重构,互联网行业产品迭代速度很快,迭代后必然存在代码重构的过程,有测试用例做后盾,就可以大胆的进行重构。

目的:单元测试能够让开发者明确知道代码结果
原则:单一职责,接口抽象,层次分离
断言库:保证最小单元是否正常运行检测方法
测试风格:测试驱动开发(TDD)、行为驱动开发(BDD)是敏捷开发方法论。

TDD,关注所有功能是否被实现
BDD,关注整体行为知否符合整体预期,编写每一行代码都有目的提供一个全面的测试用例集。

单元测试流程:

  1. 确定测试平台,确定测试平台,代码运行环境等。比如:Node端运行,Chrome运行,推荐Karma
  2. 选择测试框架,mocha,jasmine,jest,ava,辅助的断言库(chai),测试桩(Sinon,testDouble)
  3. 查看测试结果,主要看测试覆盖率。

单元测试框架:

  1. better-assert TDD断言库
  2. should.js BDD断言库
  3. expect.js BDD断言库
  4. chai.js TDD、BDD双模
  5. Jasmine.js BDD断言库
  6. Node.js 本身继承require(‘assert’)
  7. Intern 一个大而全的单元测试框架
  8. QUnit 一个游离在JQuery左右的测试框架
  9. Macaca 一套完整的自动化测试解决方案
  • 集成测试

集成测试确保不同的组件组合在一起没有问题

  • 自动化测试

端到端测试是最顶层的测试,即完全作为一个用户一样将程序作为一个完全的黑盒,打开应用程序模式输入,检查功能以及界面是否正确

其他测试

  • 性能测试

  • 基准测试

  1. 面向切面变成AOP无侵入式统计
  2. Benchmark基准测试方法,它并不是简单地统计执行多少次测试代码后对比时间,它对测试有着严密的抽样过程,执行多少次取决于采样到的数据能够完成统计。根据统计次数计算方差。
  • 压力测试
  1. 对网络接口做压力测试需要检测的介个常用指标有吞吐率、响应时间和并发数,这些指标反映了服务器并发处理能力。
  2. PV网站当日访问人数UV独立访问人数。PV每天几十万甚至上百万就需要考虑压力测试。换算公式QPS = PV/t
  3. 常用压力测试工具是ab、siege、http_load
  • 安全测试

安全漏洞检查

  1. XSS
  2. SQL
  3. CSRF
  4. 敏感路径、敏感词、敏感图片

代码检测工具ESLint

常用测试框架

  1. 单元测试 (karma)

Karma,karma不是一个测试框架,也不是一个断言库。karma只是启动一个HTTP服务器,并生成HTML文件。所以你可以选择你自己喜欢的测试框架。如Jasmine,Mocha,QUnit等等。

Jasmine,即是上面所说的JavaScript测试框架。它不依赖于其他任何JavaScript组件,它有干净的语法,Jasmine断言库可以让你简单的写出测试代码,(断言:表示为一些布尔表达式,你可以采用假设的方式,当程序输出的结果是否与假设的结果一致时,断言为真,否则,断言为假)在karma上运行Jasmine可以完成JavaScript的自动化测试、生成覆盖率报告等。

  1. e2e测试 (selenium-webdriver)

Selenium已经支持了大部分主流的浏览器,它是一个用于自动化测试的绝佳工具。

WebDriver(或者Selenium 2)基本上指的都是特定浏览器控制代码的语言绑定和实现。

WebDriver引入了一个JSON wire protocol用于将不同的语言和浏览器控制器进行交流。

  1. UI测试 || “UI走查” (backstopjs)

BackstopJS就是一个能够实现css自动化回归测试的工具,和Mocha这种依靠JavaScript判断断言语句正误和PhantomJS以模拟用户操作的测试工具不同,BackstopJS是一个基于比较网站快照的变化的回归测试工具,因此他更适给项目中的样式做回归测试,可以确保我们在重构网站样式的时候样式不发生变化,而且他支持设置多种浏览器尺寸,可以测试响应式布局。

  1. 接口测试 (mocha && mochawesome)

mocha是JavaScript的一种单元测试框架,既可以在浏览器环境下运行,也可以在Node.js环境下运行。

使用mocha,我们就只需要专注于编写单元测试本身,然后,让mocha去自动运行所有的测试,并给出测试结果。

mocha的特点主要有:

  • 既可以测试简单的JavaScript函数,又可以测试异步代码,因为异步是JavaScript的特性之一;

  • 可以自动运行所有测试,也可以只运行特定的测试;

  • 可以支持before、after、beforeEach和afterEach来编写初始化代码。

使用mochawesome模块,可以生成漂亮的HTML格式的报告。

线上地址:https://github.com/liushuai97/test