2013-02-13 2 views
2

Я пытаюсь выполнить свои тестовые пакеты SOAPUI через приложение Java, а не в пользовательском интерфейсе. Однако при создании WSDLProject начинается поток, который никогда не убивается, поэтому, когда мой код выполняется и все тесты запускаются, приложение не заканчивается, так как этот поток все еще сидит там.Висячая нить в SOAPUI Тесты в Java-приложении

Это выглядит как AWT Daemon Тема

В 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 

Кто-нибудь знает, как убить эту нить?

Ive искал и искал API SOAPUI, но документация ужасная, и я не могу найти достойных примеров того, как подойти к этому.

ответ

1

Я исправил это с помощью следующего решения. Это не идеально, но я не мог найти способ обойти это, и документация по SOAP UI невероятно болезненна.

Во-первых, я сохраняю результаты каждого этапа теста в файле xml.

Далее, после того, как тесты запуска I выхода:

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

Наконец, еще одно приложение выполняет это через .sh сценарий командной строки. После его выполнения другое приложение считывает XML-файл для определения результатов.

4

В течение последних двух дней я боролся с той же проблемой. У меня есть решение, которое может помочь. Причина, по которой вы не закончите, - это не поток AWT-Windows. Вина нить с надписью «Thread-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, но я не знаю, где его контекст :( –