SOAPUI中挂起的线程在Java应用程序中测试

时间:2013-02-13 09:08:58

标签: java soapui

我试图通过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,但文档很糟糕,我找不到任何关于如何处理这个问题的正确例子。

2 个答案:

答案 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文件以确定结果。