Înainte să analizăm orice altceva, să înțelegem mai întâi -
De ce avem nevoie de raportare?
Când folosim Selenium sau orice alt instrument de automatizare, efectuăm operațiuni pe aplicația web. Dar scopul nostru de automatizare nu este doar să exercităm aplicația sub test. Noi, ca tester de automatizare, ar trebui să testăm aplicația, să găsim erori și să o raportăm echipei de dezvoltare sau conducerii superioare. Aici raportarea capătă importanță pentru procesul de testare software
Raportarea TestNG
Biblioteca TestNG oferă o funcție de raportare foarte utilă. După executare, Testng va genera un folder de testare-ieșire la rădăcina proiectului. Acest folder conține două tipuri de rapoarte-
Index.html: Acesta este raportul complet al execuției curente, care conține informații cum ar fi o eroare, grupuri, timp, jurnale de raportare, testarea fișierelor XML.
emailable-report.html: Acesta este raportul de sinteză al execuției curente a testului care conține mesajul Test Case în verde (pentru cazurile de testare trecute) și roșu (pentru cazurile de test nereușite).
Cum se personalizează raportul TestNG
Raportarea TestNG este destul de utilă, dar totuși, uneori avem nevoie de mai puține date în rapoarte sau dorim să afișăm rapoarte în alt format, cum ar fi pdf, excel etc. sau dorim să schimbăm aspectul raportului.
Există două moduri în care putem personaliza raportul TestNG
- Utilizarea interfeței ITestListener:
- Utilizarea interfeței IReporter:
Interfața ITestListener
Folosim această interfață atunci când trebuie să personalizăm raportul în timp real. Cu alte cuvinte, dacă executăm o grămadă de cazuri de testare într-o suită TetNG și dorim să obținem raportul fiecărui caz de testare, atunci după fiecare caz de testare trebuie să implementăm interfața ITestListener. Această interfață va suprascrie metoda onTestFailure, onTestStart, onTestSkipped pentru a trimite starea corectă a cazului de test curent.
Iată pașii pe care îi vom urma
- Creați o clasă spuneți RealGuru99Report și implementați iTestListener în ea.
- Implementați metode iTestListener
- Creați o metodă de testare și adăugați clasa RealGuru99Report ca ascultător în clasa Metodă de testare.
Exemplu de cod
RealGuru99TimeReport.java este clasa de raportare în timp real. Acesta va implementa interfața ITestListener pentru raportare
pachet testNGReport.realTimeReport;import org.testng.ITestContext;import org.testng.ITestListener;import org.testng.ITestResult;public class RealGuru99TimeReport implementează ITestListener {@Trece pestepublic void onStart (ITestContext arg0) {System.out.println ("Start Of Execution (TEST) ->" + arg0.getName ());}@Trece pestepublic void onTestStart (ITestResult arg0) {System.out.println ("Testul a început ->" + arg0.getName ());}@Trece pestepublic void onTestSuccess (ITestResult arg0) {System.out.println ("Test Pass ->" + arg0.getName ());}@Trece pestepublic void onTestFailure (ITestResult arg0) {System.out.println ("Testul nu a reușit ->" + arg0.getName ());}@Trece pestepublic void onTestSkipped (ITestResult arg0) {System.out.println ("Test omis ->" + arg0.getName ());}@Trece pestepublic void onFinish (ITestContext arg0) {System.out.println ("END of Execution (TEST) ->" + arg0.getName ());}@Trece pestepublic void onTestFailedButWithinSuccessPercentage (ITestResult arg0) {// TODO Metoda generată automat}}
TestGuru99RealReport.java este cazul testului pentru raportul real
pachet 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 (adevărat);}@Testpublic void testRealReportTwo () {Assert.assertTrue (fals);}// Cazul de testare depinde de testcase nereușite = testRealReportTwo@Test (depindeOnMetode = "testRealReportTwo")public void testRealReportThree () {}}
Ieșirea va arăta ca-
Interfață IReporter
Dacă dorim să personalizăm raportul final de testare generat de TestNG, trebuie să implementăm interfața IReporter. Această interfață are o singură metodă pentru a implementa generateReport. Această metodă conține toate informațiile despre o execuție completă a testului în Lista
Exemplu de cod
Guru99Reporter.java este fișierul utilizat pentru personalizarea raportului
pachet 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;clasa publică Guru99Reporter implementează IReporter {@Trece pestepublic void generateReport (Listarg0, List arg1,Șir de ieșireDirectory) {// Al doilea parametru al acestei metode ISuite va conține toată suita executată.pentru (ISuite iSuite: arg1) {// Obțineți o hartă a rezultatului unei singure suite la un moment datMap results = iSuite.getResults ();// Obțineți cheia hărții rezultatelorSetați chei = results.keySet ();// Accesați fiecare valoare a hărții unul câte unulpentru (Tasta șir: chei) {// Obiectul contextual al rezultatului curentITestContext context = results.get (cheie) .getTestContext ();// Imprimați detaliile Suite în ConsolăSystem.out.println ("Nume suită ->" + context.getName ()+ ":: Report output Ditectory ->" + context.getOutputDirectory ()+ ":: Nume suită ->" + context.getSuite (). GetName ()+ ":: Data de început Ora de execuție ->" + context.getStartDate ()+ ":: Data de încheiere Ora pentru execuție ->" + context.getEndDate ());// Obțineți harta numai pentru cazurile de test nereușiteIResultMap resultMap = context.getFailedTests ();// Obțineți detaliile metodei cazurilor de test nereușiteColecția failedMethods = resultMap.getAllMethods ();// Buclați unul câte unul în toate metodele eșuateSystem.out.println ("-------- CAZ DE TEST EȘUAT ---------");pentru (ITestNGMethod iTestNGMethod: failedMethods) {// Imprimați detaliile cazurilor de testare nereușiteSystem.out.println ("NUME TESTCASE ->" + iTestNGMethod.getMethodName ()+ "\ nDescriere ->" + iTestNGMethod.getDescription ()+ "\ nPriority ->" + iTestNGMethod.getPriority ()+ "\ n: Data ->" + Data nouă (iTestNGMethod.getDate ()));}}}}}
TestGuru99ForReporter.java este o demonstrație pentru raportarea personalizată
pachet testNGReport.iReporterReport;import org.testng.Assert;import org.testng.annotations.Listeners;import org.testng.annotations.Test;// Adăugați ascultător pentru a asculta raportul și scrieți-l la finalizarea testelor@Listeners (value = Guru99Reporter.class)public class TestGuru99ForReporter {@Test (prioritate = 0, descriere = "testReporterOne")public void testReporterOne () {// Treceți cazul de testareAssert.assertTrue (adevărat);}@Test (prioritate = 1, descriere = "testReporterTwo")public void testReporterTwo () {// Caz de testare nereușităAssert.assertTrue (fals);}}
Rezultatul va fi ca-
PDF și e-mail al rapoartelor
Implementarea raportului de mai sus este destul de simplă și clară pentru a începe cu personalizarea raportului.
Dar în mediul corporativ, va trebui să creați rapoarte foarte personalizate. Iată scenariul cu care ne vom ocupa
- Creați un raport personalizat în format PDF
- Faceți capturi de ecran NUMAI pe erori. Link către capturi de ecran în PDF
- Trimiteți un e-mail al PDF-ului
Raportul PDF arată astfel
Pentru a crea un raport pdf avem nevoie de un Java API IText . Descarcă-l aici. Există o altă clasă de ascultător personalizat care implementează de fapt acest borcan IText și creează un raport pdf pentru noi. Descarcă-l aici
Figura de mai sus arată formatul implicit al raportului PDF generat. Îl puteți personaliza
Iată cum vom aborda acest lucru
Pasul 1) Creați o clasă de bază
Pasul 2) Personalizați JypersionListerner.Java (cod de creare PDF)
Pasul 3) Creați un TestGuru99PDFEmail.java care va executa cazuri de testare, creați PDF
Pasul 4) Adăugați codul la TestGuru99PDFEmail.java pentru a trimite raportul PDF prin e-mail
Să analizăm acești pași
Pasul 1) Creați clasa de bază
Această clasă de bază are funcții pentru a crea WebDriver și Take Screenshot
pachet 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 static WebDriver;public static WebDriver getDriver () {if (driver == nul) {Driver WebDriver;System.setProperty ("webdriver.gecko.driver", "C: \\ geckodriver.exe");driver = nou FirefoxDriver ();}șofer de întoarcere;}/ *** Această funcție va face captura de ecran* @param webdriver* @param fileWithPath* Excepție @throws* /public static void takeSnapShot (WebDriver webdriver, String fileWithPath) aruncă Excepție {// Convertiți obiectul driverului web în TakeScreenshotTakesScreenshot scrShot = ((TakesScreenshot) webdriver);// Apelați getScreenshot Ca metodă de creare a fișierului imagineFișier SrcFile = scrShot.getScreenshotAs (OutputType.FILE);// Mutați fișierul imagine în destinația nouăFile DestFile = fișier nou (fileWithPath);// Copiați fișierul la destinațieFileUtils.copyFile (SrcFile, DestFile);}}
Pasul 2) Personalizați JypersionListener.java
Vom rămâne cu formatul de raport implicit. Dar vom face 2 personalizări
- Adăugarea codului pentru a instrui JypersionListener să facă capturi de ecran în Eroare
- Atașând linkul capturii de ecran în raportul PDF
Adăugați cod pentru a atașa captura de ecran la raportul PDF
Pasul 3) Creați un TestGuru99PDFEmail.java care va executa cazuri de testare, creați PDF
- Aici vom adăuga JyperionListener.class ca ascultător
- Vom executa 3 cazuri de testare.
- Folosind Assert.assertTrue vom eșua 2 cazuri de testare în timp ce trecem doar unul.
- Captura de ecran va fi făcută pentru cazurile de test nereușite numai conform personalizărilor noastre
pachet 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;// Adăugați un ascultător pentru generarea de rapoarte pdf@Listeners (JyperionListener.class)public class TestGuru99PDFReport extinde BaseClass {Driver WebDriver;// Testcase nu a reușit, astfel încât captura de ecran să genereze@Testpublic void testPDFReportOne () {driver = BaseClass.getDriver ();driver.get („http://google.com”);Assert.assertTrue (fals);}// Testcase nu a reușit, astfel încât captura de ecran să genereze@Testpublic void testPDFReporTwo () {driver = BaseClass.getDriver ();driver.get ("http: /guru99.com");Assert.assertTrue (fals);}// Testul testului va fi trecut, deci nu va fi capturat ecranul@Testpublic void testPDFReportThree () {driver = BaseClass.getDriver ();driver.get ("http://demo.guru99.com");Assert.assertTrue (adevărat);}
Pasul 4) Adăugați codul la TestGuru99PDFEmail.java pentru a trimite raportul PDF prin e-mail
- Vom folosi adnotarea @AfterSuite pentru a trimite un e-mail al raportului PDF
- Vom trimite e-mailuri utilizând Gmail
- Pentru a activa e-mailul, trebuie să importați multe fișiere de bibliotecă, cum ar fi mail.jar, pop3.jar, smptp.jar etc.
- Înainte de a executa acest lucru, introduceți adresa de la, la adresa de e-mail și parola
// După executarea completă, trimiteți raportul pdf prin e-mail@AfterSuitepublic void tearDown () {sendPDFReportByGMail (" Această adresă de e-mail este protejată de spamboți. Aveți nevoie de JavaScript activat pentru ao vizualiza.", "parolă", "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(); } } }
Descărcați proiectul complet aici
Notă: Când facem clic pe linkul capturii de ecran în pdf, acesta afișează dialogul de securitate. Trebuie să permitem acestui dialog să deschidă pdf.
E-mailul astfel generat va arăta astfel
Rezumat:
- TestNG are o capacitate de raportare încorporată.
- După o execuție completă a cazurilor de test, TestNG generează un folder de testare-ieșire în rădăcina proiectului.
- În dosarul de testare-ieșire, există două rapoarte principale, index.html și emailable-report.html.
- Pentru a personaliza raportul TestNG, trebuie să implementăm două interfețe, ITestListener și IReporter.
- Dacă trebuie să obținem un raport între executare, avem nevoie de ITestListener.
- Pentru crearea unui raport final după executarea completă, trebuie să implementăm IReporter.
- Luând captura de ecran, în Selenium WebDriver, trebuie să tastăm cast WebDriver pe interfața TakesScreenShot.
- Pentru a genera rapoarte pdf, trebuie să adăugăm IText jar în proiect.
Descărcați fișierele proiectului Selenium pentru demonstrație în acest tutorial