1

次のコードでJavaでApache.commons.exec.Executorを使用して、cmdシェルからtestng.xml(40個のテストケースを持つ)を実行しています:

public static void executeBatch(String folderLoc) throws Exception {
    try {

            String cmd_for_testng = "java -cp " + "D:\\project\\libs\\*;D:\\project\\bin" + " org.testng.TestNG testng.xml";
            CommandLine cl = CommandLine.parse("cmd.exe /k" + dir +" && cd \"" + "D:\\project" +  "\" && " + cmd_for_testng);
            DefaultExecuteResultHandler resultHandler;
            ExecuteWatchdog watchdog;
            final Executor executor;
            resultHandler = new DefaultExecuteResultHandler();
            watchdog = new ExecuteWatchdog(-1L);
            executor = new DefaultExecutor();
            executor.setStreamHandler(new PumpStreamHandler(new LogOutputStream() {

            @Override
            protected void processLine(final String line, @SuppressWarnings("unused") int level) {
               Display.getDefault().syncExec(new Runnable() {

                    public void run() {

                        if (line.toLowerCase().indexOf("error") > -1) {
                            System.out.println(line+"\n");
                        } else if (line.toLowerCase().indexOf("warn") > -1) {
                            System.out.println(line+"\n");
                        } else {

                            System.out.println(line+"\n");
                        }
                    }
                });
            }
        }));
        executor.setExitValue(1);
        executor.setWatchdog(watchdog);
        executor.execute(cl, resultHandler);
} catch (Exception e) {
    e.printStackTrace();
}

}

ただし、11 ~ 14 個のテストケースを実行するとハングし、コンソールへの書き込みが停止し、永久にハングします。そのプロセスを強制終了すると、testng.xml の実行が突然再開されますが、executor プロセスを強制終了したため、コンソール出力が表示されません。

4

0 に答える 0