Search code examples
javatestnglistenersuite

consolidated testresults for multiple testsuites using testng listeners


I have Sanity testsuite testng xml which contains multiple testsuites and I want to get results of Sanity testsuite and display on console.

I tried using IsuiteListener and I am getting results of individual test suites.

Can someone help me in getting consolidated results for all the testsuites running under sanity testsuite?

package utilities;

import java.util.Map;

import org.testng.ISuite;
import org.testng.ISuiteListener;
import org.testng.ISuiteResult;
import org.testng.Reporter;

public class Listener implements ISuiteListener 
{

    @Override
    public void onStart(ISuite arg0) {
        Reporter.log("About to begin executing Suite " + arg0.getName(), true);

    }

    @Override
    public void onFinish(ISuite suite) 
    {
        Map<String,ISuiteResult> results=suite.getResults();
        for(String key: results.keySet())
        {
             ISuiteResult con = results.get(key);

            int totaltestcases=con.getTestContext().getAllTestMethods().length;

        int passtestcases= con.getTestContext().getPassedTests().size();
        int failedtestcases=con.getTestContext().getFailedTests().size();
        int skippedtestcases=con.getTestContext().getSkippedTests().size();
        int percentage=(passtestcases*100)/totaltestcases;
        System.out.println("PASS PERCENTAGE : "+percentage+"%");

        }
    }



}

Below is the Sanity Test Suite xml

<suite name="Sanity Test Suite">
<listeners>

 <listener class-name="utilities.Listener"></listener>

 </listeners>
   <suite-files>
    <suite-file path="TestSuit_01.xml"/>
    <suite-file path="TestSuit_02.xml"/>

</suite-files>
</suite>

Solution

  • You should build an implementation of the TestNG listener org.testng.IReporter which gets executed after all the suites have run to completion and then refer to this listener in your suite xml file via the <listeners> tag.