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

我正试图让我的应用程序的“行走骨架”将使用S3进行持久化。 我想使用假的S3服务,这样每个开发人员的桌面都可以随意读/写。

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

那么别人怎么做呢?

Tornado是一个python web框架,有一个示例应用程序,正是您正在寻找的。

https://github.com/facebook/tornado/blob/master/demos/s3server/s3server.py

它可以开箱即用。

还有一个完全为此目的编写的s3mock工具。 它在本地文件系统之上嘲笑AWS S3 API的基本部分:

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"); 

它也易于嵌入和无配置。

另一个选择是S3忍者 – 模拟S3 API用于开发和测试目的。

看看Adobe的S3Mock 。 可以通过Docker容器或JUnit 4/5规则启动此S3 Mock服务器。

您可以使用scality s3server,可以使用node.js或docker在您的计算机上运行,​​它可以为您提供本地S3服务实例。 它是BSD许可证下的开源github.com/scality/s3

一种选择是废弃jetty服务器并使用Apache VFS和S3插件 。 有了它,您可以使用内存或基于文件的存储实现进行集成测试。