7

В настоящее время я работаю над серией веб-сервисов, которые нам нужно интегрировать с Kinesis - реализация выполнена, однако у нас есть серия интеграционных тестов (наши веб-службы используют все Spring Boot, поэтому мы используем аннотацию @WebIntegrationTest на наших тестовых классах, чтобы запустить локальный экземпляр сервера, а затем вызвать наши ресурсы с помощью TestRestTemplate), которые в настоящее время пытаются и не могут подключиться к реальному Kinesis.Amazon Kinesis + Интеграционные тесты

Несмотря на то, что в обычных модульных тестах не является проблемой для извлечения вызовов методам в библиотеке Kinesis, мы не можем этого сделать в тестах интеграции, поскольку весь стек приложения подключен к Spring. Для некоторых других вещей (таких как OAuth2 и звонков в наши другие веб-сервисы) мы смогли использовать WireMock для издевательства над фактическими конечными точками - мне бы очень хотелось использовать WireMock таким образом, чтобы издеваться вызов AmazonKinesisClient, но я не могу найти никаких советов о том, как это сделать.

В качестве альтернативы я видел, что некоторые компоненты AWS имеют библиотеки тестов, написанные третьими сторонами, которые позволяют вам запускать локальную версию (например, DynamoDbLocal), но не могут найти такое решение для Kinesis.

Может ли кто-нибудь дать мне несколько советов о том, как проводить интеграционные тесты с Kinesis?

+0

Я не знаком с WebIntegrationTests, но вы могли бы: создать непроизвольный тестовый поток с одним осколком перед вашими испытаниями, запустить тест и закрыть его после? Или создать тонкую обертку вокруг aws api на ваши вызовы put/get, которые могли бы перетаскивать объекты через очередь? –

+0

Я также столкнулся с этой «проблемой». Еще один вариант использования, который мне нужен, заключается в том, что каждый разработчик должен иметь возможность запускать тесты интеграции из локальной среды. Я не хочу создавать потоки для каждого разработчика. – Mantas

+0

2017 и по-прежнему не видят никаких инструментов вокруг. – prayagupd

ответ

1

Я столкнулся с той же проблемой, и только издеваться реализации я нашел до сих пор был nodejs один: https://github.com/mhart/kinesalite Это делает трюк - мне удалось запустить мой Java Kinesis клиент против него, просто нужно было установить конечную точку kinesis.properties:

kinesisEndpoint=http://localhost:4567 

недостатком является то, что она не является тривиальным, чтобы использовать его во время тестов во время сборки - нужно найти способ, чтобы начать макет Kinesis перед тестом (с использованием Maven плагин или что-то), Ждут Не добирайтесь до этого.

3

Возможно, уже слишком поздно, чтобы дать решение, но я добавлю, что в моей команде было сделано для репликации ресурсов AWS на местном уровне, поскольку мы используем много Kinesis, DynamoDb, S3 и cloudWatch.

Мы создали обертки вокруг Localstack ->https://github.com/localstack/localstack, которые позволяют нам разворачивать локальные экземпляры необходимых сервисов в виде докеров, используя docker-compose.

docker-compose.yml Типичный файл для нас выглядит как:

version: '2' 
services: 
    localstack: 
    image: "localstack/localstack" 
    environment: 
     - SERVICES=kinesis,dynamodb,cloudwatch 
    ports: 
     - "4568" 
     - "4569" 
     - "4582" 

Затем в течение фазы для интеграции-тестов установки, наши оболочки разжигает docker-compose up и запускает тесты против местной инфраструктуры. Позже во время срывания обертка уничтожает контейнеры.

Смежные вопросы