2013-02-13 172 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