「数据库」没经过这些测试,你的微服务架构也敢进入生产环境?
微服务架构是指将应用程序拆分为一系列较小、且直接用于解决具体问题的组件的实践方案 。 以此为基础 , 架构中的每一个组件都将通过各类常规协议(例如 HTTP 或者更轻量化的 TCP)相互通信 。 说到这里 , 大家可能会好奇 , 对于微服务架构来说 , 测试真的很重要吗?
答案当然是重要!测试的重要性是体现在多方面的 , 不过比较重要的是以下几点:
- 节约金钱与时间
- 更安全
- 强化生产质量(减少 bug 与错误数量)
- 提升客户满意度
- 最重要的是 , 夜里能睡得更安稳
使用什么测试方法? 目前软件测试的种类比较多 , 大致可以分为功能测试和非功能测试两大类 。 其中功能测试类包括单元测试、集成测试、通烟测试、回归测试、健全测试、Beta/ 验收测试和端到端(e2e)测试 , 而非功能测试则包括了性能测试、负载测试、压力测试、安全测试、合规测试和可用性测试 。
一般来说 , 应用程序的复杂度越高 , 需要使用的测试类型也就越多 。 不过 , 有几个测试是所有应用程序都不可或缺的:
- 单元测试
- 集成测试
- E2E 测试、回归测试与安全测试相结合
少说话 , 多编码 接下来 , 我们一起探讨一下如何在微服务架构当中实现上述基础软件测试类型 。 微服务架构使用 TCP 协议实现组件间的通信 , 并利用 Nest Framework 以 Node.JS 编写而成 。
很多人可能不太了解 NestJS , 我们先简单介绍一下 , 官方 GitHub repo 是这样描述 Nest 的:
Nest 是一款框架 , 用于构建高效且可扩展的 Node.js 服务器端应用程序 。 它利用现代 JavaScript 的特性 , 由 TypeScript 构建而成(保留纯 JavaScript 兼容性) , 同时结合有 OOP(面向对象编程)、FP(函数编程)以及 FRP(函数响应式编程)的元素 。 从底层来看 , Nest 不仅能够使用 Express , 同时也兼容其他多种库 , 包括 Fastify , 旨在轻松使用大量现有第三方插件 。 ”
在示例中 , 我们将使用一个简单的模块 name:user 配合一个简单函数 createUser , 在数据库内创建一个新用户 。
该模块的文件夹结构如下所示:
本文插图
我们设了一个监听 create_user 消息的控制器 。 在利用 ValidationPipe 进行验证之后 , 它会在服务之内调用一个具有相同名称的函数 。
本文插图
本文插图
在服务之内 , 我们会对用户密码进行哈希处理 。 接下来 , 使用 TypeORM 将新用户保存在数据库内 。
本文插图
对这个模块 , 我们使用 TypeORM 作为链接至表 User 的 ORM;同时 , 利用名为 UtilsModule 的另一个模块实现某些辅助功能:
推荐阅读
- 「数据线」手机充电慢?那你需要看看是不是这些地方出了问题
- 『手机技巧超人』手机开发者选项居然这么神奇!手机用了这些年,你不会还不知吧?
- 【Ace】原创 用实际数据发声,OPPO Ace2的这些亮点你要知道
- #沈阳#快抢鸭!!!沈阳市浑南区发放337.6万元消费券,这些地方可以领
- [每日居家好妙招]手机充电慢?那你需要看看是不是这些地方出了问题
- [保值率]安卓机保值率低是这些原因,网友:说的句句在理
- 牛气@你以为诺基亚只会卖情怀?其实它还做过这些牛气的事儿
- 「」不跟随不妥协!这些设计“别具一格”的旗舰千万别错过
- 【】除了支付宝,这些顶尖品牌更新案例你了解多少?
- 「」印尼电子钱包LinkAja又有新动作