【问题标题】:How to stop TestNG executioner when exception occures?发生异常时如何停止TestNG执行?
【发布时间】:2015-03-18 14:34:29
【问题描述】:

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

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

这里是执行测试运行器的代码sn-p:

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(); 

【问题讨论】:

    标签: testng


    【解决方案1】:

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

    您可能可以使用 addListener 调用添加 2 个侦听器。 一个实现ITestListener,另一个实现IHookable,你可以在testng 的site 上找到这两个例子。 ITestListener 会给你一个方法 onTestFailure()。您可以在此处设置一个值,该值将指示出现故障。 在 IHookable 实现中,您可以检查该值,然后才调用该方法,否则跳过它。

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

    【讨论】:

      【解决方案2】:

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

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

      就我而言,这成功地取消了所有进一步的处理,而无需对测试结构做出任何假设。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-29
        • 2014-07-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多