Mark TestNG测试通过

时间:2015-04-03 06:44:53

标签: java automation testng

在我的测试场景中,如果设置了某个标志,我需要跳过剩下的步骤。由于测试套件的运行方式,这里简单的if-else是不够的。所以我抛出一个异常并在IHookable.run()的实现中捕获它以进行一些记录。

现在,即使我在捕获异常后没有重新抛出异常,TestNG也会将测试标记为失败。我在catch块中尝试了Reporter.getCurrentTestResult().setStatus(ITestResult.SUCCESS);Reporter.getCurrentTestResult().setThrowable(null);但似乎没有任何阻止TestNG将测试标记为失败。

关于如何实施此方案的任何其他想法?谢谢你的时间!

3 个答案:

答案 0 :(得分:2)

Gosakas解决方案很棒,或者你可以实现

 public interface ITestListener.

并覆盖方法onTestFailure(ITestResult result),如上所述。每次测试失败后都会调用此方法。像这样的东西可能会起作用

        @Override
        onTestFailure(ITestResult result){
        if(result.getThrowable().getClass().equals(new MyOwnException())){
            result.setStatus(ITestResult.SUCCESS);
       }
      }

答案 1 :(得分:1)

如果您需要跳过TestNG测试,则应该抛出SkipException,这会将测试标记为已跳过。

答案 2 :(得分:1)

您可以编写自己的侦听器来为您执行此操作。我写了一些有用的东西(我不知道这是你正在寻找的东西)。

我的听众:

public class MyResultListener implements ISuiteListener{

    @Override
    public void onStart(ISuite suite) {
    // TODO Auto-generated method stub

    }

    @Override
    public void onFinish(ISuite suite) {
    Map<String,ISuiteResult> resultMap = suite.getResults();
    for(Map.Entry<String, ISuiteResult> ent :resultMap.entrySet())
    {
       ISuiteResult res = ent.getValue();
       IResultMap failedTestMap = res.getTestContext().getFailedTests();
       IResultMap passTestMap = res.getTestContext().getPassedTests();
        for(ITestResult testResult :failedTestMap.getAllResults()){

        if(testResult.getThrowable().getClass().equals(new MyOwnException())){}

           System.out.println("My Own exception thrown");
            failedTestMap.removeResult(testResult);
            passTestMap.addResult(testResult, testResult.getMethod());
        }
        }

    }   
  }

这个监听器将在套件之后运行(这正是我所做的,你也可以实现其他监听器以获得你真正需要的东西。这只是我的版本)。在这里,我将获得失败的测试,看看失败的测试是否会抛出我的自定义异常。在这种情况下,我将从失败的测试中删除该结果,并将其添加到传递集。

我的测试班:

@Listeners(com.paypal.test.sample.testng.MyResultListener.class)
public class SampleTest {


    @Test
    public void test1(){

    Assert.assertTrue(true);

    }

    @Test
    public void test2() throws MyOwnException{

        throw new MyOwnException("Summa");

    }

}


This is how my results look:

PASSED: test1
FAILED: test2
com.paypal.test.sample.testng.MyOwnException: Summa
    at com.paypal.test.sample.testng.SampleTest.test2(SampleTest.java:25)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:84)
    at org.testng.internal.Invoker.invokeMethod(Invoker.java:714)
    at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:901)
    at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1231)
    at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
    at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
    at org.testng.TestRunner.privateRun(TestRunner.java:767)
    at org.testng.TestRunner.run(TestRunner.java:617)
    at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
    at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:329)
    at org.testng.SuiteRunner.privateRun(SuiteRunner.java:291)
    at org.testng.SuiteRunner.run(SuiteRunner.java:240)
    at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
    at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)
    at org.testng.TestNG.runSuitesSequentially(TestNG.java:1224)
    at org.testng.TestNG.runSuitesLocally(TestNG.java:1149)
    at org.testng.TestNG.run(TestNG.java:1057)
    at org.testng.remote.RemoteTestNG.run(RemoteTestNG.java:111)
    at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:204)
    at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:175)


===============================================
    Default test
    Tests run: 2, Failures: 1, Skips: 0
===============================================

My Own exception thrown

===============================================
Default suite
Total tests run: 2, Failures: 0, Skips: 0
===============================================