当前位置: 首页 > 知识库问答 >
问题:

Python:模仿Kafka进行集成测试

郏稳
2023-03-14

我对集成测试有些陌生。我有两个使用Kafka互相传递消息的服务。然而,对于我的集成测试,我不一定希望为了运行我的测试而运行Kafka。有没有模仿Kafka的标准方法?或者这是我需要自己创建的东西,一些MockKafka队列和补丁在应用程序中适当的地方?此外,这是否违反了集成测试应该做的事情?我对此的看法是,我没有测试Kafka的任何功能,为了集成,测试应该被嘲笑。

共有1个答案

葛鸿熙
2023-03-14

模仿Kafka本身是不可行的,因为它的协议不是通用的RFC支持的标准(与HTTP不同),并且只有一个实现。

在单元测试级别,您可以抽象和模拟需要Kafka的函数,但这不是您的情况。你需要集成测试,所以,你很可能需要实际的Kafka来测试实际的交互。

为了尽可能少地让真正的Kafka参与进来,我会使用特殊的独立的Docker图像(比如:https://github.com/up9inc/async-ms-demo/tree/main/kafka).在9092端口暴露的情况下构建并运行它。

对于与Kafka的集成测试,我的原则是不要模仿Kafka本身,而是用我所说的“mock Actor”来模拟“不想要的/不相关的”服务。

“模拟演员”的方法在这里详细描述:https://up9.com/mock-actor-approach-for-kafka(我写的文章)。还有一个实现这些功能的工具(http://mockintosh.io)。

 类似资料:
  • 集成测试是对已经进行单元测试的各个部分的一种整合测试。集成是昂贵的,并且它出现在测试中。你必须把这个考虑到你的预计和时间表里。 理想情况下,你应该这样组织一个项目,使得最后没有一个阶段是必须通过显式集成来进行的。这比在项目过程中,随着事情完成逐渐集成事情要好得多。如果这是不可避免的,请仔细评估。

  • 如何模拟集成测试所需的许多依赖关系? 我使用Mockito进行纯单元测试。在这种情况下,Pure意味着测试一个类,嘲笑它的所有依赖关系。漂亮。 现在是集成测试。假设在这种情况下,集成测试将测试以下内容: 消息被放入队列 我们也可以说,在第2步中发生的处理是严肃的事情。它依赖于大量的数据库交互、多种外部服务、文件系统,以及各种各样的东西。流还会引发很多副作用,所以我不能简单地确保响应是正确的——我需

  • 我正在尝试将Spring Boot应用程序的一些集成测试从迁移到。目前,测试使用的是 当测试运行时,被配置为使用与服务器运行时相同的基本URL和(随机选择的)端口。 在我的一个测试中,我登录并保存authorization-response头值,以便在后续的API调用中使用。我试着将它迁移到,就像这样 但是当我像这样创建实例时,它没有配置为使用与应用程序相同的端口。 我尝试使用的依赖注入实例 这确

  • 使用Spock运行集成测试(例如)的最佳方式是什么?我想引导整个Spring Boot应用程序,并执行一些HTTP调用来测试整个功能。 我可以用JUnit(首先运行应用程序,然后执行测试): 但是有了Spock,应用程序就不会启动了:

  • Gradle4.6增加了对JUnit5的支持。 只要我没有用于例如集成测试的另一个sourceset,这对我是有效的:我不知道如何在我的集成测试中启用。 我所能做的是让任务与新的JUnit5支持一起工作,但我的任务使用JUnit5控制台并从命令行运行测试。最后,我在gradle中放弃对JUnit5的支持,并回滚到使用JUnit5控制台进行两个测试。 除了之外,如何在其他任务上启用Gradle4.6

  • 例如,我想用和测试Kafka/Flink的集成。 该过程将是: 与Flink一起阅读Kafka主题 用Flink进行一些操作 和Flink一起写另一个Kafka主题 以字符串为例,从输入主题中读取字符串,转换为大写,写入新主题。 问题是如何测试流量? 当我说测试时,这是单元/集成测试。 谢谢!