2013-02-13 173 views
2

我試圖通過Java應用程序而不是在UI上執行我的SOAPUI測試套件。然而,當創建一個WSDLProject時,一個線程開始永遠不會被殺死,所以當我的代碼被執行並且所有的測試運行時,應用程序不會結束,因爲這個線程仍然在那裏。在SOAPUI中掛起線程在Java應用程序中測試

它看起來像一個AWT守護線程

在Eclipse調試器:

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,但文檔很糟糕,我無法找到任何有關如何處理這個問題的體面示例。

回答

1

我已經用下面的解決方案解決了這個問題。這並不理想,但我無法找到解決方法,SOAP UI文檔非常痛苦。

首先,我將每個測試步驟的結果保存到一個xml文件中。

接下來,一旦試驗運行我退出:

System.exit(runner.getOverallResult() ? 0 : 1); 

最後,另一個應用程序通過命令行腳本.SH執行該。執行它之後,另一個應用程序將讀取XML文件以確定結果。

4

在過去的兩天裏,我一直在努力解決同樣的問題。我有一個可能有所幫助的解決方案。你沒有結束的原因不是AWT-Windows線程。罪魁禍首是標有「線程2」,這是型SoapUIMultiThreadedHttpConnectionManager.IdleConnectionMonitorThread

不幸的是這個線程當實例WsdlProject被創建,沒有直接進入關機方法的線程。這是我不得不按順序將其關閉,並有JVM退出時,我的主程序退出做:

有你的主要方法或其他方法執行下面的結尾:

// 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(); 

雖然很醜,但我希望這個解決方案能幫助你。

+0

我們是否有SoapUI的官方解決方案?因爲這仍然發生在他們最新的api中。他們有這種關機方法http://www.soapui.org/apidocs/com/eviware/soapui/impl/wsdl/support/http/SoapUIMultiThreadedHttpConnectionManager.html,但我不知道從哪裏獲得它的上下文:( – 2015-09-08 05:15:36