Kohanda, PDF ja e-post TestNG Aruanded sisse Selenium Veebidraiver

Enne kui hakkame midagi muud uurima, mõistame kõigepealt

Miks me vajame aruandlust?

Kui me kasutame Selenium või mõni muu automatiseerimistööriist, teostame veebirakenduses toiminguid. Kuid meie automatiseerimise eesmärk ei ole ainult testitava rakenduse kasutamine. Meie, automaatika testija, peaksime rakendust testima, vead leidma ja arendusmeeskonnale või kõrgemale juhtkonnale teatama. Siin muutub aruandlus tarkvara jaoks oluliseks Testimine protsess

TestNG Aruandlus

TestNG raamatukogu pakub väga mugavat aruandlusfunktsiooni. Pärast hukkamist, Testng loob projekti juurtes test-väljundkausta. See kaust sisaldab kahte tüüpi aruandeid -

Index.html: See on praeguse täitmise täielik aruanne, mis sisaldab teavet, nagu viga, rühmad, aeg, reporteri logid, XML-failide testimine.

TestNG Aruandlus

emailable-report.html: See on praeguse testi täitmise koondaruanne, mis sisaldab Testjuhtum teade on esile tõstetud rohelise (testi läbimise korral) ja punasega (ebaõnnestunud testjuhtumite puhul).

TestNG Aruandlus

Kuidas kohandada TestNG Aruanne

TestNG aruandlus on üsna mugav, kuid mõnikord vajame aruannetes vähem andmeid või tahame kuvada aruandeid mõnes muus vormingus (nt pdf, excel vms) või soovime muuta aruande paigutust.

Me saame kohandada kahel viisil TestNG aru

  • ITestListeneri liidese kasutamine:
  • IReporteri liidese kasutamine:

Kohanda TestNG Aruanne

ITestListeneri liides

Kasutame seda liidest, kui peame kohandama reaalajas aruannet. Teisisõnu, kui teostame hulga testjuhtumeid TetNG komplektis ja tahame saada iga testjuhtumi aruannet, siis pärast iga testjuhtumit peame rakendama ITestListeneri liidese. See liides alistab meetodi TestFailure, onTestStart ja onTestSkipped, et saata praeguse testjuhtumi õige olek.

ITestListeneri liides

Siin on sammud, mida järgime

  • Looge klass, öelge RealGuru99Report ja rakendage selles iTestListener.
  • Rakendage iTestListeneri meetodeid
  • Looge testmeetod ja lisage klassis Test Method kuulajaks RealGuru99Report klass.

ITestListeneri liides

Koodinäide

RealGuru99TimeReport.java on reaalajas aruandlusklass. See rakendab aruandluse jaoks ITestListeneri liidest

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 tõelise aruande testjuhtum

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äljund näeb välja selline -

ITestListeneri liides

IReporteri liides

Kui soovime kohandada poolt loodud lõplikku testiaruannet TestNG, peame rakendama IReporteri liidese. Sellel liidesel on generReport rakendamiseks ainult üks meetod. Sellel meetodil on loendis kogu teave täieliku testi täitmise kohta ja saame selle abil aruande luua.

Koodinäide

Guru99Reporter.java on fail, mida kasutatakse aruande kohandamiseks

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 kohandatud aruandluse demo

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äljund on selline -

IReporteri liides

PDF ja aruannete e-post

Ülaltoodud aruande rakendamine on üsna lihtne ja selge, et saaksite aruande kohandamisega alustada.

Kuid ettevõtte keskkonnas peate looma väga kohandatud aruandeid. Siin on stsenaarium, millega me tegeleme

  1. Loo kohandatud aruanne PDF-vormingus
  2. Tehke ekraanipilte AINULT vigade korral. Link ekraanipiltidele PDF-is
  3. Saada PDF-i meil

PDF-aruanne näeb välja selline

PDF ja aruannete e-post

Pdf-aruande koostamiseks vajame a Java API IText. Laadige see alla siin . On veel üks kohandatud kuulajaklass, mis tegelikult rakendab seda ITexti jari ja loob meie jaoks pdf-aruande. Laadige see alla siin

Ülaltoodud joonis näitab loodud PDF-aruande vaikevormingut. Saate seda kohandada

Siin on, kuidas me sellele läheneme

1. samm) looge baasklass

2. samm) Kohandage JypersionListerner.Java (PDF-i loomise kood)

Samm 3) Looge testGuru99PDFEmail.java, mis käivitab testjuhtumid ja loob PDF-i

Samm 4) Lisage kood saidile TestGuru99PDFEmail.java, et saata PDF-aruanne meili teel

Vaatame neid samme

1. samm) looge baasklass

Sellel baasklassil on funktsioonid WebDriveri loomiseks ja ekraanipildi tegemiseks

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. samm) Kohandage JypersionListener.java

Jääme aruande vaikevormingu juurde. Kuid me teeme 2 kohandust

  • Koodi lisamine, et juhendada JypersionListenerit vea korral ekraanipilti tegema
  • Lisan PDF-aruandes pildi pildi lingi

PDF ja aruannete e-post

Lisage kood, et lisada ekraanipilt PDF-aruandele

PDF ja aruannete e-post

Samm 3) Looge testGuru99PDFEmail.java, mis käivitab testjuhtumid ja loob PDF-i

  • Siia lisame kuulajaks JyperionListener.class
  • Viime läbi 3 testjuhtumit.
  • Kasutades Assert.assertTrue, kukume läbi 2 testjuhtumit, läbides vaid ühe.
  • Ekraanipilt tehakse ainult ebaõnnestunud testjuhtumite kohta vastavalt meie kohandustele
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);

    }

Samm 4) Lisage kood saidile TestGuru99PDFEmail.java, et saata PDF-aruanne meili teel

  • Kasutame PDF-aruande meili saatmiseks märkust @AfterSuite
  • Saadame e-kirju Gmaili kaudu
  • Meili lubamiseks tuleb importida palju teegifaile, nagu mail.jar, pop3.jar, smptp.jar jne
  • Enne selle käivitamist sisestage e-posti aadress ja parool
 //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();

}

}

}

Laadige kogu projekt alla siit

Märkus. Kui klõpsame pdf-is ekraanipildi lingil, kuvatakse turvadialoog. Peame lubama sellel dialoogil pdf-i avada.

PDF ja aruannete e-post

Sel viisil loodud e-kiri näeb välja selline

PDF ja aruannete e-post

kokkuvõte

  • TestNG on sisseehitatud aruandlusvõime.
  • Pärast testjuhtumite täielikku täitmist TestNG genereerib projekti juurkataloogis test-väljundkausta.
  • Test-väljundi kaustas on kaks peamist aruannet, index.html ja emailable-report.html.
  • Kohandamiseks TestNG aruanne, peame rakendama kaks liidest, ITestListener ja IReporter.
  • Kui vajame täitmise vahepeal aruannet, vajame ITestListenerit.
  • Lõpparuande koostamiseks pärast täielikku täitmist peame rakendama IReporteri.
  • Ekraanipildi tegemine, sisse Selenium WebDriver, peame sisestama cast WebDriver TakesScreenShot liidesesse.
  • Pdf-aruannete genereerimiseks peame projekti lisama IText jari.

Lae alla Selenium Selle õpetuse demo projektifailid