【问题标题】:How to override TestNG pass or fail result如何覆盖 TestNG 通过或失败结果
【发布时间】:2015-08-03 14:00:05
【问题描述】:
  • 我正在使用 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 结果(通过/失败)?

【问题讨论】:

    标签: java testng


    【解决方案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

    【讨论】:

    • 所以重试逻辑有效,但测试仍然标记为失败
    • 是的,但这取决于您的预期行为,例如如果一个测试运行 3 次,其中两个失败,一个成功,则在测试上下文中将是所有这些运行。所以你可以在org.testng.TestListenerAdapter#onTestSuccess / org.testng.TestListenerAdapter#onTestFailure / etc. 中实现一些额外的逻辑,或者在org.testng.ISuiteListener#onFinish 中处理你想要的行为的所有测试之后。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-10
    • 1970-01-01
    • 1970-01-01
    • 2021-06-26
    • 2023-04-09
    相关资源
    最近更新 更多