13

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

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

4

4 回答 4

5

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

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

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

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

在此处输入图像描述

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

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

希望你觉得它有用。

于 2013-02-03T15:39:31.410 回答
1

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

于 2015-03-15T23:40:01.547 回答
0

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

于 2014-05-27T04:40:21.763 回答
0

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

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

于 2015-02-24T03:39:11.897 回答