Προσαρμογή, PDF & Αναφορές TestNG μέσω ηλεκτρονικού ταχυδρομείου στο Selenium WebDriver

Πίνακας περιεχομένων:

Anonim

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

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

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

Αναφορά TestNG

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

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

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

Πώς να προσαρμόσετε το TestNG Report

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

Υπάρχουν δύο τρόποι με τους οποίους μπορούμε να προσαρμόσουμε την αναφορά TestNG

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

Διεπαφή ITestListener

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

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

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

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

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

test packNGReport.realTimeReport;εισαγωγή org.testng.ITestContext;εισαγωγή org.testng.ITestListener;εισαγωγή org.testng.ITestResult;δημόσια τάξη RealGuru99TimeReport εφαρμόζει το ITestListener {@Καταπατώδημόσιο κενό στοStart (ITestContext arg0) {System.out.println ("Έναρξη εκτέλεσης (TEST) ->" + arg0.getName ());}@Καταπατώδημόσιο άκυρο onTestStart (ITestResult arg0) {System.out.println ("Έναρξη δοκιμής ->" + arg0.getName ());}@Καταπατώδημόσιο κενό onTestSuccess (ITestResult arg0) {System.out.println ("Test Pass ->" + arg0.getName ());}@Καταπατώδημόσιο κενό onTestFailure (ITestResult arg0) {System.out.println ("Η δοκιμή απέτυχε ->" + arg0.getName ());}@Καταπατώδημόσιο κενό onTestSkipped (ITestResult arg0) {System.out.println ("Παράλειψη δοκιμής ->" + arg0.getName ());}@Καταπατώδημόσιο κενό onFinish (ITestContext arg0) {System.out.println ("ΤΕΛΟΣ εκτέλεσης (ΔΟΚΙΜΗ) ->" + arg0.getName ());}@Καταπατώδημόσιο κενό onTestFailedButWithinSuccessPercentage (ITestResult arg0) {// TODO Αυτόματο δημιουργημένο στέλεχος μεθόδου}}

TestGuru99RealReport.java είναι η δοκιμαστική περίπτωση για πραγματική αναφορά

test packNGReport.realTimeReport;εισαγωγή org.testng.Assert;εισαγωγή org.testng.annotations.Listeners;εισαγωγή org.testng.annotations.Test;@Listeners (RealGuru99TimeReport.class)δημόσια τάξη TestGuru99RealReport {@Δοκιμήpublic void testRealReportOne () {Assert.assertTrue (true);}@Δοκιμήpublic void testRealReportTwo () {Assert.assertTrue (false);}// Η δοκιμαστική υπόθεση εξαρτάται από την αποτυχημένη δοκιμή = testRealReportTwo@Test (dependOnMethods = "testRealReportTwo")public void testRealReportThree () {}}

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

Διεπαφή IReporter

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

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

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

test packNGReport.iReporterReport;εισαγωγή java.util.Collection;εισαγωγή java.util.Date;εισαγωγή java.util.List;εισαγωγή java.util.Map;εισαγωγή java.util.Set;εισαγωγή org.testng.IReporter;εισαγωγή org.testng.IResultMap;εισαγωγή org.testng.ISuite;εισαγωγή org.testng.ISuiteResult;εισαγωγή org.testng.ITestContext;εισαγωγή org.testng.ITestNGΜέθοδο;εισαγωγή org.testng.xml.XmlSuite;δημόσια τάξη Guru99Reporter εφαρμόζει το IReporter {@Καταπατώpublic void createReport (Λίστα  arg0, Λίστα  arg1,Έξοδος συμβολοσειράς) {// Δεύτερη παράμετρος αυτής της μεθόδου Το ISuite θα περιέχει όλη τη σουίτα που έχει εκτελεστεί.για (ISuite iSuite: arg1) {// Λάβετε έναν χάρτη αποτελεσμάτων μίας σουίτας κάθε φοράΧάρτης  αποτελέσματα = iSuite.getResults ();// Λάβετε το κλειδί του χάρτη αποτελεσμάτωνΟρίστε  keys = results.keySet ();// Πηγαίνετε σε κάθε τιμή χάρτη ένα προς έναγια (πλήκτρο συμβολοσειράς: πλήκτρα) {// Το αντικείμενο περιβάλλοντος του τρέχοντος αποτελέσματοςITestContext konteks = results.get (κλειδί) .getTestContext ();// Λεπτομέρεια Print Suite στην ΚονσόλαSystem.out.println ("Όνομα σουίτας ->" + context.getName ()+ ":: Αναφορά εξόδου Ditectory ->" + context.getOutputDirectory ()+ ":: Όνομα σουίτας ->" + konteks.getSuite (). GetName ()+ ":: Ημερομηνία έναρξης Ώρα εκτέλεσης ->" + context.getStartDate ()+ ":: Ημερομηνία λήξης Ώρα εκτέλεσης ->" + context.getEndDate ());// Λήψη χάρτη για μόνο αποτυχημένες περιπτώσεις δοκιμώνIResultMap resultMap = konteks.getFailedTests ();// Λάβετε λεπτομέρειες μεθόδου αποτυχημένων περιπτώσεων δοκιμήςΣυλλογή  FailMethods = resultMap.getAllMethods ();// Βγάλτε ένα προς ένα σε όλες τις αποτυχημένες μεθόδουςSystem.out.println ("-------- ΠΕΡΙΠΤΩΣΗ ΑΠΟΤΥΧΙΑΚΗΣ ΔΟΚΙΜΗΣ ---------");για (ITestNGMethod iTestNGMethod: FailMethods) {// Εκτύπωση αποτυχημένων λεπτομερειών δοκιμαστικών περιπτώσεωνSystem.out.println ("TESTCASE NAME ->" + iTestNGMethod.getMethodName ()+ "\ nΠεριγραφή ->" + iTestNGMethod.getDescription ()+ "\ nΠροτεραιότητα ->" + iTestNGMethod.getPriority ()+ "\ n: Ημερομηνία ->" + νέα Ημερομηνία (iTestNGMethod.getDate ()));}}}}}

Το TestGuru99ForReporter.java είναι μια επίδειξη για προσαρμοσμένες αναφορές

test packNGReport.iReporterReport;εισαγωγή org.testng.Assert;εισαγωγή org.testng.annotations.Listeners;εισαγωγή org.testng.annotations.Test;// Προσθέστε τον ακροατή για να ακούσετε την αναφορά και να την γράψετε όταν τελειώσει η δοκιμή@Listeners (τιμή = Guru99Reporter.class)δημόσια τάξη TestGuru99ForReporter {@Test (προτεραιότητα = 0, περιγραφή = "testReporterOne")public void testReporterOne () {// Περάστε τη δοκιμαστική θήκηAssert.assertTrue (true);}@Test (προτεραιότητα = 1, περιγραφή = "testReporterTwo")public void testReporterTwo () {// Αποτυχία δοκιμαστικής υπόθεσηςAssert.assertTrue (false);}}

Η παραγωγή θα είναι σαν-

PDF και ηλεκτρονικό ταχυδρομείο αναφορών

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

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

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

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

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

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

Εδώ θα το προσεγγίσουμε

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

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

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

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

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

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

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

πακέτο PDFEmail;εισαγωγή java.io.File;εισαγωγή org.apache.commons.io.FileUtils;εισαγωγή org.openqa.selenium.OutputType;εισαγωγή org.openqa.selenium.TakesScreenshot;εισαγωγή org.openqa.selenium.WebDriver;εισαγωγή org.openqa.selenium.firefox.FirefoxDriver;δημόσια τάξη BaseClass {στατικό πρόγραμμα οδήγησης WebDriver;δημόσιο στατικό WebDriver getDriver () {εάν (πρόγραμμα οδήγησης == null) {Πρόγραμμα οδήγησης WebDriver;System.setProperty ("webdriver.gecko.driver", "C: \\ geckodriver.exe");πρόγραμμα οδήγησης = νέο FirefoxDriver ();}οδηγός επιστροφής ·}/ *** Αυτή η λειτουργία θα λάβει στιγμιότυπο οθόνης* @param webdriver* @param fileWithPath* @throws Εξαίρεση* /public static void takeSnapShot (WebDriver webdriver, String fileWithPath) ρίχνει την εξαίρεση {// Μετατροπή αντικειμένου προγράμματος οδήγησης ιστού σε TakeScreenshotTakesScreenshot scrShot = ((TakesScreenshot) πρόγραμμα οδήγησης ιστού);// Καλέστε τη μέθοδο getScreenshotAs για τη δημιουργία αρχείου εικόναςΑρχείο SrcFile = scrShot.getScreenshotAs (OutputType.FILE);// Μετακίνηση αρχείου εικόνας σε νέο προορισμόFile DestFile = νέο αρχείο (fileWithPath);// Αντιγραφή αρχείου στον προορισμόFileUtils.copyFile (SrcFile, DestFile);}}

Βήμα 2) Προσαρμόστε το JypersionListener.java

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

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

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

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

  • Εδώ θα προσθέσουμε το JyperionListener.class ως ακροατή
  • Θα εκτελέσουμε 3 δοκιμαστικές περιπτώσεις.
  • Χρησιμοποιώντας το Assert.assertTrue θα αποτύχουμε σε 2 δοκιμαστικές περιπτώσεις ενώ περνάμε μόνο μία.
  • Το στιγμιότυπο οθόνης θα ληφθεί για τις αποτυχημένες δοκιμαστικές περιπτώσεις μόνο σύμφωνα με τις προσαρμογές μας
πακέτο PDFEmail;εισαγωγή java.util.Properties;εισαγωγή javax.activation.DataHandler;εισαγωγή javax.activation.DataSource;εισαγωγή javax.activation.FileDataSource;εισαγωγή javax.mail.BodyPart;εισαγωγή javax.mail.Message;εισαγωγή javax.mail.MessagingException;εισαγωγή javax.mail.Multipart;εισαγωγή javax.mail.Session;εισαγωγή javax.mail.Transport;εισαγωγή javax.mail.internet.AddressException;εισαγωγή javax.mail.internet.InternetAddress;εισαγωγή javax.mail.internet.MimeBodyPart;εισαγωγή javax.mail.internet.MimeMessage;εισαγωγή javax.mail.internet.MimeMultipart;εισαγωγή org.openqa.selenium.WebDriver;εισαγωγή org.testng.Assert;εισαγωγή org.testng.annotations.AfterSuite;εισαγωγή org.testng.annotations.Listeners;εισαγωγή org.testng.annotations.Test;ρεπόρτερ εισαγωγής.JyperionListener;// Προσθήκη ακροατή για τη δημιουργία αναφορών pdf@Listeners (JyperionListener.class)δημόσια τάξη TestGuru99PDFReport επεκτείνει το BaseClass {Πρόγραμμα οδήγησης WebDriver;// Η δοκιμαστική δοκιμασία απέτυχε, έτσι δημιουργήθηκε η λήψη οθόνης@Δοκιμήpublic void testPDFReportOne () {πρόγραμμα οδήγησης = BaseClass.getDriver ();driver.get ("http://google.com");Assert.assertTrue (false);}// Η δοκιμαστική δοκιμασία απέτυχε, έτσι δημιουργήθηκε η λήψη οθόνης@Δοκιμήpublic void testPDFReporTwo () {πρόγραμμα οδήγησης = BaseClass.getDriver ();driver.get ("http: /guru99.com");Assert.assertTrue (false);}// Η δοκιμαστική θήκη θα περάσει, οπότε δεν θα γίνει λήψη οθόνης@Δοκιμήpublic void testPDFReportThree () {πρόγραμμα οδήγησης = 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 και τον κωδικό πρόσβασης
 // Μετά την πλήρη εκτέλεση, στείλτε αναφορά pdf μέσω email@AfterSuiteδημόσιο άκυρο δάκρυ () {sendPDFReportByGMail (" Αυτή η διεύθυνση ηλεκτρονικού ταχυδρομείου προστατεύεται από κακόβουλη χρήση. Χρειάζεται να ενεργοποιήσετε τη JavaScript για να τη δείτε.", "κωδικός πρόσβασης", "This email address is being protected from spambots. You need JavaScript enabled to view it.", "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.

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

Περίληψη:

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

Πραγματοποιήστε λήψη του Selenium Project Files για την επίδειξη σε αυτό το σεμινάριο