2015-06-11 27 views
7

Attualmente sto lavorando a una serie di servizi Web che dobbiamo integrare con Kinesis - l'implementazione è stata eseguita, tuttavia abbiamo una serie di test di integrazione (i nostri servizi Web utilizzano tutti Spring Boot in modo che usiamo l'annotazione @WebIntegrationTest sulle nostre classi di test per avviare un'istanza locale del server e quindi chiamare le nostre risorse con un TestRestTemplate) che stanno attualmente cercando e non riuscendo a connettersi al Kinesis reale.Amazon Kinesis + Test di integrazione

Anche se nei test unitari ordinari non è un problema prendere in giro le chiamate ai metodi all'interno della libreria Kinesis, non possiamo farlo nei test di integrazione poiché l'intero stack dell'applicazione è cablato con Spring. Per alcune altre cose (come OAuth2 e le chiamate agli altri nostri servizi web) siamo stati in grado di usare WireMock per deridere gli endpoint reali - quello che mi piacerebbe davvero è usare WireMock in questo modo per deridere la chiamata a AmazonKinesisClient ma non riesco a trovare alcun consiglio su come farlo.

In alternativa ho visto che alcuni componenti AWS hanno librerie di test scritte da terze parti che consentono di eseguire una versione locale di esso (ad es. DynamoDbLocal) ma non riescono a trovare una soluzione di questo tipo per Kinesis.

Qualcuno è in grado di darmi qualche consiglio su come eseguire i test di integrazione con Kinesis?

+0

Non ho familiarità con WebIntegrationTests, ma potresti: Creare un flusso di prova non di produzione con un singolo frammento prima dei test, eseguire il test e chiuderlo dopo? Oppure creare un involucro sottile attorno all'aws api sulle tue chiamate put/get che potrebbero incanalare gli oggetti attraverso una coda? –

+0

Ho anche incontrato questo "problema". Un altro caso di utilizzo di cui ho bisogno è che ogni sviluppatore dovrebbe essere in grado di eseguire test di integrazione dall'ambiente locale. Non voglio creare flussi per ogni dev. – Mantas

+0

2017 e ancora non si vedono strumenti in giro. – prayagupd

risposta

1

Ho incontrato lo stesso problema e l'unica implementazione mock ho trovato finora è stato un nodejs uno: https://github.com/mhart/kinesalite Si fa il trucco - sono riuscito a eseguire il mio client Java Kinesis contro di essa, appena avuto per impostare il punto finale sulla kinesis.properties:

kinesisEndpoint=http://localhost:4567 

il lato negativo è che non è banale per utilizzarlo durante i test tempo di costruzione - necessità di capire un modo per iniziare la kinesis finta prima della prova (utilizzando un plugin Maven o qualcosa del genere), didn non è ancora arrivato ..

3

Potrebbe essere già troppo tardi per dare la soluzione, ma aggiungerò il mio team ha fatto replicare le risorse AWS localmente mentre usiamo un sacco di Kinesis, DynamoDb, S3 e cloudWatch.

Abbiamo creato wrapper attorno a Localstack ->https://github.com/localstack/localstack che ci consentono di far ruotare le istanze locali dei servizi necessari come contenitori di posta utilizzando docker-compose.

Un tipico file di docker-compose.yml per noi si presenta come:

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

Poi, durante la fase di messa a punto per l'integrazione-test, i nostri fuochi involucro fino docker-compose up ed esegue il test contro le infrastrutture locali. Più tardi durante lo smontaggio, l'involucro uccide i contenitori.