无法使用IRetryAnalyzer运行失败的测试用例

问题描述 投票:1回答:1

我有一个完全由数据驱动的测试用例。我的目标是重新运行至少再次失败的测试。我在这里面临的问题是,如果重试计数设置为3,并且我以以下方式进行了数据驱动的测试,

    @Test(dataProvider="PositiveScenarios",groups= "smoke",retryAnalyzer = utils.Retry.class)
    public void positiveScenariosTest(LinkedHashMap<String, String> data) throws InterruptedException {
    }

And the Retry class is like below

    package utils;

    import org.testng.IRetryAnalyzer;
    import org.testng.ITestResult;

    public class Retry  implements IRetryAnalyzer{

    int counter = 1;
    int retryMaxLimit = 3;

     public boolean retry(ITestResult result) {
    if (counter < retryMaxLimit) {
            System.out.println("Going to retry test case: " + result.getMethod() + ", " + (retryMaxLimit - counter + 1) + " out of " + retryMaxLimit);
            counter++;
            return true;
        }
        return false;
    }
}

假设我有10个测试。如果第4次测试失败,则第4次测试将重试3次(很好)。在此之后,例如,如果第六次测试失败,则第六次测试仅运行一次,而不运行3次。我期望第六次测试在失败之前可以运行3次。

不确定我在做什么错。

我在这里没有任何特定的TestNG侦听器(如测试失败)我需要一个吗?如果是这样,第一次测试失败如何运行3次?是否有我缺少的初始化程序。

非常感谢您的帮助。我正在使用最新版本的TestNG。

java selenium testng testng-dataprovider
1个回答
0
投票

我相信@Override类中的retry(ITestResult result)方法上方缺少Retry批注。它应该像:

package utils;

import org.testng.IRetryAnalyzer;
import org.testng.ITestResult;

public class Retry  implements IRetryAnalyzer{

int counter = 1;
int retryMaxLimit = 3;

@Override
public boolean retry(ITestResult result) {
if (counter < retryMaxLimit) {
       System.out.println("Going to retry test case: " + result.getMethod() + ", " + (retryMaxLimit - counter + 1) + " out of " + retryMaxLimit);
       counter++;
       return true;
       }
   return false;
   }
}
© www.soinside.com 2019 - 2024. All rights reserved.