Προσαρμογή, PDF & Email TestNG Αναφορές στο Selenium Πρόγραμμα οδήγησης Web

Πριν εξετάσουμε οτιδήποτε άλλο, ας καταλάβουμε πρώτα -

Γιατί χρειαζόμαστε αναφορά;

Όταν χρησιμοποιούμε Selenium ή οποιοδήποτε άλλο εργαλείο αυτοματισμού, εκτελούμε λειτουργίες στην εφαρμογή web. Αλλά ο σκοπός της αυτοματοποίησής μας δεν είναι απλώς να ασκήσουμε την Εφαρμογή υπό δοκιμή. Εμείς, ως ελεγκτής αυτοματισμού, υποτίθεται ότι δοκιμάζουμε την εφαρμογή, βρίσκουμε σφάλματα και τα αναφέρουμε στην ομάδα ανάπτυξης ή στην ανώτερη διοίκηση. Εδώ η αναφορά αποκτά σημασία για το λογισμικό Δοκιμές διαδικασια μας

TestNG Αναφορά

TestNG Η βιβλιοθήκη παρέχει μια πολύ εύχρηστη δυνατότητα αναφοράς. Μετά την εκτέλεση, Testng θα δημιουργήσει έναν φάκελο δοκιμαστικής εξόδου στη ρίζα του έργου. Αυτός ο φάκελος περιέχει δύο τύπους Αναφορών-

Index.html: Αυτή είναι η πλήρης αναφορά της τρέχουσας εκτέλεσης που περιέχει πληροφορίες όπως ένα σφάλμα, ομάδες, ώρα, αρχεία καταγραφής αναφοράς, αρχεία XML δοκιμής.

TestNG Αναφορά

emailable-report.html: Αυτή είναι η συνοπτική αναφορά της τρέχουσας εκτέλεσης δοκιμής που περιέχει Δοκιμαστική θήκη μήνυμα με πράσινο χρώμα (για περιπτώσεις δοκιμής επιτυχίας) και κόκκινο (για αποτυχημένες περιπτώσεις δοκιμής).

TestNG Αναφορά

Πώς να προσαρμόσετε TestNG Αναφορά

TestNG η αναφορά είναι αρκετά βολική, αλλά παρόλα αυτά, μερικές φορές χρειαζόμαστε λιγότερα δεδομένα στις αναφορές ή θέλουμε να εμφανίζουμε αναφορές σε κάποια άλλη μορφή όπως pdf, excel, κ.λπ. ή θέλουμε να αλλάξουμε τη διάταξη της αναφοράς.

Μπορεί να υπάρχουν δύο τρόποι που μπορούμε να προσαρμόσουμε TestNG αναφέρουν

  • Χρήση διεπαφής ITestListener:
  • Χρήση της διεπαφής ireporter:

Προσαρμόστε TestNG Αναφορά

Διεπαφή ITestListener

Χρησιμοποιούμε αυτήν τη διεπαφή όταν πρέπει να προσαρμόσουμε την αναφορά σε πραγματικό χρόνο. Με άλλα λόγια, εάν εκτελούμε το σύνολο των δοκιμαστικών περιπτώσεων σε μια σουίτα TetNG και θέλουμε να λάβουμε την αναφορά κάθε δοκιμαστικής περίπτωσης, τότε μετά από κάθε δοκιμαστική περίπτωση πρέπει να υλοποιήσουμε τη διεπαφή ITestListener. Αυτή η διεπαφή θα παρακάμψει τις μεθόδους onTestFailure, onTestStart, onTestSkipped για να στείλει τη σωστή κατάσταση της τρέχουσας περίπτωσης δοκιμής.

Διεπαφή ITestListener

Εδώ είναι τα βήματα που θα ακολουθήσουμε

  • Δημιουργήστε μια κλάση πείτε RealGuru99Report και εφαρμόστε το iTestListener σε αυτήν.
  • Εφαρμογή μεθόδων του iTestListener
  • Δημιουργήστε μέθοδο δοκιμής και προσθέστε την κλάση RealGuru99Report ως ακροατή στην κλάση Test Method.

Διεπαφή ITestListener

Παράδειγμα κώδικα

Το RealGuru99TimeReport.java είναι η τάξη αναφοράς σε πραγματικό χρόνο. Θα εφαρμόσει τη διεπαφή ITestListener για αναφορές

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 είναι η δοκιμαστική περίπτωση για πραγματική αναφορά

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

        

    }

}

Η έξοδος θα μοιάζει με-

Διεπαφή ITestListener

Διεπαφή IReporter

Αν θέλουμε να προσαρμόσουμε την τελική αναφορά δοκιμής που δημιουργείται από TestNG, πρέπει να εφαρμόσουμε τη διεπαφή IReporter. Αυτή η διεπαφή έχει μόνο μία μέθοδο για την υλοποίηση του generateReport. Αυτή η μέθοδος έχει όλες τις πληροφορίες μιας πλήρους εκτέλεσης δοκιμής στη Λίστα , και μπορούμε να δημιουργήσουμε την αναφορά χρησιμοποιώντας αυτήν.

Παράδειγμα κώδικα

Το Guru99Reporter.java είναι το αρχείο που χρησιμοποιείται για την προσαρμογή της αναφοράς

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 είναι μια επίδειξη για προσαρμοσμένες αναφορές

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

    }

}

Η έξοδος θα είναι σαν-

Διεπαφή IReporter

PDF και email των αναφορών

Η εφαρμογή της παραπάνω αναφοράς είναι αρκετά απλή και ξεκάθαρη για να ξεκινήσετε με την προσαρμογή της αναφοράς.

Αλλά σε εταιρικό περιβάλλον, θα χρειαστεί να δημιουργήσετε εξαιρετικά προσαρμοσμένες αναφορές. Εδώ είναι το σενάριο που θα αντιμετωπίσουμε

  1. Δημιουργία προσαρμοσμένης αναφοράς σε μορφή PDF
  2. Λήψη στιγμιότυπων οθόνης ΜΟΝΟ για σφάλματα. Σύνδεσμος με στιγμιότυπα οθόνης σε PDF
  3. Αποστολή email του PDF

Η αναφορά PDF μοιάζει με αυτό

PDF και email των αναφορών

Για να δημιουργήσουμε αναφορά σε pdf χρειαζόμαστε α Java API Κείμενο IT. Κατέβασέ το εδώ . Υπάρχει μια άλλη προσαρμοσμένη κλάση ακρόασης που υλοποιεί στην πραγματικότητα αυτό το βάζο IText και δημιουργεί μια αναφορά pdf για εμάς. Κατέβασέ το εδώ

Το παραπάνω σχήμα δείχνει την προεπιλεγμένη μορφή της αναφοράς PDF που δημιουργήθηκε. Μπορείτε να το προσαρμόσετε

Να πώς θα το προσεγγίσουμε αυτό

Βήμα 1) Δημιουργήστε μια βασική κλάση

Βήμα 2) Προσαρμόστε το JypersionListerner.Java (κωδικός δημιουργίας PDF)

Βήμα 3) Δημιουργήστε ένα TestGuru99PDFEmail.java που θα εκτελεί δοκιμαστικές περιπτώσεις, δημιουργήστε PDF

Βήμα 4) Προσθέστε κώδικα στο TestGuru99PDFEmail.java για αποστολή αναφοράς PDF μέσω email

Ας δούμε αυτά τα βήματα

Βήμα 1) Δημιουργία βασικής κλάσης

Αυτή η βασική κλάση έχει λειτουργίες δημιουργίας WebDriver και λήψης στιγμιότυπου οθόνης

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) Προσαρμόστε το JypersionListener.java

Θα τηρήσουμε την προεπιλεγμένη μορφή αναφοράς. Θα κάνουμε όμως 2 προσαρμογές

  • Προσθήκη κώδικα για να δώσει εντολή στο JypersionListener να τραβήξει στιγμιότυπο οθόνης στο Σφάλμα
  • Επισύναψη του συνδέσμου της λήψης στιγμιότυπου οθόνης στην αναφορά PDF

PDF και email των αναφορών

Προσθέστε κώδικα για να επισυνάψετε το στιγμιότυπο οθόνης στην αναφορά PDF

PDF και email των αναφορών

Βήμα 3) Δημιουργήστε ένα TestGuru99PDFEmail.java που θα εκτελεί δοκιμαστικές περιπτώσεις, δημιουργήστε PDF

  • Εδώ θα προσθέσουμε το JyperionListener.class ως ακροατή
  • Θα εκτελέσουμε 3 δοκιμαστικές περιπτώσεις.
  • Χρησιμοποιώντας το Assert.assertTrue θα αποτύχουμε 2 δοκιμαστικές περιπτώσεις ενώ θα περάσουμε μόνο μία.
  • Το στιγμιότυπο οθόνης θα ληφθεί για τις αποτυχημένες δοκιμαστικές περιπτώσεις μόνο σύμφωνα με τις προσαρμογές μας
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) Προσθέστε κώδικα στο TestGuru99PDFEmail.java για αποστολή αναφοράς PDF μέσω email

  • Θα χρησιμοποιήσουμε τον σχολιασμό @AfterSuite για να στείλουμε email της αναφοράς PDF
  • Θα στείλουμε email χρησιμοποιώντας το Gmail
  • Για να ενεργοποιήσετε το Email, πρέπει να εισαγάγετε πολλά αρχεία βιβλιοθήκης όπως mail.jar, pop3.jar, smptp.jar κ.λπ.
  • Πριν να το εκτελέσετε, εισαγάγετε τη διεύθυνση email από, προς και τον κωδικό πρόσβασης
 //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();

}

}

}

Κατεβάστε το πλήρες έργο εδώ

Σημείωση: Όταν κάνουμε κλικ στο σύνδεσμο στιγμιότυπο οθόνης σε pdf, εμφανίζεται το παράθυρο διαλόγου ασφαλείας. Πρέπει να επιτρέψουμε σε αυτό το παράθυρο διαλόγου να ανοίξει pdf.

PDF και email των αναφορών

Το email που δημιουργείται με αυτόν τον τρόπο θα μοιάζει με αυτό

PDF και email των αναφορών

Σύνοψη

  • TestNG έχει μια ενσωματωμένη ικανότητα αναφοράς.
  • Μετά από πλήρη εκτέλεση των δοκιμαστικών περιπτώσεων, TestNG δημιουργεί έναν φάκελο δοκιμαστικής εξόδου στη ρίζα του έργου.
  • Στον φάκελο test-output, υπάρχουν δύο κύριες αναφορές, το index.html και το emailable-report.html.
  • Για προσαρμογή TestNG αναφορά που πρέπει να εφαρμόσουμε δύο διεπαφές, το ITestListener και το IReporter.
  • Εάν πρέπει να λάβουμε μια αναφορά στο μεταξύ της εκτέλεσης, χρειαζόμαστε το ITestListener.
  • Για τη δημιουργία μιας τελικής αναφοράς μετά την πλήρη εκτέλεση, πρέπει να εφαρμόσουμε το IReporter.
  • Λαμβάνοντας το στιγμιότυπο οθόνης, μέσα Selenium WebDriver, πρέπει να πληκτρολογήσουμε cast WebDriver στη διεπαφή TakesScreenShot.
  • Για να δημιουργήσουμε αναφορές pdf, πρέπει να προσθέσουμε το IText jar στο έργο.

Κατεβάστε το Selenium Αρχεία έργου για την επίδειξη σε αυτό το σεμινάριο