我试图通过Java应用程序而不是UI来执行我的SOAPUI测试套件。但是,在创建WSDLProject时,一个线程开始永远不会被杀死,所以当我的代码被执行并且所有测试都运行时,应用程序就不会因为这个线程仍然在那里而结束。
它看起来像一个AWT守护程序线程
在Eclipse Debugger中:
Daemon Thread [AWT-Windows] (Running)
这是我的代码:
WsdlProject projectName = String.format(
"src/main/resources/%s-soapui-project.xml", projectName);
WsdlProject project = new WsdlProject(projectName); //This line starts the thread
List<TestSuite> testSuites = project.getTestSuiteList();
//Loop over each testsuite
//Loop over each test case
有谁知道如何杀死这个帖子?
我搜索并搜索了SOAPUI API,但文档很糟糕,我找不到任何关于如何处理这个问题的正确例子。
答案 0 :(得分:5)
在过去的两天里,我一直在努力解决同样的问题。我有一个可能有帮助的解决方案。你没有结束的原因不是AWT-Windows线程。罪魁祸首是标有“Thread-2”的线程,其类型为 SoapUIMultiThreadedHttpConnectionManager.IdleConnectionMonitorThread
不幸的是,在实例化 WsdlProject 时创建的此线程没有可直接访问的关闭方法。这是我必须要做的事情,以便关闭它并在我的主例程退出时让JVM退出:
让您的main方法或其他方法在最后执行以下操作:
// Need to shutdown all the threads invoked by each SoapUI TestSuite
SoapUI.getThreadPool().shutdown();
try {
SoapUI.getThreadPool().awaitTermination(1, TimeUnit.SECONDS);
} catch (InterruptedException e) {
e.printStackTrace();
}
// Now to shutdown the monitor thread setup by SoapUI
Thread[] tarray = new Thread[Thread.activeCount()];
Thread.enumerate(tarray);
for (Thread t : tarray) {
if (t instanceof SoapUIMultiThreadedHttpConnectionManager.IdleConnectionMonitorThread) {
((SoapUIMultiThreadedHttpConnectionManager.IdleConnectionMonitorThread) t)
.shutdown();
}
}
// Finally Shutdown SoapUI itself.
SoapUI.shutdown();
虽然很难看,但我希望这个解决方案可以帮到你。
答案 1 :(得分:1)
我已使用以下解决方案修复此问题。它并不理想,但我无法找到解决方法,SOAP UI文档非常痛苦。
首先,我将每个测试步骤的结果保存到xml文件中。
接下来,一旦测试运行,我退出:
System.exit(runner.getOverallResult() ? 0 : 1);
最后,另一个应用程序通过命令行.sh脚本执行此操作。执行后,其他应用程序读取XML文件以确定结果。