如何覆盖TestNG传递或失败结果

时间:2015-05-21 18:25:57

标签: java testng

  • 我正在使用TestNG来运行数据驱动的测试

  • 我的数据是从外部文件中读取的

  • 我有一个重试逻辑,它在同一个类中实际上是一个不同的测试方法,但只重试上一个测试中的失败实体。我控制使用优先级

    Test(dataProvider="customTestDataProvider" , priority = 1)  
    public void testSomething(final ITestContext testContext , final CustomTestDataItem testData) throws CustomTestException{       
        setTestData(testData, testContext);
        performStep1();
        performStep2();
        validateResult();
    }
    
    @Test(dataProvider="customTestDataProvider" , priority = 2) 
    public void testSomethingRetry1(final ITestContext testContext ,final CustomTestDataItem testData) throws CustomTestException{
        testSomething(testContext , testData);
    }
    
    @Test(dataProvider="customTestDataProvider" , priority = 3) 
    public void testSomethingRetry2(final ITestContext testContext ,final CustomTestDataItem testData) throws CustomTestException{
        testSomething(testContext , testData);
    }
    
  • customTestDataProvider知道方法失败的testData项,因此在testSomethingRetry1中只会提供失败的测试数据

  • 如果testSomething中的测试方法失败,则会在testSomethingRetry1中重试,但testNG认为它失败,因为它在testSomething

    中失败了
  • 所以我需要一个自定义逻辑来确定套件是通过还是失败。如何用我已经确定的结果覆盖testNG结果(通过/失败)?

1 个答案:

答案 0 :(得分:1)

我建议使用基本上再次运行失败测试的org.testng.IRetryAnalyzer,而不是重复测试方法。您可以在此处查看一些示例http://seleniumeasy.com/testng-tutorials/execute-only-failed-test-cases-using-iretryanalyzer

但是如果你真的想要覆盖结果,你可以使用监听器并实现获得ITestResult的方法。在此对象中,您可以检查方法类/名称/结果/等。并更改其中一些属性(包括结果)。

http://testng.org/javadocs/org/testng/ITestListener.html http://testng.org/javadocs/org/testng/IInvokedMethodListener.html

或整个测试套件

http://testng.org/javadocs/org/testng/ISuiteListener.html