Serverless 应用中的本地开发和集成测试

什么是 Serverless 应用?

Serverless 应用是一种使用云计算平台的方式,其中应用程序逻辑被以函数的形式运行,而无需管理底层服务器或操作系统。在Serverless 应用模式下,应用可以自动扩展以符合流量需求,不需要用户自行管理人员。

Serverless 应用最受欢迎的云计算平台是 AWS Lambda,但是和其他云计算平台类似,Azure、Google Cloud Platform 以及其他云计算平台也提供函数服务。

为什么要进行本地开发和集成测试?

当应用程序已经部署到生产环境,调试问题非常困难。本地开发和集成测试可以帮助我们在应用程序的开发过程中及早发现并解决问题,从而最大程度地减少对生产环境的影响。

在 Lambda 或其他服务器端计算设施中开发 AWS 函数时,我们通常使用编辑器并运行函数代码,通过输入数据为测试提供输入以进行测试。这种方式的问题是代码本身无法获得最终结果,而是由 AWS 计算环境来处理并返回结果。因此,当发现问题时,我们很难确定问题是由代码还是由 AWS 计算环境引起的。此外,每次更新 Lambda 函数代码后,测试功能必须亲自手动和运行整个工作流程,以确保它仍然按照预期工作。在某些情况下,运行完整的工作流程可能需要等待几分钟甚至更长时间。

本地开发和测试

在本地设施中进行开发和测试 Serverless 应用可以帮助我们在一切准备就绪之前检查代码的各个方面。以下是一些您可以使用的工具:

AWS Serverless Application Model (SAM)

AWS SAM 是一种命令行界面的工具,可用于在本地端运行、测试和对 AWS Lambda 应用程序进行本地构建和部署。在此过程中,该工具会下载并运行一个本地的 Lambda 运行环境,并以相同的方式处理事件和调用。

例如,以下命令将在本地启动具有名称“helloworld”的 AWS Lambda 函数:

--- ----- ------------ ---------- -------- ------- ----------

LocalStack

LocalStack 是一种本地应用程序,可以模拟 AWS 云基础设施环境。我们可以使用它来在本地运行 AWS Lambda、API Gateway、S3、DynamoDB 等服务以及其他 AWS 服务。这样,我们就可以在开发期间模拟与 AWS 函数交互的所有功能。我们还可以将本地 AWS 函数的输出附加到 AWS CloudFormation 服务栈,以便使用 CloudFormation 来管理我们的 Serverless 应用程序,并使用 Stack Update、Delete 等操作对其进行处理。

Serverless Framework

Serverless Framework 是一个集成工具,能够解决开发和部署 Serverless 应用程序时遇到的大多数问题。它是一个开源框架,提供了一种轻松构建和部署 Serverless 应用程序的方式,并为 AWS、Azure 和 Google Cloud Platform 等云提供了插件和功能。使用 Serverless Framework,我们可以在本地设备上测试 AWS Lambda 函数,以确保我们的代码能够正确工作。

集成测试

集成测试是一种测试服务器端应用程序的方法,旨在确保它的各个部分正确协调工作,并满足其目标要求。AWS Lambda 函数也需要进行集成测试。让我们看看如何进行集成测试:

AWS SAM

AWS SAM 提供了一种在构建 AWS Lambda 应用程序之前进行本地测试的方法。按照以下步骤使用 AWS SAM 进行集成测试:

  1. 安装 SAM CLI 并启动 Lambda 函数代码。

  2. 在本地设备上通过浏览器或 CURL 命令行工具发送输入数据。

  3. SAM CLI 将此输入转发到本地 Lambda 运行环境,并将其视为 AWS Lambda 的事件。Lambda 函数将处理事件并返回结果。

  4. 接下来,SAM CLI 将 Lambda 函数的执行日志和文件输出复制到命令行和本地磁盘。

例如,以下命令将构建和部署具有名称“my-function”的 AWS Lambda 函数,并启动 API Gateway 本地服务以便测试:

--- ----- --------- ---------- --------

测试框架

测试框架是一种用于编写需求文档并使用标准化格式自动检查源代码的工具。使用测试框架,我们可以编写自动化测试用例,以确保我们的代码在各种条件下都能正常工作。

例如,Mocha 是一个流行的JavaScript 测试框架,它是一种适用于Node.js 和浏览器的测试框架,支持 JavaScript、TypeScript、CoffeeScript 等。我们可以使用它来编写自动化测试用例,并自动运行这些测试用例以验证代码是否按预期工作。

总结

使用本地开发和集成测试工具,我们可以优化 AWS Lambda 函数的开发、测试和部署流程。这可以帮助我们更快地迭代和解决问题,从而更快地向客户提供更好的应用程序。在 AWS Lambda 函数开发过程中,本地开发和测试以及集成测试是非常重要的,它们可以帮助我们在生产环境之前发现和解决问题,从而更好地满足客户的需求。

示例代码

以下是使用 AWS SAM CLI 运行本地 Lambda 函数的示例代码:

sam.pizza-nodejs,其中 event.json 文件包含要输入到 Lambda 函数的事件,您可以更改其属性以符合您的需求。

template.yaml

----------
  -----------
    ----- -------------------------
    -----------
      -------- -------------
      -------- ----------
      -------- ------------

event.json

-
  ------- -----
-

index.js

--------------- - ----- ------- -- -
  ----- ---- - ---------- -- --------
  ------ - -------- ------- --------- --
--

来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/647a23d7968c7c53b05fd066


猜你喜欢

  • Next.js Server-Side Rendering 实践总结

    在前端开发中,网站性能和用户体验是至关重要的。而一种提高性能和体验的方法就是采用 Server-Side Rendering(服务端渲染)技术。针对 Next.js 框架,本文将介绍 Next.js ...

    1 年前
  • Cypress 结合 Docker Compose 实现可靠的多环境测试方案

    前言 在前端开发中,自动化测试是非常重要的一个环节,它可以保证在不同的环境下代码的准确性以及可靠性。Cypress 是一个前端自动化测试工具,它可以帮助我们快速编写高效、稳定的测试用例,并且 Cypr...

    1 年前
  • Webpack3入门指南:FilterPlugin的使用

    Webpack是一个流行的前端打包工具,它可以将多个模块打包成一个或多个静态资源文件,从而提高网站性能和开发效率。在Webpack的配置文件中,使用插件可以帮助我们实现更多的功能。

    1 年前
  • ESLint 配置出错:解决 'Parsing error: The keyword 'const' is reserved' 错误

    在进行前端开发时,我们常使用 ESLint 作为代码规范检查的工具,以保证代码风格的统一。但在使用 ESLint 进行代码检查时,有时会遇到 Parsing error: The keyword 'c...

    1 年前
  • 如何在 TypeScript 中解决 JS 全局变量的命名冲突?

    在 JavaScript 中,全局作用域是非常常见的。如果我们在一个项目中使用了大量的全局变量,就有可能遇到命名冲突的问题。在这种情况下,我们可能需要使用闭包或名称空间来避免这个问题。

    1 年前
  • ES6 的 Rest、Spread 多功能运用

    ES6 的 Rest、Spread 多功能运用 在开发过程中,我们常常会遇到需要操作数组或对象的场景。ES6 提供 Rest 和 Spread 运算符,大大增加了我们在编码中操作数组和对象的灵活性。

    1 年前
  • # ECMAScript 2021 中的 Object.setPrototypeOf 方法详解

    ECMAScript 2021 中的 Object.setPrototypeOf 方法详解 在 ECMAScript 2021 中,引入了新的方法 Object.setPrototypeOf(),其作...

    1 年前
  • 在 Deno 中使用 Mocha 和 Chai 进行测试

    前言 Deno 作为一款新兴的 JavaScript 运行环境,它的安全、简单、快速等特点备受关注。但是,开发者们不仅仅需要一款高效的运行环境,还需要一款能使开发变得更加简单和高效的工具,比如单元测试...

    1 年前
  • 使用 Nexus 构建类型安全的 GraphQL API

    使用 Nexus 构建类型安全的 GraphQL API GraphQL 是一种强类型的查询语言,迅速成为前端开发的重要技术之一。随着 GraphQL 的流行,越来越多的开发者开始关注 GraphQL...

    1 年前
  • 响应式设计中处理模糊图片加载的技巧

    随着移动设备的普及,响应式设计已成为前端开发的重要技能之一。在响应式设计中,我们经常需要处理图片的自适应问题。如果不恰当地处理图片大小和分辨率,页面加载速度将会受到影响。

    1 年前
  • Sequelize 如何重命名表字段?

    在进行数据库设计和开发时,数据表字段的命名往往是一个比较重要且需要仔细考虑的事情。在某些情况下,我们可能需要对表中的某些字段进行重命名。如果我们使用 Sequelize 作为我们的 ORM 框架,那么...

    1 年前
  • ES7 支持更多的数学运算方法

    ES7 支持更多的数学运算方法 在 ES7 中,JavaScript 引入了很多新的特性,其中有一些特性是针对数学运算的。这些新的特性让处理数学运算更加方便和快捷,同时也提高了代码的可读性和可维护性。

    1 年前
  • SSE 如何实现在多个页面之间传递数据?

    在前端开发中,如何实现在多个页面之间传递数据是一个重要的问题。传统的方式包括使用 cookie、localStorage、sessionStorage 或者通过 URL 参数传递,但是这些方式都存在一...

    1 年前
  • 使用 Chai 扩展的复杂 API 测试

    在前端开发中,我们经常需要测试复杂的 API,尤其是在开发大型应用程序时。Chai 是一个流行的 JavaScript 测试框架,它支持多种编程风格,包括 BDD 和 TDD 等,使我们能够更加舒适地...

    1 年前
  • React 组件测试利器——Enzyme

    React 组件开发的核心就是组件的编写和组件的测试。测试不仅仅能够检查代码的正确性,更能够提高代码的质量和可维护性。因此,React 也提供了一些相关的测试工具和框架来方便测试的编写和执行,其中,E...

    1 年前
  • ES9 async 函数和 Promise 的深入剖析

    ES9 async 函数和 Promise 的深入剖析 在 Web 开发中,使用异步操作是日常工作中的常态。ES6 引入了 Promise,简化了异步操作,而 ES9 引入了 async 函数,进一步...

    1 年前
  • 如何使用 Tailwind CSS 进行构建主题色彩设计?

    Tailwind CSS 是一种现代化的 CSS 框架,可以帮助您快速构建具有响应性和优秀设计感的网站。其中的主题色彩设计可以让您的网站更具有个性化的特色和吸引力。

    1 年前
  • 使用 Material Design 开发时如何避免出现 FAB 显示不完整的问题

    FAB(Floating Action Button)是 Material Design 中的一种交互设计元素,常用于浮动在页面底部或右下角,提供一个主要的操作或快速入口。

    1 年前
  • 如何使用 LESS 加速开发

    随着前端技术的快速发展,我们可以使用各种工具和框架来加速我们的开发过程。LESS 是其中一个非常流行的 CSS 预处理器,可以帮助我们更加高效地编写 CSS。本文将介绍 LESS 的基本功能,以及如何...

    1 年前
  • Node.js 中使用 Passport 实现认证功能

    认证是 Web 应用中必不可少的一个环节,它使得应用程序能够确定用户的身份。Passport 是 Node.js 中一款流行的认证中间件,能够轻松地将它集成到 Node.js 应用程序中,实现各种认证...

    1 年前

相关推荐

    暂无文章