We are using TestNG
framework to manage and execute UI Tests. UI Tests might failed due to
different reasons like connection timed out/browser hang/Network Problem...etc.
This kind of issues is not related to Application under Test. In this case, we
should re run the tests once again.
Example:
1| Assume you have a class
file with 10 Methods [@Test]
2| Lets say one got failed
due to Network issue
3| The class file,
RetryAnalyzer will make the failed test-case to re-run with desired count; But,
it display errors for all the test failures during re-run. [Explained in this
post]
4| you are ought to add a
Listener class, RetryTestListener; it will print the failure only once.
5| If the test got passed in
the final count, failure exception won't be thrown in the console.
Test Class
@BeforeTest
public void setUp()
{
System.out.println("This
is Setup Method");
}
@Test(retryAnalyzer=RetryAnalyzer.class)
public void test01() throws
Exception
{
// Assert.fail();
Assert.assertEquals("Failed",
"Passed");
}
RetryAnalyzer.java
import
org.apache.log4j.Logger;
import
org.apache.log4j.PropertyConfigurator;
import
org.testng.IRetryAnalyzer;
import
org.testng.ITestResult;
public class RetryAnalyzer
implements IRetryAnalyzer {
private int count = 0;
private int maxCount = 4; //
set your count to re-run test
protected Logger log;
private static Logger
testbaseLog;
static {
PropertyConfigurator.configure("test-config/log4j.properties");
testbaseLog =
Logger.getLogger("TestclassName");
}
public RetryAnalyzer()
{
testbaseLog.trace( "
ModeledRetryAnalyzer constructor " + this.getClass().getName() );
log =
Logger.getLogger("TestclassName");
}
@Override
public boolean
retry(ITestResult result) {
testbaseLog.trace("running retry logic
for '"
+ result.getName()
+ "' on class " +
this.getClass().getName() );
if(count < maxCount) {
count++;
return true;
}
return false;
}
}
The Test Class is having one test method with RetryAnalyzer class
which will invoke RetryAnalyzer whenever the test fails and RetryAnalyzer class re executes the same test
method automatically.