【发布时间】:2016-02-15 06:41:05
【问题描述】:
我有一个执行 TestNG 自动化脚本的 GUI 程序。它旨在让用户轻松配置一些设置并启动他们想要的自动化脚本。
我需要添加的一件事是能够立即停止正在运行的 TestNG 进程。就像在 Eclipse 中一样,“终止”按钮会立即停止正在运行的任何内容。
这是启动 TestNG 测试的代码的样子:
public class ScriptRunner implements Runnable {
public void runScript() {
Thread testRun = new Thread(this);
testRun.start();
}
@Override
public void run() {
//various other things are configured for this,
//but they're not relevant so I left them out
TestNG tng = new TestNG();
//While this runs, various browser windows are open,
//and it could take several minutes for it all to finish
tng.run();
}
}
根据评论,tng.run() 可能需要几分钟才能完成,它正在执行几件事,打开/关闭浏览器窗口等。
我怎样才能像从 IDE 运行应用程序一样立即终止进程?
编辑:
根据 cmets,我正在尝试使用 ServiceExecutor 和 shutDownNow() 代码如下所示:
ExecutorService executorService = Executors.newFixedThreadPool(10);
public void runScript() {
executorService.execute(this);
}
//this method gets called when I click the "stop" button
public void stopRun() {
executorService.shutdownNow();
}
@Override
public void run() {
//same stuff as from earlier code
}
【问题讨论】:
-
System.exit(0);将立即终止 JVM
-
@OluCode 是的,但这不会也杀死我的 GUI 应用程序吗?我需要一种方法来杀死正在运行的 TestNG 对象。
-
如果是线程,使用像ExecutorService这样的线程管理器为你处理线程生命并调用serviceObject.shutDownNow();
-
为什么不将
TestNG线程保存在run()方法范围之外并从另一个方法终止它? -
@OluCode 谢谢,但它似乎不起作用。 shutdownNow();仅停止 TestNG 对象正在执行的直接操作(例如,如果对象必须在单独的浏览器中分别运行 10 个测试,则调用 shutDownNow() 一次仅停止 1 个测试)
标签: java user-interface testng terminate