目录
  1. 1. 深入浅出Node.js学习笔记(十)
    1. 1.1. 测试
    2. 1.2. 1. 单元测试
      1. 1.2.1. 1.1 单元测试的意义
      2. 1.2.2. 1.2 单元测试介绍
      3. 1.2.3. 1.3 工程化与自动化
    3. 1.3. 2. 性能测试
      1. 1.3.1. 2.1 基准测试
      2. 1.3.2. 2.2 压力测试
      3. 1.3.3. 2.3 基准测试驱动开发
      4. 1.3.4. 2.4 测试数据与业务数据的转换
深入浅出Node.js学习笔记(十)

深入浅出Node.js学习笔记(十)

测试

测试的意义在于,在用户消费产出的代码之前,开发者首先消费它,给予其重要的质量保证。

测试包括单元测试、性能测试、安全测试和功能测试等方面。

1. 单元测试

1.1 单元测试的意义

对于开发者而言,单元测试就是最基本的一种方式。如果开发者不自己测试代码,那必然要面对如下问题。

  1. 测试工程师是否可依赖?
  2. 第三方代码是否可依赖?
  3. 在产品迭代过程中,如何继续保证质量?

编写可测试代码的原则:

  • 单一职责
  • 接口抽象
  • 层次分离

对于开发者而言,不仅要编写单元测试,还应当编写可测试代码。

1.2 单元测试介绍

单元测试主要包括断言、测试框架、测试用例、测试覆盖率、mock、持续集成等方面。由于Node的特殊性,还加入了异步代码测试和私有方法的测试 。

  1. 断言

    断言:单元测试中用来保证最小单元是否正常的监测方法。

    断言用于检查程序在运行时是否满足期望。

  2. 测试框架

    记录下抛出的异常并继续执行,最后生成测试报告,这些任务的承担者就是测试框架。

    测试框架用于测试服务,本身并不参与测试,主要用于管理测试用例和生成测试报告,提升测试用例的开发速度,提高测试用例的可维护性和可读性,以及一些周边性的工作。

    • 测试风格

      将测试用例的不同组织方式称为测试风格。

      主流的单元测试风格:

      • TDD(测试驱动开发)
      • BDD(行为驱动开发)

      两者的差别:

      • 关注点不同。TDD关注所有的功能是否被正确实现,每一个功能具备对应的测试用例;BDD关注整体行为是否符合预期,适合自顶向下的设计方式。
      • 表达方式不同。TDD的表达方式偏向于功能说明书的风格;BDD的表述方式更接近于自然语言的习惯。
    • 测试报告

      无论采用哪个断言库,运行测试用例后,测试报告是开发者和质量管理者都关注的东西。

  3. 测试代码的文件组织

    想让单元测试顺利运行起来,得在包描述文件(package.json)中添加相应模块的依赖关系。

  4. 测试用例

    一个行为或者功能需要有完善的、多方面的测试用例,一个测试用例中包含至少一个断言。

    测试用例最少需要通过正向测试和反向测试保证测试对功能的覆盖,这是最基本的测试用例。

    • 异步测试

    • 超时设置

      如果一个测试用例的执行时间超过了预期时间,将会记录下一个超时时间,然后执行下一个测试用例。

  5. 测试覆盖率

    通过不停地代码添加测试用例,将会不断地覆盖代码的分支和不同的情况。

  6. mock

    mock:通过伪造被调用方法来测试上层代码的健壮性。

    通过模拟底层方法出现异常的情况,只要监测调用方的输出值是否符合期望即可,无须关注是否真正的异常。

  7. 私有方法的测试

    rewire模块提供了一种巧妙的方式实现对私有方法的访问。

1.3 工程化与自动化

  1. 工程化

    Node中使用Makefile来构建工程。

  2. 持续集成

    对于实际的项目,频繁地迭代是常态,如何记录版本的迭代信息,还需要一个持续集成的环境。

    社区中流行的方式—-利用travis实现持续集成。

2. 性能测试

性能测试的范畴较为广泛,包括负载测试、压力测试和基准测试。

2.1 基准测试

基准测试要统计的是在多少时间内执行了多少次某个方法。

2.2 压力测试

对网络接口进行压力测试以判断网络接口的性能。

对网络接口做压力测试需要考察的指标有:吞吐率、响应时间和并发数。这些指标反映了服务器的并发处理能力。

2.3 基准测试驱动开发

基准测试驱动开发(BDD):

其流程:

  1. 写基准测试
  2. 写/改代码
  3. 收集数据
  4. 找出问题
  5. 回到第2步

2.4 测试数据与业务数据的转换

在进行实际的功能开发前,需要评估业务量,以便开发完成后能够胜任实际的在线业务量。

文章作者: BleakNight
文章链接: https://bleaknight95.github.io/2020/01/14/%E6%B7%B1%E5%85%A5%E6%B5%85%E5%87%BANode.js%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0%EF%BC%88%E5%8D%81%EF%BC%89/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 BleakNight's Blog
打赏
  • 微信
  • 支付寶

评论