我正在使用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结果(通过/失败)?
答案 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
或整个测试套件