Skip to content

10测试

从单元测试、性能测试两个维度进行讲解,重视测试,并在项目中使用,事半功倍

单元测试

好代码,比较好写单元测试,相互促进 不好的代码,需要重构,再写单元测试

  • 原则
    • 1、单一职责,一段代码只做一件事,方便编写测试
    • 2、接口抽象,针对接口进行测试,具体实现变化不影响测试单元
    • 3、层次分离,mvc 逐层测试,逐层保证
  • 1、断言:断言就是单元测试中用来“保证最小单元是否正常”的检测方法;
    • 测试第一步,看功能是否正常,对基本的判断;
    • assert 模块:断言库大多都是基于assert模块进行封装和扩展的,这包括著名的should.js断言库
  • 2.测试框架:
    • 断言检查失败会停止整个应用
    • 实际应该:记录下抛出的异常并继续执行,最后生成测试报告;应用测试框架
    • 它本身并不参与测试, 主要用于管理测试用例和生成测试报告,
    • mocha
      • 测试风格
        • TDD 测试驱动开发 suite test
          • TDD关注所有功能是否被正确实现,每一个功能都具备对应的测试用例
          • TDD的表述方式偏向于功能说明书的风格
        • BDD 行为驱动开发 describe it
          • BDD关注整体行为是否符合预期,适合自顶向下的设计方式
          • BDD的表述方式更接近于自然语言的习惯
        • 单元测试框架 mocha
      • 测试报告
        • 报告格式
          • mocha --reporters 可以查看所有报告格式
          • mocha -R json
          • json 通用、html-cov 可视化查看代码覆盖率
        • 看文档
  • 3、测试代码的文件组织
    • 测试代码放test文件夹
  • 4、测试用例
    • 基本包括:至少一个断言、正向测试和反向测试
    • (对于node还有)异步测试 done、超时设置如何设置 this.timeout(500)
  • 5、测试覆盖率:(重要指标)
    • 如何判断单元测试对代码的覆盖情况, 我们需要直观的工具来体现。
    • jscover模块 (java)、lanket模块 (纯js模块,解决jscover不足)(都过时)
  • 6、mock
    • 模拟异常
    • 我们通过伪造fs.readFileSync()方法抛出错误来触发异常。
    • 同时为了保证该测试用例不影响其余用例,我们需要在执行完后还原它
    • 推荐模块 muk(过时)
  • 7、私有方法
    • rewire模块提供了一种巧妙的方式实现对私有方法的访问。
    • 原理:引入文件,设置全局__get__()方法,eavl执行
  • 8、工程化、自动化
    • 工程化 Makefile
    • 持续集成 travis-ci
  • 其他:
    • supertest 支持express等web框架测试

目前使用框架:

  • 之前都是偏于零散模块处理,单元测试,后边发展出集成度高的测试框架Jest等
  • 后端:
    • jest 内置断言库、配置相对简单(前端也可以)
    • mocha 丰富、灵活可定制
    • Tap 小众
  • 前端交互:
    • Puppeteer
      • 擅长测试前端交互和用户体验
      • api简单高效
    • cypress
      • 不仅适用于测试 Web 应用程序
      • 还可以用于数据爬取、屏幕截图、性能分析等更广泛的用途
      • api更丰富

性能测试

  • 检测已有功能是否能满足生产环境的性能要求,能否承担实际业务带来的压力
  • 负载测试
  • 1、基准测试
    • 在多少时间内执行了多少次某个方法
    • benchmark模块
      • 并不简单的统计次数时间
      • 它对测试有着严密的抽样过程
  • 2、压力测试
    • 吞吐率、
    • 响应时间、
    • 并发数
    • 工具:
      • ab、
        • ab -c 10 -t 3 http://localhost:8001/
        • 十个并发数、3秒内
        • Requests per second:
          • 这是我们重点关注的一个值,它表示服务器每秒能处理多少请求,是重点反映服务器并发能力的指标。
          • 这个值又称RPS或QPS。
        • 结果的每一个字段的意义,可以查看书中具体的对应解释
      • siege、
      • http_load
  • 3、基准测试驱动开发 BDD
    • Benchmark Driven Development
    • 大致思路:
      • (1) 写基准测试。(2) 写/改代码。(3) 收集数据。(4) 找出问题。(5)回到第(2)步。
    • 帮助写测试
  • 4、测试数据与业务数据的转换
    • 评估业务量,以便系统可以胜任在线任务量
    • 假设每天访问量是100w,集中在10小时以内,
    • 那么100w/100h= qp约等于27.7,
    • 每秒处理27.7个请求才能胜任业务