日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2023/12/3 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用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云堆栈的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。