如何在集成测试中模拟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插件 。 有了它,您可以使用内存或基于文件的存储实现进行集成测试。
- 解压缩HTTPInputStream时GZIPInputStream过早关闭
- com.amazonaws.services.s3.model.AmazonS3Exception:Forbidden(Service:Amazon S3; Status Code:403; Error Code:403 Forbidden; Request ID:XXXXXXXX)
- 使用Java进行AWS S3文件搜索
- 将BufferedImage对象作为文件保存到Amazon S3
- 使用Java API的S3 / AWS的SSL问题:“证书中的主机名不匹配”
- 如何计算S3文件内容的SHA-256校验和
- AmazonClientException:数据读取的长度与预期的不同
- S3:如果由其他用户创建,则用户无法访问自己的s3存储桶中的对象
- 在Amazon S3中使用KMS密钥解密文件时出错