aws 堆栈模板

AWS云堆栈 (例如DynamoDB,S3等)上构建应用程序时,需要针对这些组件编写测试。 您可能首先想到的是拥有一个用于生产的环境和另一个用于测试的环境,然后针对该环境运行测试。

这对于集成测试,部署测试,端到端测试或性能测试是很好的,但是对于组件测试,如果可以在本地和脱机运行AWS云堆栈 ,它将更快。

Localstack提供了此功能。 它提供了功能齐全的本地AWS云堆栈,因此您可以脱机开发和测试云应用程序。

Localstack提供了启动所有堆栈的不同方法,但最简单的方法是使用Docker映像。 所以如果你跑
atlassianlabs / localstack,然后您将使用以下配置启动堆栈并运行它:

  • 位于http:// localhost:4567的API网关
  • Kinesis位于http:// localhost:4568
  • DynamoDB位于http:// localhost:4569
  • DynamoDB流位于http:// localhost:4570
  • 位于http:// localhost:4571的Elasticsearch
  • S3位于http:// localhost:4572
  • http:// localhost:4573上的Firehose
  • Lambda位于http:// localhost:4574
  • SNS位于http:// localhost:4575
  • http:// localhost:4576上的SQS
  • http:// localhost:4577上的Redshift
  • 位于http:// localhost:4578的ES(Elasticsearch Service)
  • SES位于http:// localhost:4579
  • Route53位于http:// localhost:4580
  • http:// localhost:4581上的CloudFormation
  • 位于http:// localhost:4582的CloudWatch

因此,下一个问题是如何使启动容器,运行测试以及最终停止所有操作并使它可移植的所有过程自动化,因此您无需担心在Linux或MacOS中使用Docker的情况? 答案是使用Arquillian Cube

Arquillian CubeArquillian扩展,可用于在测试中管理Docker容器。 要使用它,您需要在计算机上运行的Docker守护程序(它可以是本地的,也可以不是本地的),但可能在本地。

Arquillian Cube提供了三种定义容器的不同方法:

  • 定义docker-compose文件。
  • 定义容器对象。
  • 使用容器对象DSL。

在此示例中,我将向您展示“容器对象DSL”方法,但其他方法也都可以。

您需要做的第一件事是在构建工具上添加Arquillian和Arquillian Cube依赖项。

<dependencyManagement><dependencies><dependency><groupId>org.arquillian.cube</groupId><artifactId>arquillian-cube-docker</artifactId><version>1.6.0</version></dependency><dependency><groupId>org.jboss.arquillian</groupId><artifactId>arquillian-bom</artifactId><version>1.1.13.Final</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><dependencies><dependency><groupId>com.amazonaws</groupId><artifactId>aws-java-sdk</artifactId><version>1.11.86</version></dependency><dependency><groupId>org.jboss.arquillian.junit</groupId><artifactId>arquillian-junit-standalone</artifactId><scope>test</scope></dependency><dependency><groupId>org.arquillian.cube</groupId><artifactId>arquillian-cube-docker</artifactId><scope>test</scope></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope></dependency><dependency><groupId>org.assertj</groupId><artifactId>assertj-core</artifactId><version>3.6.2</version><scope>test</scope></dependency></dependencies>

然后,您可以编写测试,在这种情况下,该测试将测试您可以使用在Docker主机中启动的S3实例创建存储桶并添加一些内容:

import com.amazonaws.services.s3.AmazonS3Client;
import com.amazonaws.services.s3.model.S3Object;
import java.io.ByteArrayInputStream;
import java.util.UUID;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
import org.arquillian.cube.docker.impl.client.containerobject.dsl.Container;
import org.arquillian.cube.docker.impl.client.containerobject.dsl.DockerContainer;
import org.jboss.arquillian.junit.Arquillian;
import org.junit.Test;
import org.junit.runner.RunWith;import static org.assertj.core.api.Assertions.assertThat;@RunWith(Arquillian.class)
public class S3Test {@DockerContainerContainer localStack = Container.withContainerName("localstack").fromImage("atlassianlabs/localstack:0.5.3.1").withPortBinding(IntStream.rangeClosed(4567, 4578).boxed().collect(Collectors.toList()).toArray(new Integer[0])).withPortBinding(8080).build();@Testpublic void should_create_bucket_and_add_content() {final AmazonS3Client amazonS3Client = new AmazonS3Client();amazonS3Client.setEndpoint("http://" + localStack.getIpAddress() + ":4572/");String bucketName = "my-first-s3-bucket-" + UUID.randomUUID();String key = "MyObjectKey";amazonS3Client.createBucket(bucketName);assertThat(amazonS3Client.listBuckets()).hasSize(1);amazonS3Client.putObject(bucketName, key, "abcdef");final S3Object object = amazonS3Client.getObject(bucketName, key);assertThat(object.getObjectContent()).hasSameContentAs(new ByteArrayInputStream("abcdef".getBytes()));}}

要考虑的重要事项:

  1. 您用Arquillian赛跑者注释测试。
  2. 使用@DockerContainer批注将属性用于定义容器。
  3. 容器对象DSL只是允许您配置要使用的容器的DSL。 在这种情况下, 本地堆栈容器具有所需的端口绑定信息。
  4. 该测试仅连接到Amazon S3并创建一个存储桶并存储一些内容。

没有其他要求。 当您运行此测试时, Arquillian Cube将连接到已安装的Docker(Machine)主机并启动localstack容器。 当它启动并运行并且服务能够接收请求时,将执行测试。 之后,该容器停止并销毁。

提示1 :如果不能使用Arquillian Runner,也可以使用JUnit类规则来定义容器,如下所述: http : //arquillian.org/arquillian-cube/#_junit_rule

提示2:如果您打算在整个组织中使用localstack ,建议您使用Container Object方法而不是DSL,因为这样您就可以将localstack Container Object打包到jar文件中,并导入所有需要使用它的项目。 您可以在http://arquillian.org/arquillian-cube/#_arquillian_cube_and_container_object中阅读

因此,现在您只需使用本地环境即可为在AWS云上运行的应用程序编写测试,而无需连接到远程主机。

我们不断学习,

亚历克斯

翻译自: https://www.javacodegeeks.com/2017/06/test-aws-cloud-stack-offline-arquillian-localstack.html

aws 堆栈模板

aws 堆栈模板_使用Arquillian和LocalStack脱机测试AWS云堆栈相关推荐

  1. 使用Arquillian和LocalStack脱机测试AWS云堆栈

    在AWS云堆栈 (例如DynamoDB,S3等)上构建应用程序时,需要针对这些组件编写测试. 您可能首先想到的是拥有一个用于生产的环境和一个用于测试的环境,然后针对该环境运行测试. 这对于集成测试,部 ...

  2. node aws 内存溢出_如何使用Node.js和AWS快速创建无服务器RESTful API

    node aws 内存溢出 by Mark Hopson 马克·霍普森(Mark Hopson) 如何使用Node.js和AWS快速创建无服务器RESTful API (How to quickly ...

  3. aws root账户_所以您继承了一个AWS账户

    aws root账户 Many engineers have found themselves in the unenviable position of being handed the keys ...

  4. 系统在此应用程序堆栈溢出_从部署我的第一个完整堆栈Web应用程序中学到的经验教训...

    系统在此应用程序堆栈溢出 by Will Abramson 威尔·艾布拉姆森(Will Abramson) 从部署我的第一个完整堆栈Web应用程序中学到的经验教训 (Lessons learned f ...

  5. aws生态系统集成商_通过通用数据访问扩展AWS生态系统

    aws生态系统集成商 Amazon Web Services(AWS)可帮助组织托管和管理其数据流程,例如构建数据可视化和执行ETL任务. 在CData,我们可以轻松地将AWS Services与异构 ...

  6. java pattern堆栈溢出_我的正则表达式导致Java中的堆栈溢出;我错过了什么?

    我试图使用Scanner的正则表达式来匹配文件中的字符串.正则表达式适用于该行以外的所有内容: DNA="ITTTAITATIATYAAAYIYI[....]ITYTYITTIYAIAIYI ...

  7. java递归堆栈溢出_【java】递归次数过多导致堆栈溢出

    在写一个算法中,由于递归调用次数过多,堆栈溢出. 堆栈的大小是系统控制的,无法改变. 如果递归调用出现问题,可以考虑采取循环的方式来解决,将需要的数据在关键的调用点保存下来使用.简单的说,就是用自己的 ...

  8. jquery 堆栈溢出_带有jQuery和CSS3的漂亮照片堆栈库

    jquery 堆栈溢出 View demo 查看演示Download Source 下载源 In this tutorial we are going to create a nice and fre ...

  9. 云堆栈三大服务模式解析

    如果准备使用云计算或者要在自己的IT环境中部署云计算,首先要确定合适的服务模式.这就需要我们对每种服务模式含义和特点都有所了解,很清楚从中能够获得哪些有益东西.正所谓"知己知彼百战不殆&qu ...

最新文章

  1. @芥末的糖----------《管理系统后台架构逻辑》
  2. PCL从0到1|点云滤波之直通滤波与体素法滤波
  3. LI中内容超过长度后以省略号显示的方法
  4. MFC命令行及CCommandLineInfo类
  5. ExtJs Grid 合计 [Ext | GridPanel | GridSummary]
  6. iPhone6s用户感动!升级ios13还能再战两年
  7. 抖音电商带货,卖给粉丝还是卖给有需要的人?
  8. 2020年,把i3 4170升级成e3 1231 v3有必要吗,顺便我想把750Ti换成1650s?
  9. Linux命令之---cat
  10. 仿微信 即时聊天工具 - SignalR (一)
  11. 《web课程设计》期末网页制作 基于HTML+CSS+JavaScript制作公司官网页面精美
  12. JavaScript文档说明
  13. 基于FPGA的视频处理
  14. TCP快速恢复算法PRR
  15. 正则表达式匹配书名号内容
  16. python单元测试mock_Python单元测试mock,获取mocked函数的输入参数
  17. 2023年湖北黄石初级工程师职称在哪里报名?评审条件是什么启程别
  18. 回望,勉强及格的大学四年答卷
  19. jQuery——B站黑马程序员
  20. C语言-MSB/LSB大小端序

热门文章

  1. 数论:扩展欧几里德(洛谷P1516 青蛙的约会)
  2. P7244-章节划分【RMQ,贪心,递归】
  3. jzoj1503-体育场【带权并查集】
  4. 【数论】【杜教筛】选数(P3172)
  5. 【01背包】最大约数和(jzoj 2126)
  6. Codeforces Round #485 (Div. 2)
  7. MySQL - InnoDB特性 - Buffer Pool漫谈
  8. Maven精选系列--classifier元素妙用
  9. Hibernate基本概念
  10. JavaScript实现复选框全选与全不选的效果