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

4zcjmb1e  于 2022-11-11  发布在  其他
关注(0)|答案(8)|浏览(253)

我正在尝试建立一个应用程序的“行走 backbone ”,它将使用S3来实现持久性。我希望使用一个假的S3服务,这样每个开发人员的桌面都可以随意读写。
我认为mocks3是完美的,因为我可以在jUnit测试中安装一个jetty服务器。问题是mocks3不允许任何 * write *。就我所知,甚至不允许设置它。
那么其他人是如何做到这一点的呢?

ktca8awb

ktca8awb1#

还有一个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");

它还可以轻松嵌入,无需配置。

vlf7wbxs

vlf7wbxs2#

如果您不介意依赖于正在运行的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();
rkkpypqq

rkkpypqq3#

另一个选项是S3 ninja-模拟S3 API以用于开发和测试。

ddarikpa

ddarikpa4#

看一下Adobe's S3Mock,这个S3 Mock服务器可以通过Docker容器或JUnit 4/5规则启动。

e0bqpujr

e0bqpujr5#

Tornado是一个python web框架,它有一个示例应用程序,正是你所需要的。
https://github.com/facebook/tornado/blob/master/demos/s3server/s3server.py
它可以开箱即用。

tktrz96b

tktrz96b6#

你可以使用scality s3server,它可以在你的机器上运行,使用node.js或者通过docker,它给你一个本地的S3服务示例。

hgtggwj0

hgtggwj07#

LocalS3是一个不错的选择。

  • 它是基于Netty的,没有太多的其他依赖项。启动LocalS3服务或Docker container非常快。
  • 支持常用的AmazonS3 API。包括版本化对象、多部分上传等。
  • 支持内存和持久模式。
pvcm50d1

pvcm50d18#

一种选择是放弃Jetty服务器,使用Apache VFSS3 plugin,这样,您就可以使用基于内存或文件的存储实现进行集成测试。

相关问题