亚马逊 Kinesis + Integration Tests

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

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

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

有没有人能给我一些关于如何使用Kinesis运行集成测试的建议?


答案 1

现在给出解决方案可能已经太晚了,但我会添加我的团队在本地复制 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"

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


答案 2

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

kinesisEndpoint=http://localhost:4567

缺点是在构建时测试期间使用它并非易事 - 需要在测试之前找到一种方法来启动模拟运动(使用maven插件或其他内容),尚未到达它。


推荐