Mukauta, PDF ja sähköposti TestNG Raportit Selenium web-ajuri

Ennen kuin tarkastelemme mitään muuta, ymmärrämme ensin -

Miksi tarvitsemme raportointia?

Kun käytämme Selenium tai mikä tahansa muu automaatiotyökalu, suoritamme toimintoja verkkosovelluksella. Mutta automaation tarkoituksemme ei ole vain testattavan sovelluksen harjoittaminen. Automaatiotestaajana meidän on tarkoitus testata sovellusta, löytää vikoja ja raportoida ne kehitystiimille tai ylemmälle johdolle. Tässä raportoinnilla on merkitystä ohjelmistoille Testaus prosessi

TestNG Raportointi

TestNG kirjasto tarjoaa erittäin kätevän raportointiominaisuuden. Suorituksen jälkeen, Testng luo testitulostuskansion projektin juureen. Tämä kansio sisältää kahden tyyppisiä raportteja -

Index.html: Tämä on täydellinen raportti nykyisestä suorituksesta, joka sisältää tietoja, kuten virhe, ryhmät, aika, reportterilokit, testaus XML-tiedostot.

TestNG Raportointi

emailable-report.html: Tämä on yhteenvetoraportti nykyisestä testin suorittamisesta, joka sisältää Testitapaus viesti vihreällä (läpäistyt testitapaukset) ja punaisella (epäonnistuneet testitapaukset) korostettuna.

TestNG Raportointi

Kuinka mukauttaa TestNG raportti

TestNG raportointi on varsin kätevää, mutta silti joskus tarvitsemme vähemmän tietoja raporteissa tai haluamme näyttää raportit jossain muussa muodossa, kuten pdf, excel jne. tai haluamme muuttaa raportin asettelua.

Voimme muokata kahdella tavalla TestNG raportti

  • ITestListener-liittymän käyttäminen:
  • IReporter-liittymän käyttäminen:

Muokkaa TestNG raportti

ITestListener-käyttöliittymä

Käytämme tätä käyttöliittymää, kun haluamme mukauttaa reaaliaikaista raporttia. Toisin sanoen, jos suoritamme joukkoa testitapauksia TetNG-sarjassa ja haluamme saada raportin jokaisesta testitapauksesta, meidän on jokaisen testitapauksen jälkeen otettava käyttöön ITestListener-liitäntä. Tämä käyttöliittymä ohittaa menetelmän TestFailure, onTestStart ja onTestSkipped lähettääkseen nykyisen testitapauksen oikean tilan.

ITestListener-käyttöliittymä

Tässä ovat vaiheet, joita noudatamme

  • Luo luokka, sano RealGuru99Report ja ota siihen käyttöön iTestListener.
  • Ota käyttöön iTestListenerin menetelmät
  • Luo testimenetelmä ja lisää RealGuru99Report-luokka kuuntelijaksi Test Method -luokkaan.

ITestListener-käyttöliittymä

Koodiesimerkki

RealGuru99TimeReport.java on reaaliaikainen raportointiluokka. Se toteuttaa ITestListener-rajapinnan raportointiin

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 on todellisen raportin testitapaus

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

        

    }

}

Tulos näyttää tältä -

ITestListener-käyttöliittymä

IReporter-käyttöliittymä

Jos haluamme muokata lopullista testiraporttia, jonka on luonut TestNG, meidän on otettava käyttöön IReporter-käyttöliittymä. Tällä käyttöliittymällä on vain yksi tapa toteuttaa generateReport. Tällä menetelmällä on kaikki tiedot täydellisestä testin suorittamisesta luettelossa , ja voimme luoda raportin sen avulla.

Koodiesimerkki

Guru99Reporter.java on tiedosto, jota käytetään raportin mukauttamiseen

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 on mukautetun raportoinnin esittely

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

    }

}

Tulos tulee olemaan

IReporter-käyttöliittymä

PDF ja raporttien sähköposti

Yllä oleva raportin toteutus on melko yksinkertainen ja selkeä, jotta pääset alkuun raporttien mukauttamisessa.

Mutta yritysympäristössä sinun on luotava erittäin mukautettuja raportteja. Tässä on skenaario, jota käsittelemme

  1. Luo mukautettu raportti PDF-muodossa
  2. Ota kuvakaappauksia VAIN virheistä. Linkki kuvakaappauksiin PDF-muodossa
  3. Lähetä PDF-tiedosto sähköpostitse

PDF-raportti näyttää tältä

PDF ja raporttien sähköposti

Pdf-raportin luomiseksi tarvitsemme a Java API IText. Lataa se täältä . On toinenkin mukautettu kuuntelijaluokka, joka todella toteuttaa tätä IText-purkkia ja luo meille pdf-raportin. Lataa se täältä

Yllä oleva kuva näyttää luodun PDF-raportin oletusmuodon. Voit muokata sitä

Näin lähestymme asiaa

Vaihe 1) Luo perusluokka

Vaihe 2) Mukauta JypersionListerner.Java (PDF-luontikoodi)

Vaihe 3) Luo TestGuru99PDFEmail.java, joka suorittaa testitapaukset ja luo PDF-tiedoston

Vaihe 4) Liitä koodi TestGuru99PDFEmail.javaan lähettääksesi PDF-raportin sähköpostitse

Katsotaanpa näitä vaiheita

Vaihe 1) Luo perusluokka

Tällä perusluokalla on toimintoja WebDriverin luomiseen ja Ota Screenshot

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

            

    }

}

Vaihe 2) Mukauta JypersionListener.java

Pysymme raporttien oletusmuodossa. Mutta teemme 2 mukautusta

  • Lisätään koodia, joka ohjaa JypersionListeneria ottamaan kuvakaappauksen virheestä
  • Liitteenä PDF-raportin kuvakaappauksen linkki

PDF ja raporttien sähköposti

Lisää koodi liittääksesi kuvakaappauksen PDF-raporttiin

PDF ja raporttien sähköposti

Vaihe 3) Luo TestGuru99PDFEmail.java, joka suorittaa testitapaukset ja luo PDF-tiedoston

  • Täällä lisäämme JyperionListener.class kuuntelijaksi
  • Suoritamme 3 testitapausta.
  • Käyttämällä Assert.assertTruea hylkäämme 2 testitapausta, mutta läpäisemme vain yhden.
  • Epäonnistuneista testitapauksista otetaan kuvakaappaus vain räätälöityjemme mukaisesti
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);

    }

Vaihe 4) Liitä koodi TestGuru99PDFEmail.javaan lähettääksesi PDF-raportin sähköpostitse

  • Käytämme merkintää @AfterSuite lähettääksemme PDF-raportin sähköpostitse
  • Lähetämme sähköpostia Gmailin kautta
  • Sähköpostin ottamiseksi käyttöön sinun on tuotava useita kirjastotiedostoja, kuten mail.jar, pop3.jar, smptp.jar jne.
  • Ennen kuin suoritat tämän, kirjoita lähettäjä, vastaanottaja sähköpostiosoite ja salasana
 //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();

}

}

}

Lataa koko projekti tästä

Huomautus: Kun napsautamme kuvakaappauslinkkiä pdf:ssä, se näyttää suojausikkunan. Meidän on sallittava tämän valintaikkunan avata pdf.

PDF ja raporttien sähköposti

Näin luotu sähköposti näyttää tältä

PDF ja raporttien sähköposti

Yhteenveto

  • TestNG siinä on sisäänrakennettu raportointikyky.
  • Kun testitapaukset on suoritettu täydellisesti, TestNG luo testitulostuskansion projektin juureen.
  • Testitulostuskansiossa on kaksi pääraporttia, index.html ja emailable-report.html.
  • Sopiaksesi TestNG raportissa meidän on otettava käyttöön kaksi käyttöliittymää, ITestListener ja IReporter.
  • Jos tarvitsemme raportin suorituksen välillä, tarvitsemme ITestListenerin.
  • Loppuraportin luomiseksi täydellisen suorituksen jälkeen meidän on otettava käyttöön IReporter.
  • Ota kuvakaappaus sisään Selenium WebDriver, meidän on kirjoitettava cast WebDriver TakesScreenShot-käyttöliittymään.
  • Pdf-raporttien luomiseksi meidän on lisättävä projektiin IText jar.

Lataa Selenium Projektitiedostot esittelyä varten tässä opetusohjelmassa

Tiivistä tämä viesti seuraavasti: