Как издеваться над Amazon S3 в интеграционном тесте - PullRequest
16 голосов
/ 07 июля 2011

Я пытаюсь получить "ходячий скелет" моего приложения, который будет использовать S3 для сохранения устойчивости. Я хотел бы использовать поддельный сервис S3, чтобы каждый рабочий стол разработчика мог читать / писать по желанию.

Я подумал, что mocks3 было бы идеально, так как я мог подключить джет-сервер в моих тестах jUnit. Проблема в том, что mocks3 не позволяет писать . Даже не для того, чтобы настроить это, насколько я могу судить.

Так как же это делают другие?

Ответы [ 7 ]

16 голосов
/ 12 августа 2016

Существует также инструмент s3mock , написанный специально для этой цели.Он высмеивает основные части API AWS S3 поверх локальной файловой системы:

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

Он также легко встраивается и не требует настройки.

8 голосов
/ 15 декабря 2013

Другой вариант - S3 ninja - эмулирует S3 API для целей разработки и тестирования.

5 голосов
/ 17 января 2012

Tornado, веб-фреймворк Python, имеет пример приложения, которое именно то, что вы ищете

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

Может использоваться из коробки.

3 голосов
/ 15 ноября 2018

Если вы согласны с зависимостью от работающего док-контейнера и хотите что-то хорошо поддерживаемое, вы можете использовать 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();
3 голосов
/ 28 августа 2018

Посмотрите на Adobe S3Mock .Этот S3 Mock-сервер можно запустить с помощью контейнера Docker или правил JUnit 4/5.

0 голосов
/ 08 февраля 2017

Вы можете использовать scality s3server, он может работать на вашем компьютере либо с помощью node.js, либо через docker, и он предоставляет вам локальный экземпляр службы S3.Это открытый исходный код под лицензией BSD github.com / scality / s3

0 голосов
/ 08 июля 2011

Один из вариантов - удалить сервер Jetty и использовать Apache VFS и плагин S3 .При этом вы можете использовать реализации памяти или файлового хранилища для тестирования интеграции.

...