View a markdown version of this page

常见问题解答 - AWS 规范性指导

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

常见问题解答

我有一个 Lambda 函数,该函数可以在不调用任何其他服务的情况下执行计算并返回结果。我还需要在云端对其进行测试吗?

是的。 AWS Lambda 函数具有可能改变测试结果的配置参数。所有 Lambda 函数代码都依赖于超时和内存设置,如果设置不当,可能会导致函数失败。Lambda 策略还允许将标准输出记录到亚马逊。 CloudWatch即使您的代码没有 CloudWatch 直接调用,也需要权限才能启用日志记录,并且无法准确地模拟或模拟该权限。

在云端进行测试如何帮助单元测试? 如果它在云端并连接到其他资源,那不是集成测试吗?

我们将单元测试定义为在架构组件上单独运行的测试。此定义不一定排除使用服务呼叫或其他网络通信。

许多无服务器应用程序都有可以单独测试的架构组件,即使在云端也是如此。一个基本示例是 Lambda 函数,它接受一些输入,对其进行解释,然后向亚马逊简单队列服务 (Amazon SQS) Simple SQUEE Service 队列发送消息。要对这种函数进行单元测试,可能会包括测试输入值是否导致某些值出现在队列消息中。考虑一个使用排列、行动、断言模式编写的测试:

  • 安排-分配资源(用于接收消息的队列和正在测试的功能)。

  • Ac@@ t — 调用被测函数。

  • 断言-检索函数发送的消息,并验证输出。

Mock 测试方法包括使用进行中的 Mock 对象模拟队列,以及创建包含 Lambda 函数代码的类或模块的进行中的实例。在断言阶段,将从模拟对象中检索排队的消息。

在基于云的方法中,测试将面向测试目的创建 Amazon SQS 队列,并将部署带有配置为使用隔离的 Amazon SQS 队列作为输出目标的环境变量的 Lambda 函数。运行 Lambda 函数后,测试将从 Amazon SQS 队列中检索消息。

基于云的测试将运行相同的代码,断言相同的行为,并验证应用程序的功能正确性。但是,它还有一个额外的好处,那就是能够验证 Lambda 函数的以下设置: AWS Identity and Access Management (IAM) 角色、IAM 策略以及函数的超时和内存设置。