本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
在 AWS 上测试无服务器应用程序
Dan Fox、Rohan Mehta 和 Rob Hill,Amazon Web Services(AWS)
2022 年 12 月(文档历史记录)
本指南讨论了测试无服务器应用程序的方法,描述了您在测试过程中可能遇到的挑战,并介绍了最佳实践。这些测试技术旨在帮助您更快地迭代、更自信地发布代码。
本指南适用于希望为其无服务器应用程序制定测试策略的开发人员。您可以将该指南作为起点来学习测试策略,然后访问无服务器测试样本存储库
概述
自动化测试是重要的投资,有助于确保应用程序质量和开发速度。测试还可以加快开发人员反馈的速度。作为一名开发人员,您一定希望能够快速迭代您的应用程序,并获得有关代码质量的反馈。许多开发人员习惯于在桌面上编写部署到环境的应用程序,然后要么直接部署到操作系统,要么部署到基于容器的环境中。在桌面或基于容器的环境中工作时,通常会针对完全托管在桌面上的代码编写测试。但是,在无服务器应用程序中,架构组件可能无法部署到桌面环境,可能仅能存在于云中。基于云的架构可能包括持久性层、消息收发系统、API 和其他组件。在编写依赖于这些组件的应用程序代码时,可能很难确定设计和运行测试的最佳方式。
本指南可帮助您实现一致的减少摩擦和混乱并提高代码质量的测试策略。
先决条件
本指南假设您熟悉自动化测试的基础知识,包括如何使用自动化软件测试以确保软件质量。该指南提供了对无服务器应用程序测试策略的高级介绍,并且不需要任何编写测试的实践经验。
定义
本指南使用了以下术语:
-
单元测试,是针对单个架构组件的代码单独运行的测试。
-
集成测试,是针对两个或多个架构组件运行(通常在云环境中)的测试。
-
端到端测试,是验证整个应用程序行为的测试。
-
仿真器,是旨在模仿云服务的应用程序(通常由第三方提供),无需预置或调用任何资源。
-
Mock(也称为伪件),是测试应用程序中将依赖项替换为该依赖项的模拟的实施。
目标业务成果
本指南中的最佳实践旨在帮助您实现两个主要目标:
-
提高无服务器应用程序的质量
-
缩短实施或更改功能的时间
提高软件质量
应用程序的质量很大程度上取决于开发人员测试各种场景以验证功能的能力。当您不实施自动化测试时,或者更常见的是,当您的测试没有充分涵盖所需的场景时,您的应用程序的质量就无法得到确定或保证。
在基于服务器的架构中,团队能够轻松地定义测试范围:任何在应用程序服务器上运行的代码都需要进行测试。其他服务器调用的组件或服务器调用的依赖项,通常被负责服务器上应用程序的团队视为外部组件,不在测试范围之内。
无服务器应用程序通常由较小的工作单元组成,例如 AWS Lambda 函数(在其自己的环境中运行)。团队很可能会负责单个应用程序中的许多此类较小的单元。可以将某些应用程序功能完全委托给托管服务,如 Amazon Simple Storage Service(Amazon S3)或 Amazon Simple Queue Service(Amazon SQS),无需使用内部开发的代码。传统的基于服务器的软件测试模型可能会将托管服务视为应用程序外部的托管服务,从而将其排除在外。这可能导致覆盖范围不足,在这种情况下,关键场景可能仅限于手动探索性测试或一些结果因环境而异的集成测试使用案例。因此,采用包含托管服务行为和云配置的测试策略可以提高软件质量。
缩短实施或更改功能的时间
在迭代开发周期中发现软件错误和配置问题,对成本和计划的影响最小。如果开发人员未发现这些问题,识别该问题就需要更多的人进行额外的工作。
无服务器架构可能包括可通过 API 调用提供关键应用程序功能的托管服务。因此,您的开发周期应包括能够在与这些服务交互时准确演示正确功能的测试。如果未进行这些测试,您可能会遇到由您的环境和已部署环境之间的差异引起的问题。因此,您可能会花更多的时间尝试重现和验证修复,因为迭代现在需要在与首选设置不同的环境中检查更改。
通过为包括了调用其他服务的测试提供准确的结果,适当的无服务器测试策略得以缩短迭代时间。