如何自动化 Kafka 测试
How to automate Kafka Testing
我们开发了一个系统,使用 kafka 对数据进行排队,然后使用该数据为用户下订单。
我们已经手动测试了某些东西,但现在我们的目标是自动化该过程。
有客户端可以测试吗?我找到了使用 kafka 客户端本身对其进行单元测试的方法,但我的目标是测试整个系统。
编辑:我们的目的只是 API 测试,即只是后端,而不是 UI
您可以在集成测试中以编程方式启动 Kafka,Kafka 使用 Zookeeper,因此请先查看 Zookeeper TestingServer - 此实例 class 使用给定端口创建并启动 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();
}
希望这些帮助:)
您可以通过在 docker
容器中启动 Kafka 来进行集成测试或端到端测试。如果你使用 Apache kafka-clients:2.1.0
,那么你在生产时不需要在 API 级别处理 ZooKeeper或使用记录。
Dockerizing Kafka,测试有助于覆盖单节点以及多节点Kafka集群中的场景。这样你就不必针对 Mock/In-Memory Kafka 进行一次测试,然后再针对真正的 Kafka 进行测试。这可以使用 TestContainers.
来完成
如果你有太多的测试场景需要覆盖,你可以选择Kafka Declarative Testing类似docker-compose
的风格,这样你就可以消除Kafka客户端API编码。
在此处查看一些方便的示例以验证 produce and consume。
TestContainers 项目还支持 docker-compose。
据我了解,您想从消息开始实施端到端测试。我和一些人最近对使用 Kafka 测试 Event-driven 系统的库、工具和框架进行了研究。
我们发现了 Zerocode,它是一种使用 JSON 或 YAML 等声明性语言的自动化 API 测试。它支持 REST、SOAP 和我们感兴趣的消息传递。它发送和消费来自主题的消息并最终做出断言,易于学习和使用。这里是 link 以获取更多详细信息 Zerocode。虽然我们开始使用它,但它似乎是一个不错的选择。
您将需要 Kafka 代理和依赖项 运行 才能使此解决方案正常工作,但没有什么比 docker 编写 and/or 一些脚本来提供测试环境更好的了。
另一种方法是使用 Kafka 库实现您自己的项目,并使用这些库在测试中发送和接收消息。
很遗憾,我们找不到更多可用选项。 Kafka 有一个创建 test kit 的提议,但尚未进行。
不幸的是,Pavel 描述的方法不再适用于 Kafka 2.8+。但是,我可以使用 KarelDB:
所采用的方法对 Kafka 3.2 进行我们的 end-to-end 测试。
Properties props = TestUtils.createBrokerConfig(
brokerId,
zkConnect,
false,
false,
TestUtils.RandomPort(),
noInterBrokerSecurityProtocol,
noFile,
EMPTY_SASL_PROPERTIES,
true,
false,
TestUtils.RandomPort(),
false,
TestUtils.RandomPort(),
false,
TestUtils.RandomPort(),
Option.<String>empty(),
1,
false,
1,
(short) 1
);
KafkaConfig config = KafkaConfig.fromProps(props);
KafkaServer server = TestUtils.createServer(config, Time.SYSTEM);
// `createServer` will also start your Kafka server.
// To shutdown:
server.shutdown();
我们开发了一个系统,使用 kafka 对数据进行排队,然后使用该数据为用户下订单。
我们已经手动测试了某些东西,但现在我们的目标是自动化该过程。
有客户端可以测试吗?我找到了使用 kafka 客户端本身对其进行单元测试的方法,但我的目标是测试整个系统。
编辑:我们的目的只是 API 测试,即只是后端,而不是 UI
您可以在集成测试中以编程方式启动 Kafka,Kafka 使用 Zookeeper,因此请先查看 Zookeeper TestingServer - 此实例 class 使用给定端口创建并启动 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();
}
希望这些帮助:)
您可以通过在 docker
容器中启动 Kafka 来进行集成测试或端到端测试。如果你使用 Apache kafka-clients:2.1.0
,那么你在生产时不需要在 API 级别处理 ZooKeeper或使用记录。
Dockerizing Kafka,测试有助于覆盖单节点以及多节点Kafka集群中的场景。这样你就不必针对 Mock/In-Memory Kafka 进行一次测试,然后再针对真正的 Kafka 进行测试。这可以使用 TestContainers.
来完成如果你有太多的测试场景需要覆盖,你可以选择Kafka Declarative Testing类似docker-compose
的风格,这样你就可以消除Kafka客户端API编码。
在此处查看一些方便的示例以验证 produce and consume。
TestContainers 项目还支持 docker-compose。
据我了解,您想从消息开始实施端到端测试。我和一些人最近对使用 Kafka 测试 Event-driven 系统的库、工具和框架进行了研究。
我们发现了 Zerocode,它是一种使用 JSON 或 YAML 等声明性语言的自动化 API 测试。它支持 REST、SOAP 和我们感兴趣的消息传递。它发送和消费来自主题的消息并最终做出断言,易于学习和使用。这里是 link 以获取更多详细信息 Zerocode。虽然我们开始使用它,但它似乎是一个不错的选择。
您将需要 Kafka 代理和依赖项 运行 才能使此解决方案正常工作,但没有什么比 docker 编写 and/or 一些脚本来提供测试环境更好的了。
另一种方法是使用 Kafka 库实现您自己的项目,并使用这些库在测试中发送和接收消息。
很遗憾,我们找不到更多可用选项。 Kafka 有一个创建 test kit 的提议,但尚未进行。
不幸的是,Pavel 描述的方法不再适用于 Kafka 2.8+。但是,我可以使用 KarelDB:
所采用的方法对 Kafka 3.2 进行我们的 end-to-end 测试。Properties props = TestUtils.createBrokerConfig(
brokerId,
zkConnect,
false,
false,
TestUtils.RandomPort(),
noInterBrokerSecurityProtocol,
noFile,
EMPTY_SASL_PROPERTIES,
true,
false,
TestUtils.RandomPort(),
false,
TestUtils.RandomPort(),
false,
TestUtils.RandomPort(),
Option.<String>empty(),
1,
false,
1,
(short) 1
);
KafkaConfig config = KafkaConfig.fromProps(props);
KafkaServer server = TestUtils.createServer(config, Time.SYSTEM);
// `createServer` will also start your Kafka server.
// To shutdown:
server.shutdown();