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
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 (Listarg0, 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
- Crea report personalizzato in formato PDF
- Acquisisci screenshot SOLO sugli errori. Link agli screenshot in PDF
- 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