Personalizza, PDF e e-mail TestNG Rapporti in Selenium webdriver

Prima di esaminare qualsiasi altra cosa, comprendiamo innanzitutto:

Perchรฉ abbiamo bisogno di reporting?

Quando stiamo usando Selenium o qualsiasi altro strumento di automazione, stiamo eseguendo operazioni sull'applicazione web. Ma il nostro scopo dellโ€™automazione non รจ solo quello di esercitare lโ€™applicazione sotto test. Noi, come tester di automazione, dovremmo testare l'applicazione, trovare bug e segnalarli al team di sviluppo o al management superiore. Qui la rendicontazione acquista importanza per il software Collaudo processi

TestNG Reportistica

TestNG la libreria fornisce una funzionalitร  di reporting molto utile. Dopo l'esecuzione, Test genererร  una cartella di output di test nella radice del progetto. Questa cartella contiene due tipi di report:

Indice.html: Questo รจ il report completo dell'esecuzione corrente che contiene informazioni come errore, gruppi, ora, log del reporter, file XML di test.

TestNG Reportistica

inviabile-per-email-report.html: Questo รจ il rapporto riepilogativo dell'esecuzione corrente del test che contiene Test Case messaggio evidenziato in verde (per casi di test superati) e rosso (per casi di test falliti).

TestNG Reportistica

Come personalizzare TestNG Relazione

TestNG il reporting รจ abbastanza utile, ma a volte abbiamo bisogno di meno dati nei report o vogliamo visualizzare i report in un altro formato come PDF, Excel, ecc. o vogliamo modificare il layout del report.

Ci possono essere due modi in cui possiamo personalizzare TestNG rapporto

  • Utilizzo dell'interfaccia ITestListener:
  • Utilizzando l'interfaccia IReporter:

Personalizzare TestNG Relazione

Interfaccia ITestListener

Utilizziamo questa interfaccia quando dobbiamo personalizzare il report in tempo reale. In altre parole, se stiamo eseguendo un gruppo di test case in una suite TetNG e vogliamo ottenere il report di ciascun test case, dopo ciascun test case dobbiamo implementare l'interfaccia ITestListener. Questa interfaccia sovrascriverร  il metodo onTestFailure, onTestStart, onTestSkipped per inviare lo stato corretto del test case corrente.

Interfaccia ITestListener

Ecco i passaggi che seguiremo

  • Crea una classe, diciamo realeGuru99Report e implementa iTestListener al suo interno.
  • Implementare i metodi di iTestListener
  • Crea il metodo di test e aggiungi RealGuru99La classe Report funge da listener nella classe Test Method.

Interfaccia ITestListener

Code Esempio

RealGuru99TimeReport.java รจ la classe di reporting in tempo reale. Implementerร  l'interfaccia ITestListener per il reporting.

package testNGReport.realTimeReport;

import org.testng.ITestContext;

import org.testng.ITestListener;

import org.testng.ITestResult;

public class RealGuru99TimeReport implements ITestListener{

    @Override

    public void onStart(ITestContext arg0) {

         System.out.println("Start Of Execution(TEST)->"+arg0.getName());

    }

    @Override

    public void onTestStart(ITestResult arg0) {

        System.out.println("Test Started->"+arg0.getName());

    }

    @Override

    public void onTestSuccess(ITestResult arg0) {

        System.out.println("Test Pass->"+arg0.getName());

    }

    @Override

    public void onTestFailure(ITestResult arg0) {

        System.out.println("Test Failed->"+arg0.getName());

    }

    @Override

    public void onTestSkipped(ITestResult arg0) {

        System.out.println("Test Skipped->"+arg0.getName());

    }

    @Override

    public void onFinish(ITestContext arg0) {

System.out.println("END Of Execution(TEST)->"+arg0.getName());

    }

    @Override

    public void onTestFailedButWithinSuccessPercentage(ITestResult arg0) {

        // TODO Auto-generated method stub

        

    }

    

}

TestGuru99RealReport.java รจ il caso di test per il report reale

package testNGReport.realTimeReport;

import org.testng.Assert;

import org.testng.annotations.Listeners;

import org.testng.annotations.Test;

@Listeners(RealGuru99TimeReport.class)

public class TestGuru99RealReport {

    @Test

    public void testRealReportOne(){

        Assert.assertTrue(true);

    }

    

    @Test

    public void testRealReportTwo(){

        Assert.assertTrue(false);

    }

    //Test case depends on failed testcase= testRealReportTwo

    @Test(dependsOnMethods="testRealReportTwo")

    public void testRealReportThree(){

        

    }

}

L'output sarร  simile a:

Interfaccia ITestListener

Interfaccia IReporter

Se vogliamo personalizzare il rapporto di prova finale generato da TestNG, dobbiamo implementare l'interfaccia IReporter. Questa interfaccia dispone di un solo metodo per implementare generateReport. Questo metodo contiene tutte le informazioni sull'esecuzione completa del test nell'elenco e possiamo generare il report utilizzandolo.

Code Esempio

Guru99Reporter.java รจ il file utilizzato per personalizzare il report

package testNGReport.iReporterReport;

import java.util.Collection;

import java.util.Date;

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.ITestContext;

import org.testng.ITestNGMethod;

import org.testng.xml.XmlSuite;

public class Guru99Reporter implements IReporter{

    @Override

    public void generateReport(List<XmlSuite> arg0, List<ISuite> arg1,

            String outputDirectory) {

        // Second parameter of this method ISuite will contain all the suite executed.

        for (ISuite iSuite : arg1) {

         //Get a map of result of a single suite at a time

            Map<String,ISuiteResult> results =    iSuite.getResults();

         //Get the key of the result map

            Set<String> keys = results.keySet();

        //Go to each map value one by one

            for (String key : keys) {

             //The Context object of current result

            ITestContext context = results.get(key).getTestContext();

            //Print Suite detail in Console

             System.out.println("Suite Name->"+context.getName()

                    + "::Report output Ditectory->"+context.getOutputDirectory()

                     +"::Suite Name->"+ context.getSuite().getName()

                     +"::Start Date Time for execution->"+context.getStartDate()

                     +"::End Date Time for execution->"+context.getEndDate());

            

             //Get Map for only failed test cases

            IResultMap resultMap = context.getFailedTests();

            //Get method detail of failed test cases

            Collection<ITestNGMethod> failedMethods = resultMap.getAllMethods();

            //Loop one by one in all failed methods

            System.out.println("--------FAILED TEST CASE---------");

            for (ITestNGMethod iTestNGMethod : failedMethods) {

                //Print failed test cases detail

                System.out.println("TESTCASE NAME->"+iTestNGMethod.getMethodName()

                        +"\nDescription->"+iTestNGMethod.getDescription()

                        +"\nPriority->"+iTestNGMethod.getPriority()

                        +"\n:Date->"+new Date(iTestNGMethod.getDate()));

                

            }

        }

        }

        

    }

}

TestGuru99ForReporter.java รจ una demo per la creazione di report personalizzati.

package testNGReport.iReporterReport;

import org.testng.Assert;

import org.testng.annotations.Listeners;

import org.testng.annotations.Test;

//Add listener to listen report and write it when testcas finished

@Listeners(value=Guru99Reporter.class)

public class TestGuru99ForReporter {

    @Test(priority=0,description="testReporterOne")

    public void testReporterOne(){

        //Pass test case

        Assert.assertTrue(true);

    }

    

    @Test(priority=1,description="testReporterTwo")

    public void testReporterTwo(){

        //Fail test case

        Assert.assertTrue(false);

    }

}

L'output sarร  come-

Interfaccia IReporter

PDF ed e-mail dei report

L'implementazione del report di cui sopra รจ abbastanza semplice e chiara per iniziare con la personalizzazione del report.

Ma in un ambiente aziendale sarร  necessario creare report altamente personalizzati. Ecco lo scenario con cui avremo a che fare

  1. Crea report personalizzato in formato PDF
  2. Acquisisci screenshot SOLO sugli errori. Collegamento agli screenshot in PDF
  3. Invia email del PDF

Il rapporto PDF si presenta cosรฌ

PDF ed e-mail dei report

Per creare un report in formato PDF abbiamo bisogno di un file Java API IText. Scaricalo Qui. . Esiste un'altra classe listener personalizzata che sta effettivamente implementando questo jar IText e creando un report PDF per noi. Scaricalo Qui.

La figura sopra mostra il formato predefinito del report PDF generato. Puoi personalizzarlo

Ecco come affronteremo la questione

Passaggio 1) Crea una classe base

Passaggio 2) Personalizza JypersionListerner.Java (Codice di creazione PDF)

Passaggio 3) Creare un testGuru99PDFEmail.java che eseguirร  i casi di test, creerร  PDF

Passaggio 4) Aggiungere il codice al testGuru99PDFEmail.java per inviare il report PDF via email

Diamo un'occhiata a questi passaggi

Passaggio 1) Crea classe base

Questa classe base ha funzioni per creare WebDriver e acquisire screenshot

package PDFEmail;

import java.io.File;

import org.apache.commons.io.FileUtils;

import org.openqa.selenium.OutputType;

import org.openqa.selenium.TakesScreenshot;

import org.openqa.selenium.WebDriver;

import org.openqa.selenium.firefox.FirefoxDriver;

public class BaseClass {

    static WebDriver driver;

    public static WebDriver getDriver(){

        if(driver==null){


        WebDriver driver ;
    	System.setProperty("webdriver.gecko.driver","C:\\geckodriver.exe");
    	driver = new FirefoxDriver();


        }

        return driver;

    }


    /**

     * This function will take screenshot

     * @param webdriver

     * @param fileWithPath

     * @throws Exception

     */

    public static void takeSnapShot(WebDriver webdriver,String fileWithPath) throws Exception{

        //Convert web driver object to TakeScreenshot

        TakesScreenshot scrShot =((TakesScreenshot)webdriver);

        //Call getScreenshotAs method to create image file

                File SrcFile=scrShot.getScreenshotAs(OutputType.FILE);

            //Move image file to new destination

                File DestFile=new File(fileWithPath);

                //Copy file at destination

                FileUtils.copyFile(SrcFile, DestFile);

            

    }

}

Passaggio 2) Personalizza JypersionListener.java

Resteremo fedeli al formato di report predefinito. Ma faremo 2 personalizzazioni

  • Aggiunta di codice per indicare a JypersionListener di acquisire screenshot in caso di errore
  • Allegando il link dello screenshot prendi il report in PDF

PDF ed e-mail dei report

Aggiungi il codice per allegare lo screenshot al report PDF

PDF ed e-mail dei report

Passaggio 3) Creare un testGuru99PDFEmail.java che eseguirร  i casi di test, creerร  PDF

  • Qui aggiungeremo JyperionListener.class come ascoltatore
  • Eseguiremo 3 casi di test.
  • Utilizzando Assert.assertTrue falliremo 2 casi di test superandone solo uno.
  • Verranno acquisiti screenshot per i casi di test falliti solo secondo le nostre personalizzazioni
package PDFEmail;

import java.util.Properties;

import javax.activation.DataHandler;

import javax.activation.DataSource;

import javax.activation.FileDataSource;

import javax.mail.BodyPart;

import javax.mail.Message;

import javax.mail.MessagingException;

import javax.mail.Multipart;

import javax.mail.Session;

import javax.mail.Transport;

import javax.mail.internet.AddressException;

import javax.mail.internet.InternetAddress;

import javax.mail.internet.MimeBodyPart;

import javax.mail.internet.MimeMessage;

import javax.mail.internet.MimeMultipart;

import org.openqa.selenium.WebDriver;

import org.testng.Assert;

import org.testng.annotations.AfterSuite;

import org.testng.annotations.Listeners;

import org.testng.annotations.Test;

import reporter.JyperionListener;

//Add listener for pdf report generation

@Listeners(JyperionListener.class)

public class TestGuru99PDFReport extends BaseClass {

    WebDriver driver;

    //Testcase failed so screen shot generate

    @Test

    public void testPDFReportOne(){

        driver = BaseClass.getDriver();

        driver.get("http://google.com");

        Assert.assertTrue(false);

    }

    

    //Testcase failed so screen shot generate

    @Test

    public void testPDFReporTwo(){

        driver = BaseClass.getDriver();

        driver.get("http:/guru99.com");

        Assert.assertTrue(false);

    }

    

    //Test test case will be pass, so no screen shot on it

    @Test

    public void testPDFReportThree(){

        driver = BaseClass.getDriver();

        driver.get("https://demo.guru99.com");

        Assert.assertTrue(true);

    }

Passaggio 4) Aggiungere il codice al testGuru99PDFEmail.java per inviare il report PDF via email

  • Utilizzeremo l'annotazione @AfterSuite per inviare via email il report PDF
  • Invieremo email utilizzando Gmail
  • Per abilitare la posta elettronica, รจ necessario importare molti file di libreria come mail.jar, pop3.jar, smptp.jar, ecc.
  • Prima di eseguire questa operazione, inserisci l'indirizzo email del mittente e del destinatario e la password.
 //After complete execution send pdf report by email

    @AfterSuite

    public void tearDown(){

        sendPDFReportByGMail("FROM@gmail.com", "password", "TO@gmail.com", "PDF Report", "");

        }

    

    /**

     * Send email using java

     * @param from

     * @param pass

     * @param to

     * @param subject

     * @param body

     */

    private static void sendPDFReportByGMail(String from, String pass, String to, String subject, String body) {

Properties props = System.getProperties();

String host = "smtp.gmail.com";

props.put("mail.smtp.starttls.enable", "true");

props.put("mail.smtp.host", host);

props.put("mail.smtp.user", from);

props.put("mail.smtp.password", pass);

props.put("mail.smtp.port", "587");

props.put("mail.smtp.auth", "true");

Session session = Session.getDefaultInstance(props);

MimeMessage message = new MimeMessage(session);

try {

    //Set from address

message.setFrom(new InternetAddress(from));

message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));

//Set subject

message.setSubject(subject);

message.setText(body);

BodyPart objMessageBodyPart = new MimeBodyPart();

objMessageBodyPart.setText("Please Find The Attached Report File!");

Multipart multipart = new MimeMultipart();

multipart.addBodyPart(objMessageBodyPart);

objMessageBodyPart = new MimeBodyPart();

//Set path to the pdf report file

String filename = System.getProperty("user.dir")+"\\Default test.pdf";

//Create data source to attach the file in mail

DataSource source = new FileDataSource(filename);

objMessageBodyPart.setDataHandler(new DataHandler(source));

objMessageBodyPart.setFileName(filename);

multipart.addBodyPart(objMessageBodyPart);

message.setContent(multipart);

Transport transport = session.getTransport("smtp");

transport.connect(host, from, pass);

transport.sendMessage(message, message.getAllRecipients());

transport.close();

}

catch (AddressException ae) {

ae.printStackTrace();

}

catch (MessagingException me) {

me.printStackTrace();

}

}

}

Scarica qui il progetto completo

Nota: quando si fa clic sul collegamento della schermata in pdf, viene visualizzata la finestra di dialogo di sicurezza. Dobbiamo consentire a questa finestra di dialogo di aprire il pdf.

PDF ed e-mail dei report

L'email cosรฌ generata apparirร  cosรฌ

PDF ed e-mail dei report

Sintesi

  • TestNG ha una capacitร  di reporting incorporata al suo interno.
  • Dopo un'esecuzione completa dei casi di test, TestNG genera una cartella di output di test nella radice del progetto.
  • Nella cartella test-output sono presenti due report principali: index.html e emailable-report.html.
  • Personalizzare TestNG report dobbiamo implementare due interfacce, ITestListener e IReporter.
  • Se abbiamo bisogno di ottenere un report tra un'esecuzione e l'altra, abbiamo bisogno di ITestListener.
  • Per creare un report finale dopo l'esecuzione completa, dobbiamo implementare IReporter.
  • Facendo lo screenshot, in Selenium WebDriver, dobbiamo digitare cast WebDriver nell'interfaccia TakesScreenShot.
  • Per generare report PDF dobbiamo aggiungere il jar IText nel progetto.

Scarica la Selenium File di progetto per la demo in questo tutorial

Riassumi questo post con: