亚马逊Kinesis +集成测试
我目前正在研究一系列需要与Kinesis集成的Web服务 - 实现已经完成,但是我们有一系列的集成测试(我们的Web服务都使用Spring Boot,因此我们使用@WebIntegrationTest我们的测试类的注释来启动一个服务器的本地实例,然后用TestRestTemplate调用我们的资源),它们正在尝试并且无法连接到真正的Kinesis。
虽然在普通的单元测试中,嘲笑调用Kinesis库中的方法并不是一个问题,但是我们无法在集成测试中真正做到这一点,因为整个应用程序堆栈与Spring连接在一起。 对于其他一些事情(例如OAuth2和对其他Web服务的调用),我们可以使用WireMock来模拟出实际的端点 - 我真正想要做的就是以这种方式使用WireMock来模拟对AmazonKinesisClient的调用,但我找不到有关如何执行此操作的任何建议。
或者,我看到有些AWS组件具有由第三方编写的测试库,这些库允许您运行本地版本(例如:DynamoDbLocal),但无法为Kinesis找到此类解决方案。
任何人都可以给我一些关于如何使用Kinesis运行集成测试的建议吗?
我遇到了同样的问题,目前我发现的唯一一个模拟实现是nodejs:https://github.com/mhart/kinesalite它有个窍门 - 我设法运行我的Java Kinesis客户端,只需要在kinesis.properties上设置端点:
kinesisEndpoint=http://localhost:4567
缺点是在编译时测试中使用它不是微不足道的 - 需要设法在测试之前开始模拟kinesis(使用maven插件或其他),但还没有完成。
提供解决方案可能已经太迟了,但我将添加我的团队在本地复制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
并针对本地基础架构运行测试。 在拆卸后期,包装物会杀死容器。
上一篇: Amazon Kinesis + Integration Tests
下一篇: Why are two click events registered in this html/css/jquery