我们的开发人员正在开发一个项目,他们将使用C#编写的AWS lambda进行开发。他们将使用SNS,DynamoDB和一些日志工具。
我们应该测试这些lambda(仅限黑盒测试),那么我们可以使用node.js创建一个自动化框架吗?我们需要通过以JSON格式发送请求来测试每个lambda,然后处理响应。此外,我们需要验证他们将使用任何工具的日志(现在在CloudWatch中)。
请建议。
答案 0 :(得分:1)
我不会反对您选择的测试策略,而只是提供满足您需求的解决方案。
是的,只要您定位到同一个AWS账户,就可以。
您可以使用NodeJS调用Lambda函数,无论Lambdas写入的是什么运行时。基本上,在这种情况下,您使用特定输入调用Lambda并断言输出。
(由于您没有提及任何API网关,我假设您没有使用它,因此最直接的Lambda调用是最合适的。)
您也可以直接连接到DynamoDB并断言内容。
对于SNS和CloudWatch,测试这些将更加棘手。基本上,在运行测试之前,您需要设置SNS主题或CloudWatch Log Group的侦听器。这些监听器可以将收到的输入写入DynamoDB,然后您可以从那里进行验证。
P.S。
由于您在评论中询问了我的建议,因为评论框太小,我会在此处添加。
关于测试策略,您还有其他建议吗?
如果您专注于测试应用程序的逻辑,我认为这将是您的开发人员的时间和资源的更好投资。单元测试首先是最重要的。
您可以在本地进行集成测试(您可以在本地测试Lambda之间的集成,您也可以创建一个可以模拟SNS的简单Web服务器,可以使用模拟拦截Cloudwatch日志等)。
您现在正在进行测试的方式过于依赖AWS,这几乎就像您自己测试这些AWS服务一样。我认为您可以假设这些服务将按宣传方式工作,因此您只需担心您的应用程序是否正确调用这些AWS API调用。
您的测试方法是非云时代的遗留物,我们自己托管和管理整个基础架构,测试所有部分是否正常工作是有意义的。使用基于云的服务,您不再需要它,只关注您的应用程序。
答案 1 :(得分:1)
呀!使用Serverless Framework,这一切都非常简单。 如果使用无服务器框架部署下面的代码,使用serverless.yml中的设置,您将能够轻松地完成此操作。
serverless create --template aws-csharp --path pathOfService --name whateverName
using System; using Amazon.Lambda.Core; using Amazon.Lambda.Serialization.Json; using Amazon.Lambda.APIGatewayEvents; [assembly:LambdaSerializer(typeof(Amazon.Lambda.Serialization.Json.JsonSerializer))] namespace AwsDotnetCsharp { public class Handler { public APIGatewayProxyResponse Hello(APIGatewayProxyRequest request) { return new APIGatewayProxyResponse() { StatusCode = 200, Body = "Go Serverless v1.0! Your function executed successfully!", }; } } }
service: whateverName #the name you used to create the service provider: name: aws runtime: dotnetcore1.0 package: artifact: bin/release/netcoreapp1.0/deploy-package.zip functions: hello: handler: CsharpHandlers::AwsDotnetCsharp.Handler::Hello events: - http: path: hello method: GET cors: true
build.cmd
serverless deploy
在部署之后,命令行中会有一个链接可用于调用该函数。