2

UIではなくJavaアプリを介してSOAPUIテストスイートを実行しようとしています。ただし、WSDLProjectを作成すると、強制終了されないスレッドが開始されるため、コードが実行されてすべてのテストが実行されても、このスレッドはまだそこにあるため、アプリは終了しません。

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

誰かがこのスレッドを殺す方法を知っていますか?

私はSOAPUIAPIを検索して検索しましたが、ドキュメントがひどく、これにアプローチする方法の適切な例を見つけることができません。

4

2 に答える 2

5

過去2日間、私は同じ問題に苦しんでいます。私は役立つかもしれない解決策を持っています。終了しない理由は、AWT-Windowsスレッドではありません。原因は、SoapUIMultiThreadedHttpConnectionManager.IdleConnectionMonitorThreadタイプの「Thread-2」というラベルの付いたスレッドです。

残念ながら、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();

醜いですが、このソリューションがお役に立てば幸いです。

于 2014-08-06T14:01:14.767 に答える
1

私はこれを次の解決策で修正しました。これは理想的ではありませんが、これを回避する方法を見つけることができず、SOAPUIのドキュメントは非常に苦痛です。

まず、各テストステップの結果をxmlファイルに保存します。

次に、テストが実行されたら、終了します。

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

最後に、別のアプリがコマンドライン.shスクリプトを介してこれを実行します。それを実行した後、他のアプリはXMLファイルを読み取って結果を判別します。

于 2013-02-25T12:30:48.300 に答える