Testreszabás, PDF és e-mail TestNG Jelentések be Selenium webdriver

Mielőtt bármi mást megvizsgálnánk, először értsük meg,

Miért van szükségünk jelentésre?

Amikor használjuk Selenium vagy bármilyen más automatizálási eszköz, a webalkalmazáson hajtunk végre műveleteket. Az automatizálás célja azonban nem csupán a tesztelés alatt álló alkalmazás gyakorlása. Nekünk, mint automatizálási tesztelőknek az a feladata, hogy teszteljük az alkalmazást, megtaláljuk a hibákat, és jelentsük a fejlesztőcsapatnak vagy a felsőbb vezetésnek. Itt a jelentéskészítés fontossá válik a szoftverek számára Tesztelés folyamat

TestNG Jelentő

TestNG könyvtár nagyon praktikus jelentéskészítési funkciót biztosít. A végrehajtás után, Testng teszt-kimeneti mappát hoz létre a projekt gyökerében. Ez a mappa kétféle jelentést tartalmaz:

Index.html: Ez a teljes jelentés az aktuális végrehajtásról, amely olyan információkat tartalmaz, mint a hiba, csoportok, idő, riporter naplók, tesztelt XML-fájlok.

TestNG Jelentő

emailable-report.html: Ez az aktuális tesztvégrehajtás összefoglaló jelentése, amely tartalmazza Teszt eset üzenet zölddel (megfelelt teszteseteknél) és pirossal (sikertelen teszteseteknél) kiemelve.

TestNG Jelentő

Hogyan testreszabható TestNG Jelentés

TestNG A jelentéskészítés meglehetősen praktikus, de néha kevesebb adatra van szükségünk a jelentésekben, vagy más formátumban, például pdf-ben, excelben stb. szeretnénk megjeleníteni a jelentéseket, vagy módosítani szeretnénk a jelentés elrendezését.

Kétféleképpen tudjuk személyre szabni TestNG jelentést

  • Az ITestListener felület használata:
  • Az IReporter felület használata:

Testreszabás TestNG Jelentés

ITestListener felület

Ezt a felületet akkor használjuk, ha valós idejű jelentést kell testreszabnunk. Más szóval, ha egy TetNG programcsomagban hajtjuk végre a tesztesetek csomóját, és minden tesztesetről jelentést szeretnénk kapni, akkor minden teszteset után implementálni kell az ITestListener felületet. Ez az interfész felülírja az onTestFailure, onTestStart, onTestSkipped metódust, hogy elküldje az aktuális teszteset helyes állapotát.

ITestListener felület

Íme a lépések, amelyeket követni fogunk

  • Hozzon létre egy osztályt, mondjuk a RealGuru99Reportot, és alkalmazza benne az iTestListenert.
  • Az iTestListener módszereinek megvalósítása
  • Hozzon létre tesztmódszert, és vegye fel a RealGuru99Report osztályt figyelőként a Test Method osztályba.

ITestListener felület

Kódpélda

A RealGuru99TimeReport.java a valós idejű jelentéskészítési osztály. Ez megvalósítja az ITestListener felületet a jelentésekhez

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

        

    }

    

}

A TestGuru99RealReport.java a valódi jelentés tesztje

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

        

    }

}

A kimenet így fog kinézni:

ITestListener felület

IReporter felület

Ha testre akarjuk szabni az általa generált végső tesztjelentést TestNG, meg kell valósítanunk az IReporter felületet. Ezen az interfészen csak egy módszer van a generReport megvalósítására. Ez a módszer a teljes tesztvégrehajtás összes információját tartalmazza a listában , és ennek segítségével állíthatjuk elő a jelentést.

Kódpélda

A Guru99Reporter.java a jelentés testreszabásához használt fájl

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

                

            }

        }

        }

        

    }

}

A TestGuru99ForReporter.java az egyéni jelentéskészítés demója

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

    }

}

A kimenet olyan lesz, mint

IReporter felület

PDF és jelentések e-mailje

A jelentés fenti megvalósítása meglehetősen egyszerű és világos, hogy elkezdhesse a jelentés testreszabását.

Vállalati környezetben azonban nagymértékben testreszabott jelentéseket kell készítenie. Itt van a forgatókönyv, amellyel foglalkozni fogunk

  1. Egyéni jelentés létrehozása PDF formátumban
  2. Képernyőképeket CSAK hibák esetén készítsen. Link a képernyőképekhez PDF-ben
  3. E-mail küldése a PDF-ről

A PDF jelentés így néz ki

PDF és jelentések e-mailje

A pdf jelentés elkészítéséhez szükségünk van a Java API IText. Töltsd le itt . Van egy másik egyéni figyelő osztály, amely ténylegesen megvalósítja ezt az IText jar-t, és pdf jelentést készít nekünk. Töltsd le itt

A fenti ábra a létrehozott PDF jelentés alapértelmezett formátumát mutatja. Testreszabhatja

Íme, hogyan fogjuk ezt megközelíteni

1. lépés) Hozzon létre egy alaposztályt

2. lépés) A JypersionListerner testreszabása.Java (PDF létrehozási kód)

3. lépés) Hozzon létre egy TestGuru99PDFEmail.java fájlt, amely teszteseteket hajt végre, és PDF-et hoz létre

4. lépés) Adja hozzá a kódot a TestGuru99PDFEmail.java fájlhoz a PDF jelentés e-mailben történő elküldéséhez

Nézzük meg ezeket a lépéseket

1. lépés: Hozzon létre alaposztályt

Ez az alaposztály rendelkezik a WebDriver és a Képernyőkép készítésének funkcióival

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

            

    }

}

2. lépés) A JypersionListener.java testreszabása

Maradunk az alapértelmezett jelentésformátumnál. De 2 testreszabást végzünk

  • Kód hozzáadása arra utasítja a JypersionListenert, hogy készítsen képernyőképet a hiba esetén
  • Csatolva a képernyőkép linkjét a PDF jelentésben

PDF és jelentések e-mailje

Adjon hozzá kódot a képernyőkép PDF-jelentéshez csatolásához

PDF és jelentések e-mailje

3. lépés) Hozzon létre egy TestGuru99PDFEmail.java fájlt, amely teszteseteket hajt végre, és PDF-et hoz létre

  • Itt a JyperionListener.classt fogjuk hozzáadni hallgatóként
  • 3 tesztesetet fogunk végrehajtani.
  • Az Assert.assertTrue használatával 2 tesztesetet buktunk meg, miközben csak egyet teljesítünk.
  • Csak a sikertelen tesztesetekről készítünk képernyőképet a testreszabásunknak megfelelően
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);

    }

4. lépés) Adja hozzá a kódot a TestGuru99PDFEmail.java fájlhoz a PDF jelentés e-mailben történő elküldéséhez

  • Az @AfterSuite megjegyzést használjuk a PDF-jelentés e-mail küldésére
  • Az e-maileket a Gmail használatával fogjuk küldeni
  • Az e-mail engedélyezéséhez számos könyvtárfájlt kell importálni, például a mail.jar, pop3.jar, smptp.jar stb.
  • Mielőtt ezt végrehajtaná, adja meg a feladó, e-mail címet és a jelszót
 //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();

}

}

}

Töltse le a teljes projektet innen

Megjegyzés: Ha a pdf-ben a képernyőkép hivatkozásra kattintunk, megjelenik a biztonsági párbeszédpanel. Engedélyeznünk kell ezt a párbeszédpanelt a pdf megnyitásához.

PDF és jelentések e-mailje

Az így létrehozott e-mail így fog kinézni

PDF és jelentések e-mailje

Összegzésként

  • TestNG beépített jelentési képességgel rendelkezik.
  • A tesztesetek teljes végrehajtása után TestNG teszt-kimeneti mappát hoz létre a projekt gyökerében.
  • A tesztkimeneti mappában két fő jelentés található, az index.html és az emailable-report.html.
  • A testreszabáshoz TestNG jelentésben két interfészt kell megvalósítanunk, az ITestListenert és az IReportert.
  • Ha jelentést kell kapnunk a végrehajtás között, akkor szükségünk van az ITestListenerre.
  • A teljes végrehajtás utáni zárójelentés elkészítéséhez az IReporter alkalmazást kell megvalósítanunk.
  • Képernyőkép készítése, be Selenium WebDriver, be kell írnunk a cast WebDriver-t a TakesScreenShot felületre.
  • A pdf jelentések generálásához IText jar-t kell hozzáadnunk a projekthez.

Töltse le a Selenium Projektfájlok a bemutatóhoz ebben az oktatóanyagban