Have a question?
Message sent Close
View Categories

Rerunning failed tests in TestNG

📄
filename.js
package com.example.listeners;

import org.testng.IRetryAnalyzer;

import org.testng.ITestResult;

public class RetryAnalyzer implements IRetryAnalyzer {

    private int retryCount = 0;

    private static final int maxRetryCount = 2;  // retry up to 2 times

    @Override

    public boolean retry(ITestResult result) {

        if (retryCount < maxRetryCount) {

            retryCount++;

            System.out.println("[Retry] Retrying " + result.getMethod().getMethodName()

                               + " (attempt " + (retryCount + 1) + ")");

            return true;

        }

        return false;

    }

}

📄
filename.js
import org.testng.annotations.Test;

import com.example.listeners.RetryAnalyzer;

public class SomeTest {

  @Test(retryAnalyzer = RetryAnalyzer.class)

  public void flakyTest() {

    // your test code that might intermittently fail

  }

}

📄
filename.js
package com.example.listeners;

import java.lang.reflect.Constructor;

import java.lang.reflect.Method;

import org.testng.IAnnotationTransformer;

import org.testng.annotations.ITestAnnotation;

public class RetryTransformer implements IAnnotationTransformer {

  @Override

  public void transform(ITestAnnotation annotation,

                        Class testClass,

                        Constructor testConstructor,

                        Method testMethod) {

    // only add retry to @Test methods (skip data providers, config methods, etc.)

    if (annotation.getRetryAnalyzer() == null) {

      annotation.setRetryAnalyzer(RetryAnalyzer.class);

    }

  }

}

📄
filename.js
<suite name="SuiteWithRetry">

  <listeners>

    <listener class-name="com.example.listeners.RetryTransformer"/>

  </listeners>

  <test name="AllTests">

    <classes>

      <class name="com.example.tests.SomeTest"/>

      <!-- other test classes... -->

    </classes>

  </test>

</suite>

📄
filename.js
<plugin>

  <artifactId>maven-surefire-plugin</artifactId>

  <version>3.0.0-M5</version>

  <configuration>

    <retryCount>2</retryCount>  <!-- rerun failing tests up to 2 times -->

  </configuration>

</plugin>