Serverless自定义运行时和单元测试(下)

本文涉及的产品
函数计算FC,每月15万CU 3个月
Serverless 应用引擎免费试用套餐包,4320000 CU,有效期3个月
简介: Serverless自定义运行时和单元测试(下)

db和mailer初始化逻辑和依赖单独放在handler.js文件中,这个文件代码修改频率更低,这样修改后的代码就满足了准则一。

业务逻辑也不依赖任何外部服务,在单元测试时既可以使用真实的db和mailer服务,也可以模拟db和mailer服务,使单元测试简单,使得代码更易于扩展。

想将代码迁移到其他FaaS平台,不用修改业务逻辑,只需要提供handler.js。

提供一个handler.js使其适用于新的FaaS平台从而避免云厂商绑定。

需要对User类编写单元测试

首先需要选择一个测试框架,比如jest,jest可以零配置上手使用。内置的mock功能提供了完善的测试覆盖率报告等。

可以使用npm install -d jest来安装,在package.json中添加一个jest命令即可。

为了方便的管理所有测试用例,可以创建一个__test__目录,在里面新建名为users.test.js文件,用来编写Users类的测试用例。

jest默认会将test目录或包含test关键词文件当中代码用作单元测试。

https://gitee.com/pingfanrenbiji/serverless-class/tree/master/08/unit-te

Users类主要提供save方法,save方法的功能把用户信息存入数据库,然后给用户发送一封邮件,那么代码运行中可能存在这几种情况。

  • • 用户信息写入数据库成功发送邮件成功
  • • 用户信息写入数据库成功,发送邮件失败
  • • 用户信息写入数据库失败

这个时候可能感觉有到有点困难了,写数据库或发邮件都依赖远程服务,而且还要那么多异常情况来考虑,怎么进行测试呢?

对于save方法来说本质上不需要关注远程服务,只需要考虑分支逻辑的正确性。

这个地方可以对db和mailer模拟,模拟db和mailer的各自异常情况,然后观察save方法的执行结果是否正确。

FaaS提供mock功能,可以让我们对类进行模拟。

对db.saveUser和mailer.sendWelcomeEmail函数进行模拟

所以只需要对这两个函数进行模拟,当db.saveUser执行成功,发送邮件的返回值为true。

针对save方法编写第一个测试用例


覆盖率100%表示所有代码都经过了测试。

模拟业务变动的情况比如回调函数不再返回userId

这个时候就需要考虑这个变更对上下游的影响,避免造成线上业务风险,在确认没有风险之后,再去修改测试用例。

小结

  • • 为了更好的管理代码,建议单元测试目录结构和业务代码结构保持一致

  • • 将业务代码和依赖的云服务分离开来,这样才能方便测试
  • • 单元测试速度足够快,因为单元测试是用来辅助开发的,运行若是非常繁琐,运行速度慢会影响开发效率
  • • 单个测试要小于200毫秒,整个系统的测试要小于10分钟
  • • 要隔离一切外部调用,比如不能读磁盘、不能有网络调用,不能写数据库,不能依赖环境变量,不能依赖系统时间
  • • 必要时需要对外部进行模拟,用来确保单元测试不会对外部环境有所影响。由于模拟外部aip可能导致内部代码行为发生改变,所以要按照最新的外部api描述进行模拟
  • • 单一职责,一个测试用例只用来验证一个行为
  • • 单元测试代码是最好的文档和描述,因此单元测试需要明确代码的意图。好的单元测试应该是自描述的能对代码进行解释说明
  • • 单元测试并不是测试的全部,这是用来保证单个功能、组件的正确性,在Serverless中依旧使用集成测试来验证所有的组件集成在一起时运行是否正常。在设计和编写业务代码的时候需要考虑代码是否有利于测试,在这个基础之上,业务代码的单元测试和传统的应用单元测试的方法是互通的。
  • • Serverless应用由于其分布式、依赖云服务、事件驱动等特性导致编写单元测试很困难,为了方便编写单元测试,需要将业务逻辑和依赖的云服务分离开来
  • • 编写单元测试时,需要考虑速度、隔离性、单一职责等因素避免单元测试称为开发的负担



相关实践学习
【文生图】一键部署Stable Diffusion基于函数计算
本实验教你如何在函数计算FC上从零开始部署Stable Diffusion来进行AI绘画创作,开启AIGC盲盒。函数计算提供一定的免费额度供用户使用。本实验答疑钉钉群:29290019867
建立 Serverless 思维
本课程包括: Serverless 应用引擎的概念, 为开发者带来的实际价值, 以及让您了解常见的 Serverless 架构模式
相关文章
|
3月前
|
测试技术 Android开发 Python
探索软件测试的艺术:从基础到高级安卓应用开发中的自定义视图
【8月更文挑战第29天】在软件开发的世界中,测试是不可或缺的一环。它如同艺术一般,需要精细的技巧和深厚的知识。本文旨在通过浅显易懂的语言,引领读者从软件测试的基础出发,逐步深入到更复杂的测试策略和工具的使用,最终达到能够独立进行高效测试的水平。我们将一起探索如何通过不同的测试方法来确保软件的质量和性能,就像艺术家通过不同的色彩和笔触来完成一幅画作一样。
|
1月前
|
机器学习/深度学习 JSON 算法
实例分割笔记(一): 使用YOLOv5-Seg对图像进行分割检测完整版(从自定义数据集到测试验证的完整流程)
本文详细介绍了使用YOLOv5-Seg模型进行图像分割的完整流程,包括图像分割的基础知识、YOLOv5-Seg模型的特点、环境搭建、数据集准备、模型训练、验证、测试以及评价指标。通过实例代码,指导读者从自定义数据集开始,直至模型的测试验证,适合深度学习领域的研究者和开发者参考。
358 3
实例分割笔记(一): 使用YOLOv5-Seg对图像进行分割检测完整版(从自定义数据集到测试验证的完整流程)
|
1月前
|
机器学习/深度学习 JSON 算法
语义分割笔记(二):DeepLab V3对图像进行分割(自定义数据集从零到一进行训练、验证和测试)
本文介绍了DeepLab V3在语义分割中的应用,包括数据集准备、模型训练、测试和评估,提供了代码和资源链接。
177 0
语义分割笔记(二):DeepLab V3对图像进行分割(自定义数据集从零到一进行训练、验证和测试)
|
1月前
|
机器学习/深度学习 算法 PyTorch
目标检测实战(五): 使用YOLOv5-7.0版本对图像进行目标检测完整版(从自定义数据集到测试验证的完整流程)
本文详细介绍了使用YOLOv5-7.0版本进行目标检测的完整流程,包括算法介绍、环境搭建、数据集准备、模型训练、验证、测试以及评价指标。YOLOv5以其高精度、快速度和模型小尺寸在计算机视觉领域受到广泛应用。
393 0
目标检测实战(五): 使用YOLOv5-7.0版本对图像进行目标检测完整版(从自定义数据集到测试验证的完整流程)
|
1月前
|
算法 Java 测试技术
数据结构 —— Java自定义代码实现顺序表,包含测试用例以及ArrayList的使用以及相关算法题
文章详细介绍了如何用Java自定义实现一个顺序表类,包括插入、删除、获取数据元素、求数据个数等功能,并对顺序表进行了测试,最后还提及了Java中自带的顺序表实现类ArrayList。
19 0
|
4月前
|
弹性计算 Java Serverless
Serverless 应用引擎操作报错合集之上传自定义JAR包,启动时报错,是什么导致的
Serverless 应用引擎(SAE)是阿里云提供的Serverless PaaS平台,支持Spring Cloud、Dubbo、HSF等主流微服务框架,简化应用的部署、运维和弹性伸缩。在使用SAE过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
|
4月前
|
JavaScript NoSQL Serverless
函数计算产品使用问题之如何创建一个自定义运行时并指定Node.js版本
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
|
4月前
|
缓存 Serverless API
函数计算产品使用问题之不同环境下如何绑定自定义域名
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
|
3月前
|
运维 Serverless 调度
函数计算产品使用问题之怎么在HTTP触发的函数里添加或读取自定义头部
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
4月前
|
运维 网络协议 Serverless
函数计算产品使用问题之如何绑定自定义域名
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。

热门文章

最新文章

相关产品

  • 函数计算