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