web-dev-qa-db-ja.com

統合テストでAmazon S3をモックする方法

私は、永続化にS3を使用するアプリの「ウォーキングスケルトン」を取得しようとしています。各開発者のデスクトップが自由に読み書きできるように、偽のS3サービスを使用したいと思います。

私はjUnitテストで突堤サーバーを起動できるので、 mocks は完璧だと思いました。問題は、mocks3がwritesを許可しないことです。私の知る限りでは設定しません。

では、他の人はこれをどのように行うのでしょうか?

21

python WebフレームワークであるTornadoには、あなたが探しているだけのサンプルアプリがあります。

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

そのまま使用できます。

5
mikelikespie

この目的のために正確に記述された 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");

また、簡単に埋め込むことができ、構成も不要です。

17
shutty

別のオプションは S3忍者 -開発とテストの目的でS3 APIをエミュレートします。

9
Jay P.

実行中のDockerコンテナーに依存することに問題がなく、サポートを強化したい場合は、 localstack の使用を検討できます。

テストを実行する前に、次のようにS3を起動します。

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

テストが次のように完了したら停止します。

docker stop localstack

テスト用にlocalhost:5000を指すようにS3クライアントを構成する必要があります。 Javaでは、これは次のように行うことができます。

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

AdobeのS3Mock をご覧ください。このS3モックサーバーは、DockerコンテナーまたはJUnit 4/5ルールを介して起動できます。

3
Jake Ham

Scality s3serverを使用して、node.jsまたはdockerを介してマシンで実行でき、ローカルS3サービスインスタンスを提供します。 BSDライセンスの下でのオープンソース github.com/scality/s

0
Rackam36