使用Arquillian和LocalStack脱机测试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
- Firehose位于http:// localhost:4573
- Lambda位于http:// localhost:4574
- SNS位于http:// localhost:4575
- SQS位于http:// localhost:4576
- http:// localhost:4577上的Redshift
- 位于http:// localhost:4578的ES(Elasticsearch Service)
- SES位于http:// localhost:4579
- 位于http:// localhost:4580的Route53
- http:// localhost:4581上的CloudFormation
- 位于http:// localhost:4582的CloudWatch
因此,下一个问题是如何使启动容器,运行测试以及最终停止所有操作并使它可移植的所有过程自动化,因此您无需担心在Linux或MacOS中使用Docker的情况? 答案是使用Arquillian Cube 。
Arquillian Cube是Arquillian扩展,可用于在测试中管理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()));}}
要考虑的重要事项:
- 您用Arquillian赛跑者注释测试。
- 使用@DockerContainer批注将属性用于定义容器。
- 容器对象DSL只是允许您配置要使用的容器的DSL。 在这种情况下, 本地堆栈容器具有所需的端口绑定信息。
- 该测试仅连接到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
使用Arquillian和LocalStack脱机测试AWS云堆栈相关推荐
- aws 堆栈模板_使用Arquillian和LocalStack脱机测试AWS云堆栈
aws 堆栈模板 在AWS云堆栈 (例如DynamoDB,S3等)上构建应用程序时,需要针对这些组件编写测试. 您可能首先想到的是拥有一个用于生产的环境和另一个用于测试的环境,然后针对该环境运行测试. ...
- aws云服务模拟应用localstack
地址:https://github.com/localstack/localstack 1.简介 LocalStack为开发云应用程序提供了易于使用的测试/模拟框架. 当前,重点主要放在支持AWS云堆 ...
- 云堆栈三大服务模式解析
如果准备使用云计算或者要在自己的IT环境中部署云计算,首先要确定合适的服务模式.这就需要我们对每种服务模式含义和特点都有所了解,很清楚从中能够获得哪些有益东西.正所谓"知己知彼百战不殆&qu ...
- AWS云平台的服务概览
当我们向别人解释AWS云平台所包含的那些服务的时候,许多人对AWS服务种类的丰富程度都表示惊讶.对于部分听说过AWS的人来说,他们知道AWS云平台的功能主要限于EC2(弹性计算云).S3(简单存储服务 ...
- 亚马逊AWS在线系列讲座——基于AWS云平台的高可用应用设计
设计高可用的应用是架构师的一个重要目标,可是基于云计算平台设计高可用应用与基于传统平台的设计有很多不同.云计算在给架构师带来了很多新的设计挑战的时候,也给带来了很多新的设计理念和可用的服务.怎样在设计 ...
- 解密亚马逊Ironman计划:背靠AWS云服务发力AI,对抗谷歌微软
陈桦 编译自 The Information 量子位 出品 | 公众号 QbitAI 据外媒报道,亚马逊AWS正在大力推动人工智能产品的升级,包括自主开发技术以及与多家AI创业公司合作.AWS希望补足 ...
- AWS云迁移工具方法汇总
AWS云迁移工具方法汇总 一.数据库迁移 工具:AWS SCT+DMS 1. AWS SCT工具介绍 可以使用 AWS Schema Conversion Tool (AWS SCT) 将现有的数据库 ...
- AWS云上部署Hadoop
目录 一.实验目的 二.实验操作 1.创建EC2实例编辑 2.使用putty连接实例编辑 3.新增 Hadoop 用户.安装 Java 环境(master.slave01.slave02都需进行相 ...
- 【AWS云从业者基础知识笔记】——模块11:AWS认证的云从业者基础
01介绍 学习目标 Determine resources for preparing for the AWS Certified Cloud Practitioner exam. Describe ...
最新文章
- vue 实现动态增加输入框_vue实现一个6个输入框的验证码输入组件
- Eureka控制台下unavailable-replicas怎么解决?
- 蚂蚁集团董事调整:黄益平等五人新增,彭蕾等三人退出
- 相机成像原理_数码相机的工作原理
- C++ 数据指针(-)
- 计算机基础知识上机操作excer,《计算机应用基础》Excel上机操作练习题.doc
- 计算机活动感悟怎么写,计算机教学心得体会范文五篇.doc
- ROS学习笔记10(创建一个ROS消息和服务)
- windows应用迁移到linux下
- 引言(NParsing框架功能简介、NParsing的由来)
- SRT (SubRip)字幕
- 上完选修计算机绘图课心得,计算机绘图学习心得体会.doc
- 现代程序设计 homework-06
- Response响应详解
- 【推荐算法 学习与复现】-- 深度学习系列 -- NFM
- jfinal+poi导出excel
- axTOCControl.HitTest方法
- python对红楼梦的每一章节进行词频统计
- 泰雷兹推出未来飞机的大脑PureFlyt
- 网络系统建设与运维【笔记】