【问题标题】:Integration testing frameworks for testing a distributed system?用于测试分布式系统的集成测试框架?
【发布时间】:2012-08-11 20:00:21
【问题描述】:

我有一个分布式系统,其组件分布在多个盒子中。它们使用 tcp 或多播相互通信。每个组件相互交换消息——这些基本上是被序列化的数据结构。

我们有哪些集成测试框架来测试此类系统?我对红宝石很熟悉,所以基于红宝石的东西肯定会有所帮助。

【问题讨论】:

  • 您想运行什么类型的测试?即你想断言什么?对象是否正确序列化?通过分布式系统的消息是否被正确接收和处理?消息会按照一定的顺序在系统中运行吗?您是否关心负载测试?
  • @EricLaForce:需要确保系统运行良好,所以以上所有内容都适用。

标签: java ruby tdd integration-testing


【解决方案1】:

我想有不同的方法可以做到这一点。我尽量避免集成测试,但在某些时候当然需要。这只是一个建议我会做什么:

  1. 使用behavior driven approach 明确定义您要测试的场景。
  2. 对表示模块输出的过程执行unit testing(否integration)。
  3. 单元测试应该使用来自其他模块的输入的过程,但使用mocks。测试当前另一个模块的逻辑。
  4. 执行smoke tests,这种类型的测试将确保您的模块之间可以相互通信(这是一种集成测试)。我认为冒烟测试就足够了集成测试。如果你想一想:为什么一个模块会关心其他模块做什么?(让每个部分做他们想做的事,但只关心如何与他们沟通)

我个人认为在测试方法中将对象从一个分布式模块调用到另一个分布式模块不是一个好习惯。是的,这将是一个集成测试,但我认为它非常容易可靠。

始终牢记测试金字塔,记住集成测试和端到端测试可能非常昂贵。所以明智地选择何时使用它们:

我来自 Java 世界,以下只是一些额外的信息,我认为也与该主题相关并且可能会引起您的兴趣:

  • Data Transfer Object 模式很有趣
  • RMI vs EJB vs HTTP(一些关于远程调用技术差异的有趣评论)
  • Spock 一个面向 Java 开发人员的 BDD 框架。(如果您完全理解业务规则,那么测试会更容易)

希望你觉得它有用。

【讨论】:

    【解决方案2】:

    您可以查看 Zopkio:https://github.com/linkedin/Zopkio。它是一个用于分布式系统功能和性能测试的开源框架。

    【讨论】:

      【解决方案3】:

      您可以使用 STAF/STAX,它为客户端-服务器、SAN 等分布式测试场景提供了良好的功能/服务。此外,还有一个由 Luxoft 命名的框架 Twister。这个也很厉害。

      【讨论】:

        【解决方案4】:

        我将为我们使用 Java 编写的分布式系统所做的事情给出答案。我们有多个 linux 守护进程,它们实际上是围绕 java 程序的包装器,它们主要通过数据库相互通信。所以他们不会来回发送序列化消息。我们使用 dbunit 和 spring-test 进行集成测试。使用 dbunit,您基本上可以加载数据,运行您的被测系统(SUT),然后验证数据库是否处于正确状态。 spring-test 使基于 Spring 的应用程序在测试时可以轻松加载应用程序上下文。

        如果您没有基于 java 的应用程序,那么这可能没有那么有用。框架选择在很大程度上取决于您的技术选择和架构。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2016-03-15
          • 2011-03-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-12-24
          相关资源
          最近更新 更多