Personalizza, PDF e amp; Invia rapporti TestNG tramite e-mail in Selenium WebDriver

Sommario:

Anonim

Prima di esaminare qualsiasi altra cosa, dobbiamo prima capire:

Perché abbiamo bisogno di segnalazioni?

Quando utilizziamo Selenium o qualsiasi altro strumento di automazione, eseguiamo operazioni sull'applicazione web. Ma il nostro scopo dell'automazione non è solo quello di esercitare l'applicazione sotto test. Noi, in qualità di tester di automazione, dovremmo testare l'applicazione, trovare bug e segnalarli al team di sviluppo o al management superiore. Qui il reporting assume importanza per il processo di test del software

Reporting di TestNG

La libreria TestNG fornisce una funzione di reporting molto utile. Dopo l'esecuzione, Testng genererà una cartella di output del test nella radice del progetto. Questa cartella contiene due tipi di rapporti:

Index.html: questo è il report completo dell'esecuzione corrente che contiene informazioni come un errore, gruppi, ora, log reporter, file XML di test.

emailable-report.html: questo è il report riepilogativo dell'esecuzione del test corrente che contiene il messaggio Test Case in verde (per casi di test superati) e rosso (per casi di test non riusciti).

Come personalizzare il report TestNG

I report di TestNG sono abbastanza utili, ma a volte abbiamo bisogno di meno dati nei report o vogliamo visualizzare i report in qualche altro formato come pdf, excel, ecc.

Ci possono essere due modi per personalizzare il report TestNG

  • Utilizzo dell'interfaccia ITestListener:
  • Utilizzo dell'interfaccia IReporter:

Interfaccia ITestListener

Usiamo questa interfaccia quando abbiamo bisogno di personalizzare il report in tempo reale. In altre parole, se stiamo eseguendo il gruppo di casi di test in una suite TetNG e vogliamo ottenere il report di ogni caso di test, dopo ogni caso di test dobbiamo implementare l'interfaccia ITestListener. Questa interfaccia sovrascriverà il metodo onTestFailure, onTestStart, onTestSkipped per inviare lo stato corretto del test case corrente.

Ecco i passaggi che seguiremo

  • Crea una classe di dire RealGuru99Report e implementa iTestListener in essa.
  • Implementa i metodi di iTestListener
  • Crea un metodo di prova e aggiungi la classe RealGuru99Report come listener nella classe Metodo di prova.

Esempio di codice

RealGuru99TimeReport.java è la classe di reporting in tempo reale. Implementerà l'interfaccia ITestListener per il reporting

pacchetto testNGReport.realTimeReport;import org.testng.ITestContext;import org.testng.ITestListener;import org.testng.ITestResult;public class RealGuru99TimeReport implementa ITestListener {@Oltrepassarepublic void onStart (ITestContext arg0) {System.out.println ("Start Of Execution (TEST) ->" + arg0.getName ());}@Oltrepassarepublic void onTestStart (ITestResult arg0) {System.out.println ("Test avviato ->" + arg0.getName ());}@Oltrepassarepublic void onTestSuccess (ITestResult arg0) {System.out.println ("Test Pass ->" + arg0.getName ());}@Oltrepassarepublic void onTestFailure (ITestResult arg0) {System.out.println ("Test fallito ->" + arg0.getName ());}@Oltrepassarepublic void onTestSkipped (ITestResult arg0) {System.out.println ("Test saltato ->" + arg0.getName ());}@Oltrepassarepublic void onFinish (ITestContext arg0) {System.out.println ("END Of Execution (TEST) ->" + arg0.getName ());}@Oltrepassarepublic void onTestFailedButWithinSuccessPercentage (ITestResult arg0) {// TODO Stub del metodo generato automaticamente}}

TestGuru99RealReport.java è il banco di prova per un rapporto reale

pacchetto testNGReport.realTimeReport;import org.testng.Assert;import org.testng.annotations.Listeners;import org.testng.annotations.Test;@Listeners (RealGuru99TimeReport.class)public class TestGuru99RealReport {@Testpublic void testRealReportOne () {Assert.assertTrue (true);}@Testpublic void testRealReportTwo () {Assert.assertTrue (false);}// Il test case dipende dal testcase fallito = testRealReportTwo@Test (dependOnMethods = "testRealReportTwo")public void testRealReportThree () {}}

L'output sarà simile a:

Interfaccia IReporter

Se vogliamo personalizzare il rapporto di prova finale generato da TestNG, dobbiamo implementare l'interfaccia IReporter. Questa interfaccia ha un solo metodo per implementare generateReport. Questo metodo ha tutte le informazioni per un'esecuzione di test completa nella List e possiamo generare il report usandolo.

Esempio di codice

Guru99Reporter.java è il file utilizzato per personalizzare il report

pacchetto 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 implementa IReporter {@Oltrepassarepublic void generateReport (List  arg0, List  arg1,String outputDirectory) {// Secondo parametro di questo metodo ISuite conterrà tutta la suite eseguita.per (ISuite iSuite: arg1) {// Ottieni una mappa dei risultati di una singola suite alla voltaMap  results = iSuite.getResults ();// Ottieni la chiave della mappa dei risultatiSet  keys = results.keySet ();// Vai a ogni valore della mappa uno per unofor (String key: keys) {// L'oggetto Context del risultato correnteContesto ITestContext = risultati.get (chiave) .getTestContext ();// Stampa i dettagli della suite in ConsoleSystem.out.println ("Suite Name ->" + context.getName ()+ ":: Directory di output del report ->" + context.getOutputDirectory ()+ ":: Suite Name ->" + context.getSuite (). GetName ()+ ":: Data di inizio Ora per l'esecuzione ->" + context.getStartDate ()+ ":: End Date Time for execution ->" + context.getEndDate ());// Ottieni mappa solo per i casi di test non riuscitiIResultMap resultMap = context.getFailedTests ();// Ottiene i dettagli del metodo dei casi di test non riuscitiRaccolta  failedMethods = resultMap.getAllMethods ();// Loop uno per uno in tutti i metodi fallitiSystem.out.println ("-------- CASO DI PROVA NON RIUSCITA ---------");for (ITestNGMethod iTestNGMethod: failedMethods) {// Stampa i dettagli dei casi di test non riuscitiSystem.out.println ("TESTCASE NAME ->" + iTestNGMethod.getMethodName ()+ "\ nDescription ->" + iTestNGMethod.getDescription ()+ "\ nPriority ->" + iTestNGMethod.getPriority ()+ "\ n: Date ->" + nuova data (iTestNGMethod.getDate ()));}}}}}

TestGuru99ForReporter.java è una demo per i rapporti personalizzati

pacchetto testNGReport.iReporterReport;import org.testng.Assert;import org.testng.annotations.Listeners;import org.testng.annotations.Test;// Aggiungi un listener al report di ascolto e scriverlo al termine del testcas@Listeners (valore = Guru99Reporter.class)public class TestGuru99ForReporter {@Test (priorità = 0, descrizione = "testReporterOne")public void testReporterOne () {// Passa il test caseAssert.assertTrue (true);}@Test (priorità = 1, descrizione = "testReporterTwo")public void testReporterTwo () {// Caso di test fallitoAssert.assertTrue (false);}}

L'output sarà come-

PDF ed e-mail di report

L'implementazione del report di cui sopra è abbastanza semplice e chiara per iniziare con la personalizzazione del report.

Ma in ambiente aziendale, sarà necessario creare report altamente personalizzati. Ecco lo scenario di cui ci occuperemo

  1. Crea report personalizzato in formato PDF
  2. Acquisisci screenshot SOLO sugli errori. Link agli screenshot in PDF
  3. Invia e-mail del PDF

Il rapporto PDF ha questo aspetto

Per creare un report pdf abbiamo bisogno di un'API Java IText . Scaricalo qui. C'è un'altra classe di listener personalizzata che sta effettivamente implementando questo jar IText e creando un report pdf per noi. Scaricalo qui

La figura sopra mostra il formato predefinito del report PDF generato. Puoi personalizzarlo

Ecco come ci avvicineremo a questo

Passaggio 1) Crea una classe base

Passaggio 2) Personalizza JypersionListerner.Java (codice di creazione PDF)

Passaggio 3) Crea un TestGuru99PDFEmail.java che eseguirà casi di test, crea PDF

Passaggio 4) Aggiungi il codice a TestGuru99PDFEmail.java per inviare il rapporto PDF tramite e-mail

Esaminiamo questi passaggi

Passaggio 1) Crea classe base

Questa classe di base ha funzioni per creare WebDriver e Take Screenshot

pacchetto 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 {driver WebDriver statico;public static WebDriver getDriver () {if (driver == null) {Driver WebDriver;System.setProperty ("webdriver.gecko.driver", "C: \\ geckodriver.exe");driver = nuovo FirefoxDriver ();}autista di ritorno;}/ *** Questa funzione acquisirà uno screenshot* @param webdriver* @param fileWithPath* @throws Eccezione* /public static void takeSnapShot (WebDriver webdriver, String fileWithPath) genera un'eccezione {// Converte l'oggetto del driver web in TakeScreenshotTakesScreenshot scrShot = ((TakesScreenshot) webdriver);// Chiama il metodo getScreenshotAs per creare il file immagineFile SrcFile = scrShot.getScreenshotAs (OutputType.FILE);// Sposta il file immagine nella nuova destinazioneFile DestFile = nuovo file (fileWithPath);// Copia il file nella destinazioneFileUtils.copyFile (SrcFile, DestFile);}}

Passaggio 2) Personalizza JypersionListener.java

Resteremo fedeli al formato di report predefinito. Ma faremo 2 personalizzazioni

  • Aggiunta di codice per istruire JypersionListener a fare screenshot in caso di errore
  • Allegando il link della cattura dello screenshot nel report PDF

Aggiungi il codice per allegare lo screenshot al report PDF

Passaggio 3) Crea un TestGuru99PDFEmail.java che eseguirà casi di test, crea PDF

  • Qui aggiungeremo JyperionListener.class come listener
  • Eseguiremo 3 casi di test.
  • Utilizzando Assert.assertTrue falliremo 2 casi di test mentre ne supereremo solo uno.
  • Gli screenshot verranno presi per i casi di test falliti solo secondo le nostre personalizzazioni
pacchetto 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;// Aggiungi listener per la generazione di report pdf@Listeners (JyperionListener.class)public class TestGuru99PDFReport estende BaseClass {Driver WebDriver;// Testcase non riuscito, quindi viene generata la schermata@Testpublic void testPDFReportOne () {driver = BaseClass.getDriver ();driver.get ("http://google.com");Assert.assertTrue (false);}// Testcase non riuscito, quindi viene generata la schermata@Testpublic void testPDFReporTwo () {driver = BaseClass.getDriver ();driver.get ("http: /guru99.com");Assert.assertTrue (false);}// Il test case di prova verrà superato, quindi nessuna schermata su di esso@Testpublic void testPDFReportThree () {driver = BaseClass.getDriver ();driver.get ("http://demo.guru99.com");Assert.assertTrue (true);}

Passaggio 4) Aggiungi il codice a TestGuru99PDFEmail.java per inviare il rapporto PDF tramite e-mail

  • Useremo l'annotazione @AfterSuite per inviare e-mail del report PDF
  • Invieremo e-mail utilizzando Gmail
  • Per abilitare la posta elettronica, è necessario importare molti file di libreria come mail.jar, pop3.jar, smptp.jar, ecc
  • Prima di eseguire questa operazione, immettere l'indirizzo e-mail e la password da, a
 // Dopo l'esecuzione completa, inviare il report in formato PDF tramite e-mail@AfterSuitepublic void tearDown () {sendPDFReportByGMail (" Questo indirizzo email è protetto dagli spambots. Devi abilitare JavaScript per vederlo.", "password", "Questo indirizzo email è protetto dagli spambots. È necessario abilitare JavaScript per vederlo. "," PDF Report "," ");} / ** * Invia e-mail utilizzando java * @param da * @param pass * @param a * @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 ", da); props.put (" mail.smtp.password ", pass); props.put (" mail.smtp.port "," 587 "); props.put (" mail.smtp.auth "," true "); Session session = Session.getDefaultInstance (props); MimeMessage messaggio = nuovo MimeMessage (sessione);prova {// Set from address message.setFrom (new InternetAddress (from)); message.addRecipient (Message.RecipientType.TO, new InternetAddress (to)); // Imposta oggetto message.setSubject (subject); message.setText (corpo); BodyPart objMessageBodyPart = nuovo MimeBodyPart (); objMessageBodyPart.setText ("Trova il file del rapporto allegato!"); Multipart multipart = new MimeMultipart (); multipart.addBodyPart (objMessageBodyPart); objMessageBodyPart = nuovo MimeBodyPart (); // Imposta il percorso del file di report pdf String filename = System.getProperty ("user.dir") + "\\ Default test.pdf"; // Crea un'origine dati per allegare il file nella posta DataSource source = new FileDataSource (filename); objMessageBodyPart.setDataHandler (nuovo DataHandler (origine)); objMessageBodyPart.setFileName (nomefile); multipart.addBodyPart (objMessageBodyPart); Messaggio.setContent (multipart); Trasporto trasporto = 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 (); }}}

Scarica qui il progetto completo

Nota: quando si fa clic sul collegamento della schermata in pdf, viene visualizzata la finestra di dialogo di sicurezza. Dobbiamo consentire a questa finestra di dialogo di aprire il pdf.

L'email così generata sarà simile a questa

Sommario:

  • TestNG ha una capacità di reporting incorporata in esso.
  • Dopo un'esecuzione completa dei casi di test, TestNG genera una cartella di output del test nella radice del progetto.
  • Nella cartella dell'output del test sono presenti due report principali, index.html e emailable-report.html.
  • Per personalizzare il report TestNG è necessario implementare due interfacce, ITestListener e IReporter.
  • Se abbiamo bisogno di ottenere un rapporto tra l'esecuzione, abbiamo bisogno di ITestListener.
  • Per creare un report finale dopo l'esecuzione completa, è necessario implementare IReporter.
  • Facendo lo screenshot, in Selenium WebDriver, dobbiamo digitare cast WebDriver nell'interfaccia di TakesScreenShot.
  • Per generare report pdf dobbiamo aggiungere IText jar nel progetto.

Scarica i file di progetto Selenium per la demo in questo tutorial