首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法使用IRetryAnalyzer运行失败的测试用例

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

Stack Overflow用户
提问于 2020-04-28 23:52:22
回答 2查看 213关注 0票数 0

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

代码语言:javascript
复制
    @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次(这很好)。在此之后,比如说,如果第6次测试失败了,那么第6次测试只运行一次,而不是3次。我原以为第六次考试会在失败之前跑3次。

不知道我在这里做错了什么。

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

任何帮助都是非常感谢的。我正在使用最新版本的TestNG。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-05-06 06:54:11

我终于发现了。不确定这是否是TestNG问题。我所做的是每次测试通过时(即使在第2轮或第3轮之后)重新设置计数器,如下所示

代码语言:javascript
复制
@AfterMethod(alwaysRun = true)
    public void AfterTest(ITestResult result) throws IOException {
    if(result.getStatus() == ITestResult.FAILURE) {         

    }
    else if(result.getStatus() == ITestResult.SUCCESS) {

        Retry retry = new Retry();
        retry.resetCounter();
    }       
    else if(result.getStatus() == ITestResult.SKIP) {         
    }

    }

希望这对某些人有用。再次感谢。看上去像是黑客但很有效。

票数 0
EN

Stack Overflow用户

发布于 2020-04-30 05:21:32

我相信@Override注释在您的Retry类中的retry(ITestResult result)方法上面丢失了。

它应该是:

代码语言:javascript
复制
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;
   }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61491910

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档