Tilpas, PDF og e-mail TestNG Rapporter i Selenium webdriver

Før vi ser nærmere på noget andet, lad os først forstå –

Hvorfor har vi brug for indberetning?

Når vi bruger Selenium eller ethvert andet automatiseringsværktøj, udfører vi operationer på webapplikationen. Men vores formål med automatisering er ikke kun at udøve Application Under Test. Det er meningen, at vi som automatiseringstester skal teste applikationen, finde fejl og rapportere det til udviklingsteamet eller højere ledelse. Her får rapporteringen betydning for software Test behandle

TestNG Rapportering

TestNG biblioteket giver en meget praktisk rapporteringsfunktion. Efter henrettelse, Testng vil generere en test-output mappe i roden af ​​projektet. Denne mappe indeholder to typer rapporter-

Index.html: Dette er den komplette rapport over den aktuelle udførelse, som indeholder information som en fejl, grupper, tid, reporterlogfiler, testng XML-filer.

TestNG Rapportering

emailable-report.html: Dette er den sammenfattende rapport for den aktuelle testudførelse, som indeholder Test sag meddelelse i grøn (for beståede testsager) og rød (for mislykkede testsager) fremhæves.

TestNG Rapportering

Sådan tilpasses TestNG Rapport

TestNG rapportering er ret praktisk, men nogle gange har vi brug for nogle færre data i rapporter eller ønsker at vise rapporter i et andet format som pdf, excel osv. eller ønsker at ændre rapportens layout.

Der kan være to måder, vi kan tilpasse TestNG indberette

  • Brug af ITestListener Interface:
  • Brug af IReporter Interface:

Tilpas TestNG Rapport

ITestListener Interface

Vi bruger denne grænseflade, når vi skal tilpasse realtidsrapporten. Med andre ord, hvis vi udfører en masse testcases i en TetNG-suite, og vi ønsker at få rapporten fra hver testcase, skal vi efter hver testcase implementere ITestListener-grænsefladen. Denne grænseflade vil tilsidesætte metoden onTestFailure, onTestStart, onTestSkipped for at sende den korrekte status for den aktuelle testcase.

ITestListener Interface

Her er de trin, vi vil følge

  • Opret en klasse siger RealGuru99Report og implementer iTestListener i den.
  • Implementer metoder til iTestListener
  • Opret testmetode og tilføj RealGuru99Report-klassen som lytter i Test Method-klassen.

ITestListener Interface

Kodeeksempel

RealGuru99TimeReport.java er realtidsrapporteringsklassen. Det vil implementere ITestListener-grænsefladen til rapportering

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 er testcasen for ægte rapport

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

        

    }

}

Outputtet vil se ud som-

ITestListener Interface

IReporter-grænseflade

Hvis vi ønsker at tilpasse den endelige testrapport genereret af TestNG, skal vi implementere IReporter-grænsefladen. Denne grænseflade har kun én metode til at implementere generReport. Denne metode har alle oplysningerne om en komplet testudførelse i listen , og vi kan generere rapporten ved hjælp af den.

Kodeeksempel

Guru99Reporter.java er filen, der bruges til at tilpasse rapporten

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 er en demo til brugerdefineret rapportering

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

    }

}

Output vil være som-

IReporter-grænseflade

PDF og e-mail med rapporter

Ovenstående rapportimplementering er ret enkel og overskuelig for at komme i gang med rapporttilpasning.

Men i et virksomhedsmiljø bliver du nødt til at oprette meget tilpassede rapporter. Her er scenariet, vi skal beskæftige os med

  1. Opret brugerdefineret rapport i PDF-form
  2. Tag KUN skærmbilleder af fejl. Link til skærmbilleder i PDF
  3. Send e-mail til PDF'en

PDF-rapporten ser sådan ud

PDF og e-mail med rapporter

For at oprette pdf-rapport har vi brug for en Java API ITekst. Download det link. . Der er en anden tilpasset lytterklasse, som faktisk implementerer denne IText-krukke og laver en pdf-rapport til os. Download det link.

Ovenstående figur viser standardformatet for den genererede PDF-rapport. Du kan tilpasse det

Her er hvordan vi vil gribe dette an

Trin 1) Opret en basisklasse

Trin 2) Tilpas JypersionListerner.Java (PDF oprettelseskode)

Trin 3) Opret en TestGuru99PDFEmail.java, som vil udføre testcases, oprette PDF

Trin 4) Tilføj kode til TestGuru99PDFEmail.java for at sende PDF-rapport via e-mail

Lad os se nærmere på disse trin

Trin 1) Opret basisklasse

Denne basisklasse har funktioner til at oprette WebDriver og tage skærmbillede

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

            

    }

}

Trin 2) Tilpas JypersionListener.java

Vi holder os til standardrapportformatet. Men vi vil lave 2 tilpasninger

  • Tilføjelse af kode for at instruere JypersionListener om at tage et skærmbillede ved fejl
  • Vedhæftning af linket til skærmbilledet tages i PDF-rapporten

PDF og e-mail med rapporter

Tilføj kode for at vedhæfte skærmbilledet til PDF-rapporten

PDF og e-mail med rapporter

Trin 3) Opret en TestGuru99PDFEmail.java, som vil udføre testcases, oprette PDF

  • Her vil vi tilføje JyperionListener.class som lytter
  • Vi udfører 3 testsager.
  • Ved at bruge Assert.assertTrue vil vi fejle 2 testcases, mens vi kun består én.
  • Skærmbillede vil kun blive taget for de mislykkede testsager i henhold til vores tilpasninger
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);

    }

Trin 4) Tilføj kode til TestGuru99PDFEmail.java for at sende PDF-rapport via e-mail

  • Vi vil bruge annotationen @AfterSuite til at sende e-mail med PDF-rapporten
  • Vi sender e-mail ved hjælp af Gmail
  • For at aktivere e-mail skal du importere mange biblioteksfiler som mail.jar, pop3.jar, smptp.jar osv.
  • Inden du udfører dette, skal du indtaste fra, til e-mailadresse og adgangskode
 //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();

}

}

}

Download hele projektet her

Bemærk: Når vi klikker på skærmbilledet-linket i pdf, viser det en sikkerhedsdialog. Vi er nødt til at tillade denne dialog at åbne pdf.

PDF og e-mail med rapporter

Den således genererede e-mail vil se sådan ud

PDF og e-mail med rapporter

Resumé

  • TestNG har en indbygget rapporteringsevne i sig.
  • Efter en komplet udførelse af testcases, TestNG genererer en test-output-mappe i projektets rod.
  • I test-output-mappen er der to hovedrapporter, index.html og emailable-report.html.
  • At tilpasse TestNG rapport skal vi implementere to grænseflader, ITestListener og IReporter.
  • Hvis vi skal have en rapport mellem udførelsen, har vi brug for ITestListener.
  • For at oprette en endelig rapport efter fuldstændig udførelse skal vi implementere IReporter.
  • Tager skærmbilledet, ind Selenium WebDriver, vi skal skrive cast WebDriver til TakesScreenShot-grænsefladen.
  • For at generere pdf-rapporter skal vi tilføje IText jar i projektet.

Download Selenium Projektfiler til demoen i denne vejledning

Opsummer dette indlæg med: