【问题标题】:How to automate Kafka Testing如何自动化 Kafka 测试
【发布时间】:2022-05-13 02:13:10
【问题描述】:

我们开发了一个系统,使用 kafka 对数据进行排队,然后使用该数据为用户下订单。
我们已经手动测试了某些东西,但现在我们的目标是自动化该过程。
有没有客户端可以测试?我找到了使用 kafka 客户端本身对其进行单元测试的方法,但我的目标是测试整个系统。

编辑:我们的目的只是 API 测试,即只是后端,而不是 UI

【问题讨论】:

  • 根据我目前的经验,在独立环境(单个 kafka 代理、单个 zookeeper、单个分区、少数消费者/生产者顺序/同步运行)中测试基于 kafka 的系统工作正常。您可能会在系统实时生成和消耗的实时环境中遇到偏移量的同步和计时问题,并且您正试图利用总线来验证通过它的数据。这适用于 live env 有多个代理、动物园管理员、分区、生产者和消费者以及可能的异步流的情况。

标签: java automated-tests apache-kafka


【解决方案1】:

您可以在集成测试中以编程方式启动 Kafka,Kafka 使用 Zookeeper,因此首先查看 Zookeeper TestingServer - 此类的实例使用给定端口创建并启动 Zk 服务器。

接下来看看KafkaServerStartable.scala,你必须提供指向你的内存Zk服务器的配置并调用startup()方法,这里是一些代码:

import kafka.server.KafkaConfig; 
import kafka.server.KafkaServerStartable;
import java.util.Properties;

public KafkaTest() {
    Properties properties = createProperties();
    KafkaConfig kafkaConfig = new KafkaConfig(properties);
    KafkaServerStartable kafka = new KafkaServerStartable(kafkaConfig);
    kafka.startup();
}

希望这些帮助:)

【讨论】:

  • 嗨,谢谢,可能是我对这个主题缺乏了解,但是我们的 kafka 部署在远程服务器上,我可以按照您在本地机器上建议的方式访问它吗..
  • 我建议您在测试套件之前启动 Kafka,在这种情况下您不必连接到远程服务器。我认为这是更好的解决方案,因为您的测试不依赖于外部资源。
【解决方案2】:

您可以通过在 docker 容器中启动 Kafka 来进行集成测试或端到端测试。如果您使用 Apache kafka-clients:2.1.0,则在生成或使用记录时无需在 API 级别处理 ZooKeeper

Docker 化 Kafka,测试有助于覆盖单节点和多节点 Kafka 集群中的场景。这样您就不必针对 Mock/In-Memory Kafka 进行一次测试,然后再针对真正的 Kafka 进行测试。这可以使用TestContainers 来完成。

如果你有太多的测试场景需要覆盖,你可以选择Kafka Declarative Testing,比如docker-compose,这样可以省去Kafka客户端API编码。

在此处查看一些方便的示例以验证 produceconsume

TestContainers 项目也支持 docker-compose。

【讨论】:

    【解决方案3】:

    据我了解,您希望从消息开始实施端到端测试。我和最近的一些人研究了使用 Kafka 测试事件驱动系统的库、工具和框架。

    我们发现 Zerocode 是一种自动化 API 测试,使用 JSON 或 YAML 等声明性语言。它支持 REST、SOAP 和我们感兴趣的消息传递。它发送和消费来自主题的消息并最终做出断言,易于学习和使用。这是更多详细信息的链接Zerocode。虽然我们开始使用它,但它似乎是一个不错的选择。

    您需要运行 Kafka 代理和依赖项才能使该解决方案正常工作,但没有什么比 docker compose 和/或一些脚本更能为测试带来环境了。

    另一种方法是使用 Kafka 库实现您自己的项目,并使用这些库在测试中发送和接收消息。

    很遗憾,我们找不到更多可用的选项。 Kafka 提出了创建test kit 的提议,但尚未进行。

    【讨论】:

      猜你喜欢
      • 2014-07-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-05
      • 2014-06-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多