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

13

我有一个分布式系统,其组件分布在多个机器上。它们使用TCP或组播进行通信。每个组件都相互交换消息 - 这些基本上是被序列化的数据结构。

我们有哪些用于测试这类系统的集成测试框架?我熟悉Ruby,因此基于Ruby的框架肯定会有所帮助。


你想运行哪些类型的测试?比如说,你要断言什么?对象是否被正确序列化了?分布式系统中的消息是否被正确地接收和处理了?消息是否会按照一定的顺序在系统中运行?你是否关注负载测试? - Eric LaForce
@EricLaForce:需要确保系统运行良好,因此上述所有内容都适用。 - Fanatic23
4个回答

4

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

  1. 使用行为驱动的方法清晰地定义您想要测试的场景。
  2. 单元测试(无集成),对应模块的输出进行测试。
  3. 对于需要使用其他模块输入的过程,使用模拟进行单元测试。在当前模块中测试另一个模块的逻辑。
  4. 执行冒烟测试,这种类型的测试将确保您的模块之间可以相互通信(这是一种集成测试)。我认为冒烟测试就足够了。如果您考虑一下,为什么一个模块会关心其他模块做什么?(让每个部分随心所欲地做,只关心如何与它们通信)

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

始终记住测试金字塔,记住集成测试和端到端测试可能会非常昂贵。因此,在使用它们时要明智选择:

enter image description here

我来自Java世界,以下是一些额外的信息,我认为这些信息与主题有关,可能会引起您的兴趣:
  • 数据传输对象模式很有趣
  • RMI vs EJB vs HTTP(有关远程调用技术差异的一些有趣评论)
  • Spock是Java开发人员的BDD框架。(如果您完全理解业务规则,则测试会更加容易)
希望你觉得这些信息有用。

1

0

您可以使用STAF/STAX,它具有良好的分布式测试场景能力/服务,例如客户端-服务器、SAN等等。此外,还有一个名为Twister的框架,由Luxoft开发,也非常出色。


0

我将介绍我们使用Java编写的分布式系统的工作方式。我们有多个Linux守护进程,实际上是Java程序的包装器,它们主要通过数据库相互通信。因此,它们不会来回发送序列化消息。我们使用dbunit和spring-test进行集成测试。使用dbunit,您基本上加载数据,运行您的被测系统(SUT),然后验证数据库处于正确状态。spring-test使得在测试时轻松加载基于Spring的应用程序上下文。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接