用于测试分布式系统的集成测试框架?

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

我们有哪些集成测试框架来测试这些系统? 我熟悉ruby所以基于ruby的东西肯定会有所帮助。

我想有不同的方法。 我尽可能地避免集成测试,但在某些时候需要使用。 这只是我要做的建议:

  1. 使用行为驱动方法可以清楚地定义要测试的方案。
  2. 对代表模块输出的过程进行unit testing (无集成 )。
  3. unit testing应该使用来自其他模块的输入但是使用模拟的过程 。 测试当前另一个模块的逻辑。
  4. 执行冒烟测试 ,这种类型的测试将确保您的模块之间可以相互通信(这是一种集成测试)。 我认为烟雾测试只是足够的集成测试。 如果你考虑一下:为什么模块会关心其他模块做什么?(让每个部分做他们想做的事,但只关心如何与他们沟通)

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

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

在此处输入图像描述

我来自Java世界,以下只是一些我认为也与该主题相关的额外信息,可能对您有意义:

  • 数据传输对象模式很有趣
  • RMI vs EJB vs HTTP (关于远程调用技术之间差异的一些有趣评论)
  • Spock为Java开发人员提供了一个BDD框架。(如果您完全理解业务规则,那么测试就更容易了)

希望你觉得它有用。

你可以结账Zopkio: https : //github.com/linkedin/Zopkio 。 它是分布式系统function和性能测试的开源框架。

您可以使用STAF / STAX,它具有良好的function/服务,可用于分布式测试场景,如Client-Server,SAN等。此外,还有一个名为Twister的框架由Luxoft提供。 这个也很精彩。

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

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