我们可以使用node.js测试用C#编写的AWS lambda吗?

时间:2018-01-19 09:02:44

标签: c# node.js amazon-web-services lambda

我们的开发人员正在开发一个项目,他们将使用C#编写的AWS lambda进行开发。他们将使用SNS,DynamoDB和一些日志工具。

我们应该测试这些lambda(仅限黑盒测试),那么我们可以使用node.js创建一个自动化框架吗?我们需要通过以JSON格式发送请求来测试每个lambda,然后处理响应。此外,我们需要验证他们将使用任何工具的日志(现在在CloudWatch中)。

请建议。

2 个答案:

答案 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中的设置,您将能够轻松地完成此操作。

  1. Set up the Serverless Framework
  2. 通过在命令行中编写以下内容来创建新服务:
  3. serverless create --template aws-csharp --path pathOfService --name whateverName
    1. 进入该目录并用以下内容替换Handler.cs的内容:
    2. 
          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!", 
                      }; 
                  }    
              } 
          }
      
      
      1. 打开您的serverless.yml并将内容替换为:
      2. 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
        
        1. 撰写build.cmd
        2. 来构建项目
        3. 部署您的项目:serverless deploy

        4. 在部署之后,命令行中会有一个链接可用于调用该函数。