亚马逊Kinesis +集成测试

Ian*_*nes 12 java spring integration-testing spring-boot amazon-kinesis

我目前正在开发一系列需要与Kinesis集成的Web服务 - 实现已经完成,但我们有一系列集成测试(我们的Web服务都使用Spring Boot,所以我们使用@WebIntegrationTest我们的测试类上的注释用于启动服务器的本地实例,然后使用TestRestTemplate调用我们的资源,这些资源当前正在尝试并且无法连接到真正的Kinesis.

虽然在普通的单元测试中模拟对Kinesis库中方法的调用并不是一个问题,但是我们无法在集成测试中真正做到这一点,因为整个应用程序堆栈都与Spring连接.对于其他一些事情(例如OAuth2和对其他Web服务的调用),我们已经能够使用WireMock来模拟实际的端点 - 我真正想做的是以这种方式使用WireMock来模拟调用AmazonKinesisClient,但我找不到有关如何执行此操作的任何建议.

或者,我已经看到一些AWS组件具有由第三方编写的测试库,这些测试库允许您运行它的本地版本(例如:DynamoDbLocal),但无法为Kinesis找到这样的解决方案.

有人能就如何与Kinesis运行集成测试给我一些建议吗?

Raj*_*ena 8

提供解决方案可能已经太晚了,但我将添加我的团队在本地复制AWS资源所做的工作,因为我们使用了大量的Kinesis,DynamoDb,S3和cloudWatch.

我们已经在Localstack创建了包装器 - > https://github.com/localstack/localstack,它允许我们使用docker 容器来启动必要服务的本地实例docker-compose.

我们的典型docker-compose.yml文件如下:

version: '2'
services:
  localstack:
    image: "localstack/localstack"
    environment:
      - SERVICES=kinesis,dynamodb,cloudwatch
    ports:
      - "4568"
      - "4569"
      - "4582"
Run Code Online (Sandbox Code Playgroud)

然后,在集成测试的设置阶段,我们的包装器将启动docker-compose up并针对本地基础结构运行测试.在拆卸过程中,包装机会杀死容器.


小智 1

我遇到了同样的问题,到目前为止我发现的唯一模拟实现是一个 Nodejs 实现: https: //github.com/mhart/kinesalite 它确实有效 - 我设法针对它运行我的 Java Kinesis 客户端,只需在 kinesis.properties 上设置端点:

kinesisEndpoint=http://localhost:4567
Run Code Online (Sandbox Code Playgroud)

缺点是在构建时测试期间使用它并不是一件容易的事 - 需要找到一种在测试之前启动模拟运动的方法(使用 Maven 插件或其他东西),但还没有实现。