Prilagodi, PDF i e-poštom TestNG Izvješća u Selenium webdriver

Prije nego što pogledamo bilo što drugo, prvo shvatimo –

Zašto nam je potrebno izvješćivanje?

Kada koristimo Selenium ili bilo kojeg drugog alata za automatizaciju, izvodimo operacije na web aplikaciji. Ali naša svrha automatizacije nije samo vježbanje aplikacije koja se testira. Mi, kao tester automatizacije, trebali bismo testirati aplikaciju, pronaći greške i prijaviti to razvojnom timu ili višoj upravi. Ovdje izvješćivanje dobiva važnost za softver Ispitivanje postupak

TestNG Izvještavanje

TestNG knjižnica pruža vrlo praktičnu značajku izvješćivanja. Nakon izvršenja, Testng će generirati testnu izlaznu mapu u korijenu projekta. Ova mapa sadrži dvije vrste izvješća-

Index.html: Ovo je potpuno izvješće o trenutnom izvršenju koje sadrži informacije kao što su pogreška, grupe, vrijeme, zapisnici izvjestitelja, testng XML datoteke.

TestNG Izvještavanje

emailable-report.html: Ovo je sažetak izvješća o trenutnom izvršenju testa koji sadrži Testni slučaj poruka označena zelenom (za prolazne testne slučajeve) i crvenom (za neuspješne testne slučajeve).

TestNG Izvještavanje

Kako prilagoditi TestNG izvješće

TestNG izvješćivanje je vrlo zgodno, ali ipak, ponekad nam treba nešto manje podataka u izvješćima ili želimo prikazati izvješća u nekom drugom formatu kao što je pdf, excel itd. ili želimo promijeniti izgled izvješća.

Mogu postojati dva načina na koje možemo prilagoditi TestNG prijaviti

  • Korištenje ITestListener sučelja:
  • Korištenje sučelja IReporter:

prilagođavanje TestNG izvješće

ITestListener sučelje

Ovo sučelje koristimo kada trebamo prilagoditi izvješće u stvarnom vremenu. Drugim riječima, ako izvršavamo hrpu testnih slučajeva u TetNG paketu i želimo dobiti izvještaj o svakom testnom slučaju, tada nakon svakog testnog slučaja moramo implementirati ITestListener sučelje. Ovo sučelje će nadjačati metode onTestFailure, onTestStart, onTestSkipped za slanje ispravnog statusa trenutnog testnog slučaja.

ITestListener sučelje

Evo koraka koje ćemo slijediti

  • Napravite klasu recimo RealGuru99Report i u nju implementirajte iTestListener.
  • Implementirajte metode iTestListener-a
  • Stvorite metodu testiranja i dodajte klasu RealGuru99Report kao slušatelja u klasi Metoda testiranja.

ITestListener sučelje

Primjer koda

RealGuru99TimeReport.java je klasa za izvještavanje u stvarnom vremenu. Implementirat će ITestListener sučelje za izvješćivanje

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 je testni slučaj za pravi izvještaj

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

        

    }

}

Izlaz će izgledati kao-

ITestListener sučelje

IReporter sučelje

Ako želimo prilagoditi konačno izvješće o testiranju koje je generirao TestNG, moramo implementirati sučelje IReporter. Ovo sučelje ima samo jednu metodu za implementaciju generateReport. Ova metoda ima sve informacije o potpunom izvođenju testa na popisu , a pomoću njega možemo generirati izvješće.

Primjer koda

Guru99Reporter.java je datoteka koja se koristi za prilagodbu izvješća

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 je demo za prilagođeno izvješćivanje

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

    }

}

Izlaz će biti kao-

IReporter sučelje

PDF i izvješća e-poštom

Gore navedena implementacija izvješća prilično je jednostavna i jasna za početak prilagodbe izvješća.

Ali u poslovnom okruženju morat ćete izraditi visoko prilagođena izvješća. Evo scenarija s kojim ćemo se baviti

  1. Napravite prilagođeno izvješće u PDF obliku
  2. Snimajte snimke zaslona SAMO na pogreškama. Link na snimke zaslona u PDF-u
  3. Pošaljite PDF e-poštom

PDF izvješće izgleda ovako

PDF i izvješća e-poštom

Za izradu pdf izvješća trebamo a Java API IText. Preuzmite ga ovdje . Postoji još jedna prilagođena klasa slušatelja koja zapravo implementira ovaj IText jar i stvara pdf izvješće za nas. Preuzmite ga ovdje

Gornja slika prikazuje zadani format generiranog PDF izvješća. Možete ga prilagoditi

Evo kako ćemo tome pristupiti

Korak 1) Stvorite osnovnu klasu

Korak 2) Prilagodite JypersionListerner.Java (PDF kod za izradu)

Korak 3) Kreirajte TestGuru99PDFEmail.java koja će izvršiti testne slučajeve, kreirajte PDF

Korak 4) Dodajte kod u TestGuru99PDFEmail.java za slanje PDF izvješća putem e-pošte

Pogledajmo ove korake

Korak 1) Stvorite osnovnu klasu

Ova osnovna klasa ima funkcije za stvaranje WebDrivera i snimanje zaslona

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

            

    }

}

Korak 2) Prilagodite JypersionListener.java

Držat ćemo se zadanog formata izvješća. Ali napravit ćemo 2 prilagodbe

  • Dodavanje koda za naredbu JypersionListeneru da napravi snimku zaslona na pogrešku
  • Prilaganje poveznice snimke zaslona u PDF izvješću

PDF i izvješća e-poštom

Dodajte kod za prilaganje snimke zaslona PDF izvješću

PDF i izvješća e-poštom

Korak 3) Kreirajte TestGuru99PDFEmail.java koja će izvršiti testne slučajeve, kreirajte PDF

  • Ovdje ćemo dodati JyperionListener.class kao slušatelja
  • Izvršit ćemo 3 testa.
  • Korištenjem Assert.assertTrue pasti ćemo 2 testna slučaja dok ćemo proći samo jedan.
  • Snimak zaslona će se napraviti samo za neuspjele testove prema našim prilagodbama
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);

    }

Korak 4) Dodajte kod u TestGuru99PDFEmail.java za slanje PDF izvješća putem e-pošte

  • Za slanje PDF izvješća e-poštom koristit ćemo napomenu @AfterSuite
  • E-poštu ćemo slati putem Gmaila
  • Da biste omogućili e-poštu, trebate uvesti mnogo datoteka biblioteke kao što su mail.jar, pop3.jar, smptp.jar itd.
  • Prije nego što ovo izvršite, unesite adresu e-pošte od, do i lozinku
 //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();

}

}

}

Kompletan projekt preuzmite ovdje

Napomena: Kada kliknemo na vezu snimke zaslona u pdf-u, prikazuje se sigurnosni dijaloški okvir. Moramo dopustiti ovom dijalogu da otvori pdf.

PDF i izvješća e-poštom

Tako generirana e-pošta izgledat će ovako

PDF i izvješća e-poštom

Rezime

  • TestNG ima ugrađenu mogućnost izvješćivanja.
  • Nakon potpunog izvođenja testnih slučajeva, TestNG generira testnu izlaznu mapu u korijenu projekta.
  • U mapi testnih izlaza nalaze se dva glavna izvješća, index.html i emailable-report.html.
  • Za prilagodbu TestNG izvješću moramo implementirati dva sučelja, ITestListener i IReporter.
  • Ako trebamo dobiti izvješće između izvršenja, trebamo ITestListener.
  • Za izradu konačnog izvješća nakon završetka izvršenja, moramo implementirati IReporter.
  • Snimanje zaslona, ​​unutra Selenium WebDriver, moramo upisati cast WebDriver na sučelje TakesScreenShot.
  • Za generiranje pdf izvješća moramo dodati IText jar u projekt.

Preuzimanje Selenium Projektne datoteke za demo u ovom vodiču