Wednesday, December 10, 2014

TestNg_Reports

package customreports;

import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;

import org.testng.IReporter;
import org.testng.IResultMap;
import org.testng.ISuite;
import org.testng.ISuiteResult;
import org.testng.ITestNGMethod;
import org.testng.ITestResult;
import org.testng.xml.XmlSuite;

public class CustomReporter implements IReporter{

@Override
public void generateReport(List<XmlSuite> xmlSuites, List<ISuite> suites,
String outputDirectory) {

System.out.println("***********INSIDE CUSTOM REPORTER**************");
for(int suiteNum=0;suiteNum<suites.size();suiteNum++){
ISuite currentTestSuite = suites.get(suiteNum);
System.out.println("Test Suite Name -> "+ currentTestSuite.getName());
//System.out.println(currentTestSuite.getResults());
Map<String, ISuiteResult>  suiteResults = currentTestSuite.getResults();

Set<String> suiteResultKeys = suiteResults.keySet();
Iterator<String> suiteResultKeysIter= suiteResultKeys.iterator();

while(suiteResultKeysIter.hasNext()){
String testName = suiteResultKeysIter.next();
System.out.println("Test Name -> "+testName);
ISuiteResult testResult = suiteResults.get(testName);

IResultMap failedTests = testResult.getTestContext().getFailedTests();
IResultMap passedTests = testResult.getTestContext().getPassedTests();
IResultMap skippedTests= testResult.getTestContext().getSkippedTests();
ITestNGMethod[]  allTests = testResult.getTestContext().getAllTestMethods();
System.out.println("Test Method Names ->");

for(int testNum=0;testNum<allTests.length;testNum++){

if(failedTests.getAllMethods().contains(allTests[testNum])){
System.out.println(allTests[testNum].getMethodName() +" -- FAILED");
Collection<ITestNGMethod> allFailedMethods= failedTests.getAllMethods();
Iterator<ITestNGMethod> allFailedMethodsIter = allFailedMethods.iterator();

while(allFailedMethodsIter.hasNext()){
ITestNGMethod meth = allFailedMethodsIter.next();
if(allTests[testNum].getMethodName().equals(meth.getMethodName())){
Set<ITestResult> failures = failedTests.getResults(meth);
Iterator<ITestResult> failuresIter= failures.iterator();
while(failuresIter.hasNext()){
System.out.println("Reason = "+failuresIter.next().getThrowable().getMessage());
}
}

}

// reason
}else if(passedTests.getAllMethods().contains(allTests[testNum])){
System.out.println(allTests[testNum].getMethodName() +" -- PASS");
}else if(skippedTests.getAllMethods().contains(allTests[testNum])){
System.out.println(allTests[testNum].getMethodName() +" -- SKIPPED");
// reason
Collection<ITestNGMethod> allSkippedMethods= skippedTests.getAllMethods();
Iterator<ITestNGMethod> allSkippedMethodsIter = allSkippedMethods.iterator();

while(allSkippedMethodsIter.hasNext()){
ITestNGMethod meth = allSkippedMethodsIter.next();
if(allTests[testNum].getMethodName().equals(meth.getMethodName())){
Set<ITestResult> skips = skippedTests.getResults(meth);
Iterator<ITestResult> skipIter= skips.iterator();
while(skipIter.hasNext()){
System.out.println("Reason = "+skipIter.next().getThrowable().getMessage());
}
}

}
}



}


}


}
}

}
=====================================================

<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Suite A">




<test name="Test A1">
    <classes>
        <class name="testSuiteA.TestA1" ></class>  
    </classes>
</test>

<test name="Test A2">
    <classes>
        <class name="testSuiteA.TestA2" ></class>  
    </classes>
</test>


</suite>

====================================================

<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Suite B">


<test name="Test B1">
    <classes>
        <class name="testSuiteB.TestB1" ></class>  
    </classes>
</test>

<test name="Test B2">
    <classes>
        <class name="testSuiteB.TestB2" ></class>  
    </classes>
</test>


</suite>

======================================================

<suite name="My suite">
<listeners>
    <listener class-name="customreports.CustomReporter" />
</listeners>
  <suite-files>
 
   <suite-file path="./Suite_A.xml" />
    <suite-file path="./Suite_B.xml" />
  </suite-files>
</suite>
====================================================




package testSuiteA;

import org.testng.Assert;
import org.testng.SkipException;
import org.testng.annotations.Test;

public class TestA1 {

@Test
public void testA1_1(){
throw new SkipException("Skipping the test");
}
@Test
public void testA1_2(){
}
@Test
public void testA1_3(){
Assert.fail("failed test case ");
}
}
===================================

package testSuiteA;

import org.testng.Assert;
import org.testng.annotations.Test;

public class TestA2 {

@Test
public void testA2_1(){
}
@Test
public void testA2_2(){
Assert.fail("failed test case ");
}
@Test
public void testA2_3(){
}
}
=====================================

package testSuiteB;

import org.testng.Assert;
import org.testng.annotations.Test;

public class TestB1 {

@Test
public void testB1_1(){
}
@Test
public void testB1_2(){
}
@Test
public void testB1_3(){
Assert.fail("failed test case ");
}
}
=====================================

package testSuiteB;

import org.testng.Assert;
import org.testng.annotations.Test;

public class TestB2 {

@Test
public void testB2_1(){
}
@Test
public void testB2_2(){
Assert.fail("failed test case ");
}
@Test
public void testB2_3(){
}
}