次のコードで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 プロセスを強制終了したため、コンソール出力が表示されません。