我有启用了 TestNG 和 Surefire 插件的 Groovy Maven2 测试项目。
我想在最后一个测试方法中启动外部进程(启动一些 *.exe 文件的 *.cmd 文件),完成我的测试并在测试后让进程运行。
我尝试了以下代码来做到这一点:
1 次尝试
def builder = new ProcessBuilder('cmd','/c <name>.cmd')
builder.directory( ( new File( <path_to_working_directory> ) ) )
builder.start()
2 次尝试(有和没有 start cmd 选项)
Runtime.getRuntime().exec( "cmd /c start <name>.cmd", null , ( new File( <path_to_working_directory> ) ) )
3 次尝试
( new AntBuilder() ).exec(
dir: "<path_to_working_directory>",
executable: "<name>.cmd"
)
.cmd 在哪里:
set path=<path_to_execFile>;%path%
start <execFileName>.exe
当我通过“运行”功能(Alt+Shift+F10)从 Intellij IDEA 启动这些代码时,代码成功执行,进程启动并在测试完成后运行。
当我从 Intellij IDEA Maven 任务启动这些代码时,干净的 Maven 安装(甚至来自 Jenkins 的 Maven 任务)进程成功启动,但测试仍在运行。我需要手动杀死它。当我手动终止测试进程(Maven 进程)时,我启动的外部进程继续按预期工作。
这个挂起的测试过程是我目前最头疼的问题。
我查看了很多材料,但没有找到任何根本原因,修复甚至解决此问题的方法。我看到我所有的尝试(也许除了 AntBuilder() 之外)都创建了分离的进程。我想这可以与JVM设置相关联。但我找不到哪一个。
另外,我试过
"full command to run my cmd".execute()
但这对我也没有帮助。
你能帮我解决这个问题吗?
提前致谢!