Sunday, 16 August 2015

TestNG-XSLT Report Using Maven


An effective communication is the key to success. The knowledge and skills you acquire are of no use to others if it is not conveyed well. You will have to be able to gather information, organize it, and present it in a logical and concise form to convey the exact meaning you intend.

In the same way Reporting is the most important and critical part of any automated test execution, as it helps users and stakeholders to understand the exact result of the execution, reasons for the failures and also helps to determine the next steps.

As we have already seen TestNG default report in previous post (TestNg Link), so in this post we will focus on how to make reporting more presentable using XSLT. XSLT or Extensible Stylesheet Language Transformations is a language for transforming XML documents into other XML or other formats. It is intended to perform complex styling operations, like generation of tables of contents and indexes.

In this post we will see how to implement XSLT report using TestNG and Maven. Following are the tools being used for this post:

Maven: A Build Management Tool

TestNG: A Test Automation Framework

Selenium WebDriver: A Web Test Automation Tool

Setup all these tools in choice of your IDE; in this post we are using Eclipse IDE. Now, create a maven project and open the auto-generated pom.xml. Edit your pom.xml as written below:

<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
         http://maven.apache.org/xsd/maven-4.0.0.xsd">
       
       <modelVersion>4.0.0</modelVersion>

       <groupId>com.blogger</groupId>
       <artifactId>xsltreport</artifactId>
       <version>0.0.1-SNAPSHOT</version>
       <packaging>jar</packaging>

       <name>xsltreport</name>
       <url>http://maven.apache.org</url>

       <properties>
              <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
       </properties>

       <dependencies>
              <dependency>
                     <groupId>org.seleniumhq.selenium</groupId>
                     <artifactId>selenium-java</artifactId>
                     <version>2.45.0</version>
              </dependency>


              <dependency>
                     <groupId>org.testng</groupId>
                     <artifactId>testng</artifactId>
                     <version>6.8.21</version>
              </dependency>

       </dependencies>

       <build>
              <sourceDirectory>src/test/java</sourceDirectory>
              <plugins>
                     <plugin>
                           <groupId>org.apache.maven.plugins</groupId>
                           <artifactId>maven-surefire-plugin</artifactId>
                           <version>2.14.1</version>
                           <configuration>
                                  <testFailureIgnore>true</testFailureIgnore>
                                  <skipTests>false</skipTests>
                                  <suiteXmlFiles>
                                         <suiteXmlFile>testng.xml</suiteXmlFile>
                                  </suiteXmlFiles>
                           </configuration>
                     </plugin>
                     <plugin>
                           <artifactId>maven-compiler-plugin</artifactId>
                           <configuration>
                                  <encoding>iso-8859-1</encoding>
                                  <source>1.6</source>
                                  <target>1.6</target>
                           </configuration>
                     </plugin>
              </plugins>
       </build>

       <reporting>
              <plugins>
                     <!-- TestNG-xslt related configuration. -->
                     <plugin>
                           <groupId>org.reportyng</groupId>
                           <artifactId>reporty-ng</artifactId>
                           <version>1.2</version>
                           <configuration>
                                  <!-- Output directory for the testng xslt report -->
                                  <outputDir>/target/testng-xslt-report</outputDir>
                                  <sortTestCaseLinks>true</sortTestCaseLinks>
                                                        <testDetailsFilter>FAIL,SKIP,PASS,CONF,BY_CLASS</testDetailsFilter>
                                  <showRuntimeTotals>true</showRuntimeTotals>
                           </configuration>
                     </plugin>
              </plugins>
       </reporting>

       <pluginRepositories>
              <pluginRepository>
                     <id>reporty-ng</id>
                     <url>https://github.com/cosminaru/reporty-      ng/raw/master/dist/maven</url>
              </pluginRepository>
       </pluginRepositories>

</project>

In the above pom.xml we have added following components:

Selenium and TestNG Maven dependencies

build block containing Surefire plugin and maven-compiler plugin.

reporting block containing configuration of Testng-XSLT report.

pluginrepository block containing location of the reporty-ng.

Now we are done with the pom.xml configurations and it’s time to move further. Following the structure of the project created for this post:



As you can see we have two test classes along with three more xml files except pom.xml. In which testng.xml is being used to define the suite files and suiteA.xml and suiteB.xml are separate files for each test classes. We have separated these two test classes in different xml files just to show how the report will look like when we have multiple test suites.

suiteA.xml








suiteB.xml











testng.xml













Now we are ready to execute to the test and generate TestNG-XSLT report. To execute the test we will use maven command.

Navigate to workspace directory where pom.xml is present and run the following command:

mvn clean test -fae site org.reportyng:reporty-ng:1.2:reporting

After successful completion of the execution you will see BUILD SUCCESS information on command prompt.










Now go through the reporting block of pom.xml and see the mentioned path for XSLT report. In our case it is: <outputDir>/target/testng-xslt-report</outputDir>


Navigate to the mentioned directory and you will see the index.html file.

Index.html


















In this view you can see complete summary of passed, failed and skipped tests. The pie chart shows the percentage of all passed, failed and skipped tests. With this view a user can easily understand the status of the build and can decide the further steps to take.

For detailed status of the different suites, click on each of the link from the sidebar.

In sanity suite all the test cases have been passed.












In Regression suite one test failed, one passed and one skipped.











Please like and comment if you liked the post.  Stay tuned to see more posts.