1

JUnit と Selenium2 を使用してアプリケーションをテストしています。Jenkinsで実行されているsurefireプラグインでMavenを使用してテストを実行します。数週間うまくいったテストで、さらに多くのテストを追加したところ、テストは次のメッセージで失敗しました。

Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.11:test (default-test) on project guitest: Failure or timeout
...
Process leaked file descriptors

たとえば、WebDriver (およびそれらをコピーするための apache commons IO) を使用してスクリーンショットを撮るときなど、コードでファイルを開いたままにしておくだけだと最初に考えました。

File scrFile = ((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE);
File destFile = new File(...);
FileUtils.copyFile(scrFile, destFile);

ただし、スクリーンショットの記録を削除しても問題は解決しません。

ここで何が問題なのか、および/またはこの問題に取り組む方法についての指針はありますか?

編集:

WebDrivers / browser インスタンスを再利用するために、WebdriverPool を実装しました。テストが終了したら、シャットダウン フックを使用して、開いているすべてのインスタンスを閉じます。

Runtime.getRuntime().addShutdownHook(new Thread(){
    @Override
    public void run(){
        for (WebDriver driver : drivers.values())
            driver.close();

        if (!driversInUse.isEmpty())
            throw new IllegalStateException("There are still drivers in use (" + driversInUse.size() + ")");
    }
});

これが問題ではないでしょうか?

4

0 に答える 0