2012-08-11 121 views
13

我有一个分布式系统,分布在多个盒子上。他们使用tcp或多播相互交谈。每个组件互相交换消息 - 这些基本上是序列化的数据结构。用于测试分布式系统的集成测试框架?

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

+0

你想运行哪些类型的测试?即你试图断言什么?对象是否正确序列化?通过分布式系统的消息是否被正确接收和处理?消息将按照特定顺序在系统中运行?你关心负载测试吗? – 2012-08-11 20:31:32

+0

@EricLaForce:需要继续系统运行良好,所以以上所有适用。 – Fanatic23 2012-08-12 05:00:11

回答

5

我想有不同的做法。我尽可能地尽量避免集成测试,但在某些时候需要进行。这只是一个建议,我会这样做:

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

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

一定要记住测试的金字塔,记住集成测试和端到端测试可能非常昂贵。所以明智的选择,当使用它们:

enter image description here

我来自Java世界,这以下就是我认为也与主题相关的,可能是你感兴趣的一些额外的信息:

  • Data Transfer Object图案,是有趣
  • RMI vs EJB vs HTTP
  • (上远程调用技术之间的差异的一些有趣的评论) 10一个面向java开发人员的BDD框架(如果您完全了解业务规则,那么测试更容易)

希望你觉得它有用。

0

您可以使用STAF/STAX,它具有良好的功能/服务,用于分布式测试场景,如客户端服务器,SAN等。另外还有一个框架,名为Twister by Luxoft。这一个也很出色。

0

我将回答我们正在用Java编写的分布式系统做什么。我们有多个linux守护进程,这些守护进程实际上是围绕java程序进行封装的,这些程序主要通过数据库彼此通信。所以他们不会来回发送序列化的消息。我们使用dbunit和spring-test进行集成测试。使用dbunit,您基本上可以加载数据,运行您的System Under Test(SUT),然后验证数据库处于正确状态。 spring-test使基于弹簧的应用程序可以轻松地在测试时加载应用程序上下文。

如果您没有基于Java的应用程序,那么这可能不是那么有用。框架选择主要取决于您的技术选择和架构。