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

简介: 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应用由于其分布式、依赖云服务、事件驱动等特性导致编写单元测试很困难,为了方便编写单元测试,需要将业务逻辑和依赖的云服务分离开来
  • • 编写单元测试时,需要考虑速度、隔离性、单一职责等因素避免单元测试称为开发的负担



相关实践学习
函数计算部署PuLID for FLUX人像写真实现智能换颜效果
只需一张图片,生成程序员专属写真!本次实验在函数计算中内置PuLID for FLUX,您可以通过函数计算+Serverless应用中心一键部署Flux模型,快速体验超写实图像生成的魅力。
从 0 入门函数计算
在函数计算的架构中,开发者只需要编写业务代码,并监控业务运行情况就可以了。这将开发者从繁重的运维工作中解放出来,将精力投入到更有意义的开发任务上。
相关文章
|
5月前
|
人工智能 运维 安全
加速智能体开发:从 Serverless 运行时到 Serverless AI 运行时
在云计算与人工智能深度融合的背景下,Serverless 技术作为云原生架构的集大成者,正加速向 AI 原生架构演进。阿里云函数计算(FC)率先提出并实践“Serverless AI 运行时”概念,通过技术创新与生态联动,为智能体(Agent)开发提供高效、安全、低成本的基础设施支持。本文从技术演进路径、核心能力及未来展望三方面解析 Serverless AI 的突破性价值。
|
6月前
|
存储 人工智能 Serverless
函数计算进化之路:AI 应用运行时的状态剖析
AI应用正从“请求-响应”迈向“对话式智能体”,推动Serverless架构向“会话原生”演进。阿里云函数计算引领云上 AI 应用 Serverless 运行时技术创新,实现性能、隔离与成本平衡,开启Serverless AI新范式。
690 12
|
人工智能 安全 Java
Serverless JManus: 企业生产级通用智能体运行时
JManus 是面向 Java 的企业级通用智能体框架,支持多 Agent 框架、MCP 协议和 PLAN-ACT 模式,具备高可用、弹性伸缩的特性。结合阿里云 Serverless 运行时 SAE 和 FC,实现稳定安全的智能体应用部署与运行。
754 23
|
11月前
|
人工智能 开发框架 安全
Serverless MCP 运行时业界首发,函数计算让 AI 应用最后一公里提速
作为云上托管 MCP 服务的最佳运行时,函数计算 FC 为阿里云百炼 MCP 提供弹性调用能力,用户只需提交 npx 命令即可“零改造”将开源 MCP Server 部署到云上,函数计算 FC 会准备好计算资源,并以弹性、可靠的方式运行 MCP 服务,按实际调用时长和次数计费,欢迎你在阿里云百炼和函数计算 FC 上体验 MCP 服务。
905 30
|
6月前
|
人工智能 Kubernetes 安全
重塑云上 AI 应用“运行时”,函数计算进化之路
回顾历史,电网的修建,深刻地改变了世界的经济地理和创新格局。今天,一个 AI 原生的云端运行时的进化,其意义也远不止于技术本身。这是一次设计哲学的升华:从“让应用适应平台”到“让平台主动理解和适应智能应用”的转变。当一个强大、易用、经济且安全的 AI 运行时成为像水电一样的基础设施时,它将极大地降低创新的门槛。一个独立的开发者、一个小型创业团队,将有能力去创造和部署世界级的 AI 应用。这才是技术平权的真谛,是激发全社会创新潜能的关键。
|
运维 负载均衡 Serverless
函数计算产品使用问题之在同一地域同一时刻最多可以同时运行多少个函数实例
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
11月前
|
人工智能 开发框架 运维
Serverless MCP 运行时业界首发,函数计算让 AI 应用最后一公里提速
Serverless MCP 运行时业界首发,函数计算支持阿里云百炼 MCP 服务!阿里云百炼发布业界首个全生命周期 MCP 服务,无需用户管理资源、开发部署、工程运维等工作,5 分钟即可快速搭建一个连接 MCP 服务的 Agent(智能体)。作为云上托管 MCP 服务的最佳运行时,函数计算 FC 为阿里云百炼 MCP 提供弹性调用能力。
 Serverless MCP 运行时业界首发,函数计算让 AI 应用最后一公里提速
|
机器学习/深度学习 JSON 算法
实例分割笔记(一): 使用YOLOv5-Seg对图像进行分割检测完整版(从自定义数据集到测试验证的完整流程)
本文详细介绍了使用YOLOv5-Seg模型进行图像分割的完整流程,包括图像分割的基础知识、YOLOv5-Seg模型的特点、环境搭建、数据集准备、模型训练、验证、测试以及评价指标。通过实例代码,指导读者从自定义数据集开始,直至模型的测试验证,适合深度学习领域的研究者和开发者参考。
6392 3
实例分割笔记(一): 使用YOLOv5-Seg对图像进行分割检测完整版(从自定义数据集到测试验证的完整流程)
|
机器学习/深度学习 JSON 算法
语义分割笔记(二):DeepLab V3对图像进行分割(自定义数据集从零到一进行训练、验证和测试)
本文介绍了DeepLab V3在语义分割中的应用,包括数据集准备、模型训练、测试和评估,提供了代码和资源链接。
4015 0
语义分割笔记(二):DeepLab V3对图像进行分割(自定义数据集从零到一进行训练、验证和测试)
|
机器学习/深度学习 算法 PyTorch
目标检测实战(五): 使用YOLOv5-7.0版本对图像进行目标检测完整版(从自定义数据集到测试验证的完整流程)
本文详细介绍了使用YOLOv5-7.0版本进行目标检测的完整流程,包括算法介绍、环境搭建、数据集准备、模型训练、验证、测试以及评价指标。YOLOv5以其高精度、快速度和模型小尺寸在计算机视觉领域受到广泛应用。
6695 0
目标检测实战(五): 使用YOLOv5-7.0版本对图像进行目标检测完整版(从自定义数据集到测试验证的完整流程)

热门文章

最新文章

相关产品

  • 函数计算