Node.js学习笔记-05

news/2024/12/5 7:36:33/

10、测试

测试包含单元测试、性能测试、安全测试和功能测试等几个方面,本章将从Node实践的角度来介绍单元测试和性能测试。

10.1 单元测试

10.1.1 单元测试的意义

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

  1. 单一职责
  2. 接口抽象
  3. 层次分离

10.1.2 单元测试介绍

1.断言

2.测试框架

3.测试代码的文件组织

4.测试用例

5.测试覆盖率

6.mock

7.私有方法的测试

10.1.3 工程化与自动化

1.工程化

2.持续集成

10.1.4 小结

在这一节中,我们介绍了普通的单元测试的方方面面,对于一些特定场景下的单元测试方式并未做过多介绍比如测试Web应用等,读者可以自行查看所用Web框架的测试方式,比如Connect或Express提供了supertest辅助库来简化单元测试的编写。
在项目中经常会因为依赖方的变化而产生业务代码的跟随变动,如果没有单元测试的覆盖,依赖方逻辑发生变化后,很难定位该变动影响的范围。一旦为项目覆盖完善的单元测试项目的状态将会因为测试报告而了然于心。完善的单元测试在一定程度上也昭示着项目的成熟度。

10.2 性能测试

单元测试主要用于检测代码的行为是否符合预期。在完成代码的行为检测后,还需要对已有代码的性能作出评估,检测已有功能是否能满足生产环境的性能要求,能否承担实际业务带来的压力。换句话说,性能也是功能。
性能测试的范畴比较广泛,包括负载测试、压力测试和基准测试等。由于这部分内容并非Node特有,为了收敛范畴,这里将只会简单介绍下基准测试。
除了基准测试,这里还将介绍如何对Web应用进行网络层面的性能测试和业务指标的换算。

10.2.1 基准测试

10.2.2 压力测试

10.2.3 基准测试驱动开发

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

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

10.3 总结

测试是应用或者系统最重要的质量保证手段。有单元测试实践的项目,必然对代码的粒度和层次都掌握得较好。单元测试能够保证项目每个局部的正确性,也能够在项目迭代过程中很好地监督和反馈迭代质量。如果没有单元测试,就如同黑夜里没有秉烛的行走。
对于性能,在编码过程中一定存在部分感性认知,与实际情况有部分偏差,而性能测试则能很好地斧正这种差异。

11、产品化

目前,在国内大多数人都将Node以实验性质的方式来使用,国外已经有知名的项目将Node应用在实际的生产环境中,如eBay的数据中间层、Linkedin移动应用的服务器端等。本章将详细介绍将Node产品化过程中需要注重的一些细节,这些细节其实是具备普适性的,并非Node所独有。鉴于部分Node开发者可能从前端转来,为了完善Node生态的介绍,所以添加了此章。尽管因为熟悉JavaScript,可以较好地上手Node,但是事实上从演示原型到产品还有较长的缝隙需要去填补。
在实际的产品中,需要很多非编码相关的工作以保证项目的进展和产品的正常运行等,这些细节包括工程化、架构、容灾备份、部署和运维等。只有这些任务在持续性进行,才表明项目是活着的。

11.1 项目工程化

所谓的工程化,可以理解为项目的组织能力。体现在文件上,就是文件的组织能力。对于不同类型的项目,其组织方式也有所不同。除此之外,还应当有能够将整个项目串联起来的灵魂性文件。
项目的组织就犹如行军作战的阵法和章法,混乱而无目的的军队几乎不可能打胜仗,有其形有其魂的组织的生命周期才会更长,其形态才更稳固。
在项目工程化过程中,最基本的几步是目录结构、构建工具、编码规范和代码审查等。

11.2 部署流程

11.3 性能

11.4 日志

11.5 监控报警

11.6 稳定性

11.7 异构共存

11.8 总结

一般而言,决定用一项技术进行产品开发时,只有最早期是与这门技术完全相关的。随着时间的迁移,要解决的已经不是原来的问题了,一门技术只能在一定层面上发挥出它的优势来。用Node也是一样,随着开发的进展、涉及层面的增多,我们看到在产品的角度要解决的问题依然是大部分技术都要解决的问题。我们希望读者能够将Node纳人到新的层面上进行考虑,使它更适应产品,在产品中发挥出更大的优势来。

下一章介绍:搭建局域NPM仓库


http://www.ppmy.cn/news/1042095.html

相关文章

什么是卷积神经网络

目录 什么是卷积神经网络 全链接相对笨重:大胖子​编辑 ​编辑 参数众多:容易造成过拟合 ​编辑 卷积核:进行图像特征提取,源于卷积原理:求相交面积 卷积的作用 卷积的意义 ​编辑 通过卷积核减少参数 深度卷积…

解决无法访问 Github 问题

GitHub作为程序员访问最频繁的网站,程序员们经常需要访问 Github找开源项目、学习新框架、管理自己的个人开源项目等等。 github加速器 因为GitHub属于国外的网站,直接访问的话,速度非常慢,甚至访问不了, 今天给大家…

【Lua语法】算术、条件、逻辑、位、三目运算符

1.算术运算符 加减乘除取余: - * / % Lua中独有的:幂运算 ^ 注意: 1.Lua中没有自增自减(、–),也没有复合运算符(、-) 2.Lua中字符串可以进行算术运算符操作,会自动转成number 如:“10.3” 1 结果为11.3…

Java实现postgre数据库每日定时自动备份

前提:该备份仅为同数据库不同schema备份 假设需要备份的数据库为test,schema为public。代码如下 public void backupAllTables() {log.info("备份全表开始执行" System.currentTimeMillis());String origScheme1 "public";String…

统计XML标注文件中各标注类别的标签数量

目标检测任务重,担心数据集中各标签类别不均衡,想统计XML标注文件中各标注类别的标签数量,可以使用以下脚本: import os import glob import xml.etree.ElementTree as etdef count_labels(source_dir):file_list glob.glob(os.…

使用GEWE框架进行个人微信收藏夹及标签管理(标签篇)适用于微信群管、社群管理

友情链接 geweapi.com 点击即可访问! 添加标签 简要描述: 添加自定义标签 注意[name] 请求URL: http://域名地址/api/label/add 请求方式: POST 请求头: Content-Type:application/json 参数&#…

Open3D点云数据处理(二十):最小二乘直线拟合(三维)

文章目录 1 最小二乘三维直线拟合原理2 代码实现3 直线拟合的评估指标4 计算拟合的评估指标5 np.linalg.lstsq() 函数详解专栏目录:Open3D点云数据处理(Python) 1 最小二乘三维直线拟合原理 最小二乘三维直线拟合的原理是通过最小化数据点到直线距离的平方和,找到最优的直…

使用dockerfile手动构建JDK11镜像运行容器并校验

Docker官方维护镜像的公共仓库网站 Docker Hub 国内无法访问了,大部分镜像无法下载,准备逐步构建自己的镜像库。【转载aliyun官方-容器镜像服务 ACR】Docker常见问题 阿里云容器镜像服务ACR(Alibaba Cloud Container Registry)是面…