如何测试不同 VM 上的 2 个或多个客户端之间的交互?

Posted

技术标签:

【中文标题】如何测试不同 VM 上的 2 个或多个客户端之间的交互?【英文标题】:How can i test the interactions between 2 or more clients on different VMs? 【发布时间】:2010-08-23 18:11:05 【问题描述】:

我需要在完整的端到端测试中测试 2 个或更多 java 客户端之间的交互。

理想情况下,如果没有 GUI,它应该类似于(Junit 语法):


@Test
public void EndToEndTest()
    App firstApp = new App();
    App secondApp = new App();
    String msg = "something";
    firstApp.send(msg); //this method will magically send msg to secondApp
    String msgReceived = secondApp.getLastMsg();
    AssertEquals(msgReceived, msg);

上面的代码不是我想要的,因为它使“应用程序”在同一个 VM 上运行。

我自己想到的解决方案是编写一个假的 main 实例化 secondApps 并将其所有输出写入文件,通过系统调用启动它,然后检查结果,但它似乎是真正的矫枉过正。此外,使用这样的策略,测试 GUI 会更加困难(如果不是不可能的话)。

感谢您的帮助。

【问题讨论】:

【参考方案1】:

流程:

一种解决方案是使用 Runtime.exec 启动另一个进程,这将允许您从启动它的进程中监视该进程。这个新进程将在另一个 JVM 上运行。相当于fork。

在处理线程时需要处理许多注意事项,以便在 Java 中管理另一个进程。

本教程应该会有所帮助:When Runtime.exec() won't

通讯:

有几种方法可以让多个进程相互通信。如果您使用的是 Runtime.exec,您可以通过每个程序的输入和输出流进行通信。

这很慢,更好的解决方案是使用 sockets 在每个进程之间直接通信。

【讨论】:

以上是关于如何测试不同 VM 上的 2 个或多个客户端之间的交互?的主要内容,如果未能解决你的问题,请参考以下文章

如何测试多个(2个或更多)布尔值是不是为真

如何使用 R 中的正则表达式提取 2 个或多个特殊字符之间的值? [复制]

如何从子查询中的 2 个或多个字段中获取最大值

java多态的2种表现形式 方法重载和方法覆盖

uml上的create是啥意思

如何在 PHP 中以 2 个或多个连续空格分割字符串