TestNG通过自定义Listener形式实现用例失败重试

标签形式实现用例失败重试

前面的文章讲解了可以通过标签的形式实现用例失败重试的方法,@Test(retryAnalyzer = MyRetry.class)。

详情可以参考文章:详解TestNG中的用例失败重试和自定义监听器

但是通过@Test标签方式仍然存在一定的问题,即该方法只能左右在类或者方法上,当测试类非常多的时候,需要

在每一个类前都增加标签@Test(retryAnalyzer = MyRetry.class)。

有没有什么全局的方式来搞定这件事儿呢?我们可以通过自定义listener来解决!

自定义Listener形式实现用例失败重试

我们已经通过标签实现了用例失败的重试机制,那么我们就可以写一个listenser来控制标签。TestNG中提供了IAnnotationTransformer来让我们实现这一目的。话不多说,直接上代码

重试代码逻辑的代码实现如下:

import org.testng.IRetryAnalyzer;
import org.testng.ITestResult;
public class MyRetry implements IRetryAnalyzer{
private int retryCount = 0;
private static final int maxRetryCount = 3;//用例失败重新执行3次

@Override

public boolean retry(ITestResult result) {

if (retryCount < maxRetryCount) {

   retryCount++; 
   return true;

    }

   return false;

}

}

自定义Retry 的listener代码实现如下:

import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
import org.testng.IAnnotationTransformer;
import org.testng.annotations.ITestAnnotation;
public class RetryListener implements IAnnotationTransformer {

    @Override

    public void transform(ITestAnnotation testannotation, Class testClass,

        Constructor testConstructor, Method testMethod)    {
        testannotation.setRetryAnalyzer(MyRetry.class);

    }

}

测试类代码如下:

import org.testng.annotations.Test;
import static org.testng.Assert.assertEquals;
public class Case1 {

@Test

public void f1() {

    System.out.println("f11");
    assertEquals("a","b");

  }

  @Test
public void f2() {

    System.out.println("f21");
    assertEquals("a","a");

}

}

设置testng的配置文件,添加自定义的RetryListener

运行结果如下,可以看到重试了3次。

备注:如果在一个case中,方法中有标签重试机制代码如下(设置重试为1),那该如何处理呢?

@Test(retryAnalyzer = MyRetry2.class)
public void f1() {

    System.out.println("f11");
    assertEquals("a","b");

  }

我们运行代码会发现以testng的配置文件中的添加自定义RetryListener中使用的MyRetry.class为主。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
TestNG支持测试用例的依赖关系,即一个测试方法依赖于另外一个测试方法的执行结果。如果一个测试方法依赖于另外一个测试方法,那么在运行测试套件时,TestNG会先运行被依赖的测试方法,如果该方法执行成功,再运行依赖该方法的测试方法。这样能够确保测试方法的执行顺序和依赖关系。 TestNG提供了两种方式来实现测试用例的依赖: 1. 通过dependsOnMethods属性实现依赖关系 在@Test注解中使用dependsOnMethods属性来指定被依赖的测试方法。例如: ``` @Test public void loginTest() { //登录测试逻辑 } @Test(dependsOnMethods = {"loginTest"}) public void searchTest() { //搜索测试逻辑 } ``` 在上面的例子中,searchTest方法依赖于loginTest方法,因此在运行测试套件时,TestNG会先运行loginTest方法,如果该方法执行成功,再运行searchTest方法。 2. 通过dependsOnGroups属性实现依赖关系 在@Test注解中使用dependsOnGroups属性来指定被依赖的测试组。例如: ``` @Test(groups = {"login"}) public void loginTest() { //登录测试逻辑 } @Test(groups = {"search"}, dependsOnGroups = {"login"}) public void searchTest() { //搜索测试逻辑 } ``` 在上面的例子中,searchTest方法依赖于一个名为“login”的测试组,而loginTest方法属于该测试组。因此在运行测试套件时,TestNG会先运行loginTest方法,如果该方法执行成功,再运行searchTest方法。 使用dependsOnMethods或dependsOnGroups属性可以方便地实现测试用例的依赖关系,但是需要注意依赖关系的正确性和可维护性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

测试开发Kevin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值