首页 > 解决方案 > 以编程方式停止 TestNG 运行

问题描述

我开发了一些 GUI,用户可以在其中启动和停止 TestNG 测试。

我是否可以在不创建条件检查的情况下停止 TestNG 进程,@AfterMethod因为某些测试非常长(超过 15 分钟),因此@AfterMethod解决方案无效。没有要求优雅停止测试。

最新的 TestNG 版本(>7.0)有解决方案吗?例如,在IExecutorFactoryor的帮助下ITestRunnerFactory

参考:

标签: javatestingautomationtestng

解决方案


由于您依赖 GUI 来启动和停止测试,因此我假设存在startstop方法。

在该start方法中,您创建一个ExecutorService它将以编程方式执行测试,并且在该stop方法中您可以关闭此执行器。

另外,请注意,建议您执行一些机制来共享ExecutorServicebetweenstartstop。否则,如果允许通过 GUI 进行多次测试运行(连续启动操作),则会导致麻烦。

public class MyClass {
    private ExecutorService ex;

    public static void testRunner() {
        TestNG t = new TestNG();
        t.setTestClasses(new Class[] {YourTestClass.class});
        t.run();
    }

    public void start(){
        ex = Executors.newFixedThreadPool(1);
        ex.execute(MyClass::testRunner);        
    }

    public void stop(){
        ex.shutdownNow();
    }

}

推荐阅读