如何在发生异常时停止TestNG执行程序



我正在以编程方式运行TestNG。我有一个用例,当任何测试发生任何异常时,我需要停止执行者。我的问题是:

  1. 当通过Test或配置方法发生异常时,强制TestNG停止执行的最佳方法是什么
  2. 以编程方式执行时捕获控制台中的异常

以下是执行测试运行程序的代码片段:

TestListenerAdapter tla = new TestListenerAdapter();
IMethodInterceptor im = new  TestMethodInterceptor();
TestNG testng = new TestNG();
testng.setTestClasses(new Class[] { TestClass1.class, TestClass2.class});
testng.addListener(tla);
testng.setMethodInterceptor(im);
testng.run(); 

据我所知,没有停止执行的直接规定。

您可能可以使用addListener调用添加2个侦听器。一个实现ITestListener,另一个实现IHookable,这两个例子都可以在testng的网站上找到。ITestListener将为您提供一个方法onTestFailure()。在这里,您可以设置一个值,该值表示发生了故障。在IHookable实现中,您可以检查这个值,然后只调用该方法,否则跳过它

异常打印也可以在onTestFailure方法中处理。

如前一个答案中所述,使用IHookable是通过跳过以下所有方法来模拟完整测试套件取消的好方法。然而,它不会被通知(因此不会取消)配置方法(例如,用@BeforeClass@BeforeMethod注释的方法),并且通常这是进行实际处理的地方

要处理此问题,可以用IInvokedMethodListener替换IHookable,其beforeInvocation方法也将为配置方法激发。如果您想取消其余的测试执行,请在每次调用beforeInvocation时抛出SkipException。

在我的情况下,这成功地取消了所有进一步的处理,而没有对测试结构做出任何假设。

最新更新