Přizpůsobit, PDF a e-mail TestNG Zprávy ve formátu Selenium webový ovladač

Než se podíváme na něco jiného, ​​nejprve si porozuměme –

Proč potřebujeme hlášení?

Když používáme Selenium nebo jakýkoli jiný automatizační nástroj, provádíme operace na webové aplikaci. Naším účelem automatizace však není pouze provádění testované aplikace. My jako tester automatizace máme aplikaci otestovat, najít chyby a nahlásit to vývojovému týmu nebo vyššímu vedení. Zde získává hlášení význam pro software Testování proces

TestNG Hlášení

TestNG knihovna poskytuje velmi praktickou funkci hlášení. po provedení, Testng vygeneruje testovací výstupní složku v kořenovém adresáři projektu. Tato složka obsahuje dva typy zpráv –

Index.html: Toto je kompletní zpráva o aktuálním provádění, která obsahuje informace jako chyba, skupiny, čas, protokoly reportérů, testovací soubory XML.

TestNG Hlášení

emailable-report.html: Toto je souhrnná zpráva o aktuálním provádění testu, která obsahuje Testovací případ zpráva se zvýrazní zeleně (pro úspěšné testovací případy) a červeně (pro neúspěšné testovací případy).

TestNG Hlášení

Jak přizpůsobit TestNG Zpráva

TestNG reporting je docela praktický, ale přesto někdy potřebujeme méně dat v reportech nebo chceme reporty zobrazovat v jiném formátu, jako je pdf, excel atd. nebo chceme změnit vzhled reportu.

Můžeme se přizpůsobit dvěma způsoby TestNG zprávy

  • Použití rozhraní ITestListener:
  • Použití rozhraní IReporter:

Vlastní TestNG Zpráva

Rozhraní ITestListener

Toto rozhraní používáme, když potřebujeme upravit přehled v reálném čase. Jinými slovy, pokud provádíme spoustu testovacích případů v sadě TetNG a chceme získat zprávu o každém testovacím případu, pak po každém testovacím případu musíme implementovat rozhraní ITestListener. Toto rozhraní přepíše metodu onTestFailure, onTestStart, onTestSkipped, aby odeslal správný stav aktuálního testovacího případu.

Rozhraní ITestListener

Zde jsou kroky, kterými se budeme řídit

  • Vytvořte třídu řekněme RealGuru99Report a implementujte do ní iTestListener.
  • Implementujte metody iTestListener
  • Vytvořte testovací metodu a přidejte třídu RealGuru99Report jako posluchač do třídy Testovací metoda.

Rozhraní ITestListener

Příklad kódu

RealGuru99TimeReport.java je třída hlášení v reálném čase. Bude implementovat rozhraní ITestListener pro 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 je testovací případ skutečné zprávy

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

        

    }

}

Výstup bude vypadat -

Rozhraní ITestListener

Rozhraní IReporter

Pokud chceme přizpůsobit závěrečnou zkušební zprávu vygenerovanou pomocí TestNG, potřebujeme implementovat rozhraní IReporter. Toto rozhraní má pouze jednu metodu implementace createReport. Tato metoda má všechny informace o provedení úplného testu v seznamu a pomocí něj můžeme vygenerovat sestavu.

Příklad kódu

Guru99Reporter.java je soubor používaný k přizpůsobení sestavy

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 ukázka pro Custom reporting

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

    }

}

Výstup bude jako-

Rozhraní IReporter

PDF a e-mail zpráv

Výše uvedená implementace sestav je poměrně jednoduchá a jasná, abyste mohli začít s přizpůsobením sestav.

V podnikovém prostředí však budete muset vytvářet vysoce přizpůsobené sestavy. Zde je scénář, kterým se budeme zabývat

  1. Vytvořte vlastní zprávu ve formátu PDF
  2. Pořizujte snímky obrazovky POUZE pro chyby. Odkaz na snímky obrazovky v PDF
  3. Odeslat e-mail ve formátu PDF

Zpráva ve formátu PDF vypadá takto

PDF a e-mail zpráv

K vytvoření zprávy ve formátu pdf potřebujeme a Java API IText. Stáhnout to zde . Existuje další vlastní třída posluchačů, která ve skutečnosti implementuje tento jar IText a vytváří pro nás zprávu ve formátu PDF. Stáhnout to zde

Výše uvedený obrázek ukazuje výchozí formát vygenerované zprávy PDF. Můžete si to přizpůsobit

Zde je návod, jak k tomu přistoupíme

Krok 1) Vytvořte základní třídu

Krok 2) Přizpůsobte JypersionListerner.Java (kód pro vytvoření PDF)

Krok 3) Vytvořte TestGuru99PDFEmail.java, který provede testovací případy, vytvořte PDF

Krok 4) Připojte kód k TestGuru99PDFEmail.java a odešlete zprávu ve formátu PDF e-mailem

Podívejme se na tyto kroky

Krok 1) Vytvořte základní třídu

Tato základní třída má funkce pro vytvoření WebDriver a pořízení snímku obrazovky

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

            

    }

}

Krok 2) Přizpůsobte JypersionListener.java

Budeme se držet výchozího formátu zprávy. Ale uděláme 2 přizpůsobení

  • Přidávání kódu, který dá JypersionListener pokyn k pořízení snímku obrazovky při chybě
  • Připojte odkaz na snímek obrazovky ve zprávě ve formátu PDF

PDF a e-mail zpráv

Přidejte kód pro připojení snímku obrazovky k přehledu PDF

PDF a e-mail zpráv

Krok 3) Vytvořte TestGuru99PDFEmail.java, který provede testovací případy, vytvořte PDF

  • Zde přidáme JyperionListener.class jako posluchač
  • Provedeme 3 testovací případy.
  • Pomocí Assert.assertTrue selžeme ve 2 testovacích případech, zatímco projdeme pouze jedním.
  • Snímek obrazovky bude pořízen pro neúspěšné testovací případy pouze podle našich přizpůsobení
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("http://demo.guru99.com");

        Assert.assertTrue(true);

    }

Krok 4) Připojte kód k TestGuru99PDFEmail.java a odešlete zprávu ve formátu PDF e-mailem

  • K odeslání zprávy ve formátu PDF e-mailem použijeme anotaci @AfterSuite
  • Budeme posílat e-maily pomocí Gmailu
  • Chcete-li povolit e-mail, musíte importovat mnoho souborů knihovny, jako je mail.jar, pop3.jar, smptp.jar atd.
  • Než to provedete, zadejte e-mailovou adresu od, do a heslo
 //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();

}

}

}

Stáhněte si kompletní projekt zde

Poznámka: Když klikneme na odkaz na snímek obrazovky v pdf, zobrazí se dialogové okno zabezpečení. Tento dialog musíme povolit, aby se otevřel pdf.

PDF a e-mail zpráv

Takto vygenerovaný e-mail bude vypadat takto

PDF a e-mail zpráv

Shrnutí

  • TestNG má v sobě zabudovanou možnost podávání zpráv.
  • Po kompletním provedení testovacích případů TestNG vygeneruje testovací výstupní složku v kořenovém adresáři projektu.
  • Ve složce test-output jsou dvě hlavní sestavy, index.html a emailable-report.html.
  • K přizpůsobení TestNG potřebujeme implementovat dvě rozhraní, ITestListener a IReporter.
  • Pokud potřebujeme získat zprávu mezi spuštěním, potřebujeme ITestListener.
  • Pro vytvoření závěrečné zprávy po dokončení realizace potřebujeme implementovat IReporter.
  • Pořízení snímku obrazovky v Selenium WebDriver, musíme zadat cast WebDriver do rozhraní TakesScreenShot.
  • Pro generování zpráv ve formátu pdf musíme do projektu přidat IText jar.

stáhněte Selenium Soubory projektu pro ukázku v tomto kurzu