Amazon Kinesis - + - Integration-Tests
Derzeit arbeite ich an einer Serie von web-services, die wir integrieren müssen, mit Kinesis - die Umsetzung getan worden, aber wir haben eine Reihe von Integrations-tests (unsere web-services sind alle mit Spring Boot, so verwenden wir die @WebIntegrationTest
annotation auf unserem test-Klassen zu beginnen, eine lokale Instanz des Servers und rufen Sie dann unsere Ressourcen mit einem TestRestTemplate
), die derzeit versuchen, und nicht, um eine Verbindung zu der realen Kinesis.
Obwohl in der ganz normalen unit-tests ist es kein problem, zu verspotten heraus Aufrufe der Methoden innerhalb der Kinesis-Bibliothek, können wir Sie nicht wirklich dazu in der integration tests, die das gesamte application stack ist verdrahtet mit Feder. Für ein paar andere Dinge (wie OAuth2 und Anrufe auf unsere anderen web-services) haben wir in der Lage gewesen, WireMock zu verspotten, die die tatsächlichen Endpunkte - also das, was ich wirklich gerne tun, ist mit WireMock in dieser Weise zu verhöhnen, als Sie den Aufruf der AmazonKinesisClient
aber ich kann nicht finden, alle Ratschläge, wie dies zu tun.
Alternativ habe ich gesehen, dass einige AWS-Komponenten haben den test-Bibliotheken von Drittanbietern geschrieben, die ermöglichen es Ihnen, eine lokale version davon (z.B.: DynamoDbLocal), aber nicht finden können, eine Lösung für Kinesis.
Ist jemand in der Lage, geben Sie mir einige Ratschläge, wie Sie führen Integrations-tests mit Kinesis?
- Ich bin nicht vertraut mit WebIntegrationTests, aber, könnten Sie: Erstellen Sie eine non-Produktion-test-stream mit einer einzigen Scherbe, bevor Sie Ihre tests starten Sie den test, und schließen Sie es nach? Oder erstellen Sie einen dünnen wrapper um die aws-api auf Ihre put - /get-Aufrufe, die könnte Trichter Objekte über eine Warteschlange?
- Ich lief auch in diesem "problem". Ein mehr Fall, dass ich brauche, ist, dass jeder Entwickler sollte in der Lage sein zu führen Integrations-tests von der lokalen Umgebung. Ich will nicht um streams zu erstellen, die für jeden dev.
- 2017 und immer noch nicht sehen, keine tools um.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich lief in das gleiche Problem und das nur mock-Implementierung, die ich bisher gefunden wurde ein nodejs ein: https://github.com/mhart/kinesalite
Es funktioniert der trick - ich habe es geschafft mein Java Kinesis client gegen Sie, nur musste Sie den Endpunkt auf der kinesis.Eigenschaften:
Den Nachteil, dass es nicht trivial ist, Sie während des build-tests - müssen einen Weg finden, um zu starten der mock kinesis vor dem test (mit einem maven-plugin oder so), nicht um es noch zu bekommen..
Könnte es schon zu spät, um die Lösung, sondern ich will hinzufügen, was mein team geleistet hat, zu replizieren, die AWS-Ressourcen, die lokal verwenden wir eine Menge von Kinesis, DynamoDb, S3 und cloudWatch.
Haben wir erstellt Wrapper Localstack -> https://github.com/localstack/localstack, die uns erlauben, sich zu drehen, bis die lokalen Instanzen der erforderlichen Dienstleistungen als docker-Containern mit
docker-compose
.Einem typischen
docker-compose.yml
- Datei für uns aussieht:Dann während der setup-phase für die integration-tests, unsere wrapper feuert bis
docker-compose up
und führt die tests gegen die lokale Infrastruktur.Später, während tear-down-wrapper tötet die Container.
Nur eine kleine Ergänzung zu den bestehenden Antworten. BTW, Sie sind groß, Sie sollten wirklich mit tools wie localstack zu beginnen fake AWS-services vor dem test während der test-phase.
Wenn Sie mit JUnit 5 in Ihre versuche, Ihr Leben noch einfacher mit JUnit-5-Erweiterungen für AWS, ein paar JUnit-5-Erweiterungen, die nützlich sein könnten für die Prüfung AWS-bezogenen code. Diese Erweiterungen können verwendet werden, um zu injizieren, Kunden für den AWS-service-mocks zur Verfügung gestellt von tools wie localstack. Beide AWS Java SDK v-2.x-und v-1.x werden unterstützt:
Hier client wird nur eingespritzt, in der test-Klasse und entsprechend konfiguriert, um die
Endpoint
configuration-Klasse.