1

我正在使用 java 中的 Apache.commons.exec.Executor 从 cmd shell 执行 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 的执行会突然恢复,但是现在我已经终止了执行程序进程,我看不到控制台输出。

4

0 回答 0