如何测试不同 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 个或多个客户端之间的交互?的主要内容,如果未能解决你的问题,请参考以下文章