Personalizați, PDF și e-mail TestNG Rapoarte în Selenium webdriver

Înainte de a ne uita la altceva, să înțelegem mai întâi -

De ce avem nevoie de raportare?

Când folosim Selenium sau orice alt instrument de automatizare, efectuăm operațiuni pe aplicația web. Dar scopul nostru de automatizare nu este doar să exercităm aplicația în curs de testare. Noi, în calitate de tester de automatizare, trebuie să testăm aplicația, să găsim erori și să o raportăm echipei de dezvoltare sau conducerii superioare. Aici raportarea capătă importanță pentru software Testarea proces

TestNG Raportarea

TestNG biblioteca oferă o funcție de raportare foarte utilă. După execuție, Testng va genera un folder de ieșire de testare la rădăcina proiectului. Acest folder conține două tipuri de rapoarte -

index.html: Acesta este raportul complet al execuției curente, care conține informații precum o eroare, grupuri, timp, jurnalele de reporter, testarea fișierelor XML.

TestNG Raportarea

emailable-report.html: Acesta este raportul rezumat al executării testului curent care conține Caz de testare mesajul în verde (pentru cazurile de testare cu succes) și roșu (pentru cazurile de testare nereușite) evidențiază.

TestNG Raportarea

Cum să personalizezi TestNG Raport

TestNG raportarea este destul de utilă, dar totuși, uneori avem nevoie de mai puține date în rapoarte sau vrem să afișăm rapoarte în alt format, cum ar fi pdf, excel etc. sau vrem să schimbăm aspectul raportului.

Pot exista două moduri prin care putem personaliza TestNG raportează

  • Utilizarea interfeței ITestListener:
  • Utilizarea interfeței IReporter:

Personalizați-vă TestNG Raport

Interfața ITestListener

Folosim această interfață atunci când trebuie să personalizăm raportul în timp real. Cu alte cuvinte, dacă executăm o mulțime de cazuri de testare într-o suită TetNG și dorim să obținem raportul fiecărui caz de testare, atunci după fiecare caz de testare trebuie să implementăm interfața ITestListener. Această interfață va suprascrie metoda onTestFailure, onTestStart, onTestSkipped pentru a trimite starea corectă a cazului de testare curent.

Interfața ITestListener

Iată pașii pe care îi vom urma

  • Creați o clasă spune RealGuru99Report și implementați iTestListener în ea.
  • Implementați metodele iTestListener
  • Creați metoda de testare și adăugați clasa RealGuru99Report ca ascultător în clasa Test Method.

Interfața ITestListener

Exemplu de cod

RealGuru99TimeReport.java este clasa de raportare în timp real. Acesta va implementa interfața ITestListener pentru raportare

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 este cazul de testare pentru raportul real

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(){

        

    }

}

Ieșirea va arăta ca...

Interfața ITestListener

Interfața IReporter

Dacă dorim să personalizăm raportul final de testare generat de TestNG, trebuie să implementăm interfața IReporter. Această interfață are o singură metodă de a implementa generateReport. Această metodă are toate informațiile unei execuții complete de testare în Listă , și putem genera raportul folosindu-l.

Exemplu de cod

Guru99Reporter.java este fișierul folosit pentru personalizarea raportului

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 este o demonstrație pentru raportarea personalizată

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);

    }

}

Ieșirea va fi ca...

Interfața IReporter

PDF și e-mail de rapoarte

Implementarea raportului de mai sus este destul de simplă și clară pentru a vă ajuta să începeți cu personalizarea rapoartelor.

Dar în mediul corporativ, va trebui să creați rapoarte extrem de personalizate. Iată scenariul cu care ne vom ocupa

  1. Creați un raport personalizat în format PDF
  2. Faceți capturi de ecran NUMAI pentru erori. Link către capturi de ecran în PDF
  3. Trimiteți e-mailul PDF-ului

Raportul PDF arată astfel

PDF și e-mail de rapoarte

Pentru a crea un raport pdf avem nevoie de un Java API IText. Descarca-l aici . Există o altă clasă de ascultător personalizată care implementează de fapt acest jar IText și creează un raport pdf pentru noi. Descarca-l aici

Figura de mai sus arată formatul implicit al raportului PDF generat. Îl poți personaliza

Iată cum vom aborda acest lucru

Pasul 1) Creați o clasă de bază

Pasul 2) Personalizați JypersionListerner.Java (cod de creare PDF)

Pasul 3) Creați un TestGuru99PDFEmail.java care va executa cazuri de testare, creați PDF

Pasul 4) Adăugați codul la TestGuru99PDFEmail.java pentru a trimite raportul PDF prin e-mail

Să ne uităm la acești pași

Pasul 1) Creați clasa de bază

Această clasă de bază are funcții pentru a crea WebDriver și a face captură de ecran

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);

            

    }

}

Pasul 2) Personalizați JypersionListener.java

Vom rămâne cu formatul implicit de raport. Dar vom face 2 personalizări

  • Adăugarea codului pentru a instrui JypersionListener să facă captură de ecran la Eroare
  • Atașând linkul capturii de ecran în raportul PDF

PDF și e-mail de rapoarte

Adăugați cod pentru a atașa captura de ecran la raportul PDF

PDF și e-mail de rapoarte

Pasul 3) Creați un TestGuru99PDFEmail.java care va executa cazuri de testare, creați PDF

  • Aici vom adăuga JyperionListener.class ca ascultător
  • Vom executa 3 cazuri de testare.
  • Folosind Assert.assertTrue vom eșua 2 cazuri de testare în timp ce trecem doar unul.
  • Captură de ecran va fi făcută pentru cazurile de testare nereușite numai conform personalizărilor noastre
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);

    }

Pasul 4) Adăugați codul la TestGuru99PDFEmail.java pentru a trimite raportul PDF prin e-mail

  • Vom folosi adnotarea @AfterSuite pentru a trimite e-mailul raportului PDF
  • Vom trimite e-mailuri folosind Gmail
  • Pentru a activa e-mail, trebuie să importați multe fișiere de bibliotecă, cum ar fi mail.jar, pop3.jar, smptp.jar etc.
  • Înainte de a executa acest lucru, introduceți adresa de e-mail și parola de la, către
 //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();

}

}

}

Descarcă aici proiectul complet

Notă: Când facem clic pe linkul capturii de ecran din pdf, acesta arată dialogul de securitate. Trebuie să permitem acestui dialog să deschidă pdf.

PDF și e-mail de rapoarte

E-mailul astfel generat va arăta astfel

PDF și e-mail de rapoarte

Rezumat

  • TestNG are o capacitate de raportare încorporată.
  • După o execuție completă a cazurilor de testare, TestNG generează un folder de ieșire de testare în rădăcina proiectului.
  • În folderul test-output, există două rapoarte principale, index.html și emailable-report.html.
  • A personaliza TestNG raportul că trebuie să implementăm două interfețe, ITestListener și IReporter.
  • Dacă trebuie să obținem un raport între execuții, avem nevoie de ITestListener.
  • Pentru a crea un raport final după execuția completă, trebuie să implementăm IReporter.
  • Făcând captură de ecran, în Selenium WebDriver, trebuie să introducem cast WebDriver în interfața TakesScreenShot.
  • Pentru a genera rapoarte pdf, trebuie să adăugăm IText jar în proiect.

Descărcați Selenium Fișiere de proiect pentru demonstrația din acest tutorial