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

  • Loo klass, nรคiteks โ€žReaalโ€Guru99Report ja rakenda selles iTestListenerit.
  • Rakendage iTestListeneri meetodeid
  • Loo testimismeetod ja lisa reaalvรครคrtusGuru99Aruande klass kuulajana klassis Test Method.

ITestListeneri liides

Code Nรคide

reaalneGuru99TimeReport.java on reaalajas aruandluse klass. 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 pรคris 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.

Code Nรค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 demoversioon

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)

3. samm) Loo testGuru99PDFEmail.java, mis kรคivitab testjuhtumeid ja loob PDF-faile

4. samm) Lisage kood testileGuru99PDFEmail.java PDF-aruande saatmiseks e-posti 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

3. samm) Loo testGuru99PDFEmail.java, mis kรคivitab testjuhtumeid ja loob PDF-faile

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

    }

4. samm) Lisage kood testileGuru99PDFEmail.java PDF-aruande saatmiseks e-posti teel

  • Kasutame PDF-aruande meili saatmiseks mรคrkust @AfterSuite
  • Saadame e-kirja, kasutades Gmail
  • 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

Vรตta see postitus kokku jรคrgmiselt: