如何在集成测试中模拟 Amazon S3

新手上路,请多包涵

我正在尝试建立我的应用程序的“行走骨架”,它将使用 S3 来实现持久性。我想使用一个假的 S3 服务,这样每个开发人员的桌面都可以随意读/写。

我认为 mocks3 是完美的,因为我可以在我的 jUnit 测试中启动一个码头服务器。问题是 mocks3 不允许任何 _写入_。据我所知,甚至没有设置它。

那么其他人是如何做到这一点的呢?

原文由 Michael Deardeuff 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 832
2 个回答

还有一个专门为此目的而编写的 Findify s3mock 工具。它在本地文件系统之上模拟 AWS S3 API 的基本部分:

 import io.findify.s3mock.S3Mock

S3Mock api = S3Mock.create(8001, "/tmp/s3");
api.start();

AmazonS3Client client = new AmazonS3Client(new AnonymousAWSCredentials());
// use local API mock, not the AWS one
client.setEndpoint("http://127.0.0.1:8001");
client.createBucket("testbucket");
client.putObject("testbucket", "file/name", "contents");

它还易于嵌入且无需配置。

原文由 shutty 发布,翻译遵循 CC BY-SA 4.0 许可协议

如果您可以依赖正在运行的 docker 容器,并且想要得到很好的支持,您可以考虑使用 localstack

在运行测试之前,像这样启动 S3:

 docker run --name localstack -d -p 5000:5000 -e SERVICES=s3:5000 localstack/localstack

然后在测试完成时停止它,如下所示:

 docker stop localstack

您需要将 S3 客户端配置为指向 localhost:5000 以进行测试。在 Java 中,可以这样做:

         AmazonS3ClientBuilder.standard()
            .withEndpointConfiguration(new AwsClientBuilder.EndpointConfiguration(
                 "http://localhost:5000",
                 "us-west-2"))
            .build();

原文由 Stimp 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题