【问题标题】:AWS S3 local server for integration testing用于集成测试的 AWS S3 本地服务器
【发布时间】:2020-12-22 21:43:02
【问题描述】:

我有一些使用 AWS S3(使用 Java AWS 开发工具包)上传和下载文件的代码。我希望能够为它编写一些测试,我想知道是否有人有任何好的选择。理想情况下,我想要一个本地运行的轻量级 S3 服务器,可以快速启动并且不需要系统配置(测试需要由 Jenkins 运行)。

到目前为止我看过的一些选项:

  1. FakeS3 - 几乎正是我正在寻找的东西,但是,在使用 Java AWS SDK 时,您必须编辑您的 /etc/hosts 文件并重新启动网络,这在 Jenkins 中是无法做到的。此外,在尝试时,似乎存在创建日期字段格式错误的错误,这使我的客户抛出异常,这并没有激发我对项目的信心。
  2. Ceph - 实现 S3 API,但需要几分钟才能安装

【问题讨论】:

  • 还有Swift3,但是设置起来会更加复杂。也许在 jenkins 之外设置服务器,而不是在测试套件中设置?
  • 是的,这是另一种选择,没想到。不过,拥有完全独立的测试要好得多,您不希望为了运行测试而必须通过 VPN 连接到设置了 S3 服务器的网络。
  • 为此,我相信在 jenkins 机器中设置 hosts 文件并在 FakeS3 上运行,或者只是模拟 S3 客户端界面,可能是一个更好的解决方案...
  • 这是一个相当大的模拟接口,如果可能的话,我宁愿避免使用模拟,因为你最终会将测试与实现联系起来。
  • 可能是 s3ninja.net ?

标签: java amazon-web-services jenkins amazon-s3


【解决方案1】:

您可以尝试localstack,这是一个为测试而制作的开源本地 AWS 云堆栈。它提供多种 AWS 服务的实施,包括 S3。

它看起来像是 GitHub 上非常流行的开源项目。

【讨论】:

  • 您知道您是否可以通过 SFTP 客户端连接到从 localstack 运行的本地 S3?我在文档中找不到任何内容。也许是不可能的。
【解决方案2】:

您可以尝试在您的笔记本电脑/系统上安装minio 服务器,它的开源和单一静态二进制文件。服务器与 S3 兼容。然后你可以尝试minio-java client library进行所有操作,以下是基本的operations example。

安装 minio 服务器 [GNU/Linux]

$ wget https://dl.minio.io/server/minio/release/linux-amd64/minio
$ chmod 755 minio
$ ./minio --help  

希望对你有帮助 免责声明:我为Minio工作

【讨论】:

  • 不幸的是Minio不支持标签
【解决方案3】:

迟到的答案,主要对 Docker 用户有用。有一个很棒的 S3 兼容存储软件,叫做Riak CS,还有一个docker-riak-cs 镜像可以快速启动服务器。

我已经使用它进行本地开发和集成测试将近 2 年了,并取得了巨大的成功。它有一些限制,但没有什么大问题,请参阅 api / 兼容性documentation。

如果您需要 Docker-less 解决方案,您可以为每个构建在本地进行设置,所有设置和配置脚本都在 docker-riak-cs 存储库中提供。

【讨论】:

  • 你能告诉我如何连接到riak-cs本地服务器来代替s3
  • 我希望我现有的代码库能够针对 riak-cs 代替 s3 运行
  • 我查看了 docker-riak-cs,但看起来我无法使用密钥自动配置它以进行无监督集成测试。你是怎么做到的?
  • 出于安全原因,Riak CS 不允许指定自定义凭据。 Docker 映像为您已经拥有数据并想要挂载它的情况提供此功能,这在 configuration 中有所提及。容器启动后,您可以从日志中获取凭据,在 test.sh 中查看它是如何完成的。
  • repo seems to be no longer maintained 和启动时间非常糟糕(在体面的硬件上是 90 秒以上!)。
【解决方案4】:

我为 Ladon 启动了一个 S3 服务器 API 项目,它包含一个简单的文件系统存储库。它是一个 Java 项目,包含一个用于简单测试的 Spring Boot Starter。尚不支持所有 S3 API 功能,但我会根据要求添加它们。在 Github 上:Ladon S3 Server

【讨论】:

    【解决方案5】:

    findify/s3mock - 用于测试的进程内 Java S3 服务器。没有测试它 - 只是偶然发现它。不需要码头工人,这可能是一个优势。 ! :)

    【讨论】:

    • 很好的提示,这对我很有用。类似于在测试中使用wiremock,如果你熟悉的话。
    【解决方案6】:

    Minio 提供(在我看来)最好的功能集、灵活性和易用性。 它可以作为主要操作系统的 docker 容器或二进制文件使用。

    从minio开始,很简单:

    • 下载
    • 启动二进制minio server /data
    • 使用它

    它与 s3cmd 完美配合,并且为流行的编程语言提供了很好的文档。

    【讨论】:

      【解决方案7】:

      我创建了不同的存储桶以用于不同的用例。例如:my-dev-bucket 和 my-prod-bucket。我不知道这是否符合您的使用标准,但您可能想考虑一下。附带的好处是它使您的预生产和生产代码遵循完全相同的流程。

      【讨论】:

      • 这根本不能回答问题。 OP 正在寻求一个本地解决方案,这样他就不必在运行集成测试时花费 $$$......
      猜你喜欢
      • 1970-01-01
      • 2014-05-14
      • 1970-01-01
      • 2017-10-07
      • 1970-01-01
      • 2016-01-16
      • 1970-01-01
      • 1970-01-01
      • 2019-06-20
      相关资源
      最近更新 更多