Anpassa, PDF & Skicka e-post till TestNG-rapporter i Selen WebDriver

Innehållsförteckning:

Anonim

Innan vi tittar på något annat, låt oss först förstå -

Varför behöver vi rapportera?

När vi använder Selenium eller något annat automatiseringsverktyg utför vi åtgärder på webbapplikationen. Men vårt syfte med automatisering är inte bara att utöva applikationen under test. Vi, som automatiseringstestare, ska testa applikationen, hitta fel och rapportera det till utvecklingsteamet eller högre ledning. Här blir rapporteringen viktig för testprocessen för programvara

TestNG-rapportering

TestNG-biblioteket erbjuder en mycket praktisk rapporteringsfunktion. Efter körning genererar Testng en test-output-mapp i projektets rot. Den här mappen innehåller två typer av rapporter -

Index.html: Detta är den fullständiga rapporten om aktuell körning som innehåller information som ett fel, grupper, tid, reporterloggar, testng XML-filer.

emailable-report.html: Detta är en sammanfattningsrapport om den aktuella testkörningen som innehåller Testfall-meddelandet i grönt (för godkända testfall) och rött (för misslyckade testfall).

Hur man anpassar TestNG-rapporten

TestNG-rapportering är ganska praktiskt men ändå behöver vi ibland lite mindre data i rapporter eller vill visa rapporter i något annat format som pdf, excel etc. eller vill ändra rapportens layout.

Det kan finnas två sätt att anpassa TestNG-rapporten

  • Använda ITestListener-gränssnittet:
  • Använda IReporter-gränssnitt:

ITestListener-gränssnitt

Vi använder detta gränssnitt när vi behöver anpassa rapport i realtid. Med andra ord, om vi kör en massa testfall i en TetNG-svit och vi vill få rapporter om varje testfall, så måste vi efter varje testfall implementera ITestListener-gränssnittet. Detta gränssnitt kommer att åsidosätta onTestFailure, onTestStart, onTestSkipped-metoden för att skicka rätt status för det aktuella testfallet.

Här är stegen vi kommer att följa

  • Skapa en klass säger RealGuru99Report och implementera iTestListener i den.
  • Implementera metoder för iTestListener
  • Skapa testmetod och lägg till RealGuru99Report-klass som lyssnare i testmetodklassen.

Kodexempel

RealGuru99TimeReport.java är klass i realtid. Det kommer att implementera ITestListener-gränssnittet för rapportering

paket testNGReport.realTimeReport;importera org.testng.ITestContext;importera org.testng.ITestListener;importera org.testng.ITestResult;offentlig klass RealGuru99TimeReport implementerar ITestListener {@Åsidosättaoffentligt ogiltigt onStart (ITestContext arg0) {System.out.println ("Start of Execution (TEST) ->" + arg0.getName ());}@Åsidosättaoffentligt ogiltigt onTestStart (ITestResult arg0) {System.out.println ("Test Started ->" + arg0.getName ());}@Åsidosättaoffentligt ogiltigt onTestSuccess (ITestResult arg0) {System.out.println ("Test Pass ->" + arg0.getName ());}@Åsidosättaoffentligt ogiltigt onTestFailure (ITestResult arg0) {System.out.println ("Test misslyckades ->" + arg0.getName ());}@Åsidosättaoffentligt ogiltigt onTestSkipped (ITestResult arg0) {System.out.println ("Test hoppades över ->" + arg0.getName ());}@Åsidosättapublic void onFinish (ITestContext arg0) {System.out.println ("END Of Execution (TEST) ->" + arg0.getName ());}@Åsidosättapublic void onTestFailedButWithinSuccessPercentage (ITestResult arg0) {// TODO Auto-genererad metodstub}}

TestGuru99RealReport.java är testfallet för verklig rapport

paket testNGReport.realTimeReport;importera org.testng.Assert;importera org.testng.annotations.Listeners;importera org.testng.annotations.Test;@Listeners (RealGuru99TimeReport.class)offentlig klass TestGuru99RealReport {@Testapublic void testRealReportOne () {Assert.assertTrue (true);}@Testapublic void testRealReportTwo () {Assert.assertTrue (false);}// Testfall beror på misslyckad testcase = testRealReportTwo@Test (beroendeOnMethods = "testRealReportTwo")public void testRealReportThree () {}}

Resultatet ser ut som-

IReportergränssnitt

Om vi ​​vill anpassa den slutliga testrapporten som genereras av TestNG måste vi implementera IReporter-gränssnittet. Det här gränssnittet har bara en metod att implementera genereraReport. Den här metoden har all information om en fullständig testkörning i listan , och vi kan generera rapporten med den.

Kodexempel

Guru99Reporter.java är filen som används för att anpassa rapporten

paket testNGReport.iReporterReport;importera java.util.Collection;importera java.util.Date;importera java.util.List;importera java.util.Map;importera java.util.Set;importera org.testng.IReporter;importera org.testng.IResultMap;importera org.testng.ISuite;importera org.testng.ISuiteResult;importera org.testng.ITestContext;importera org.testng.ITestNGMethod;importera org.testng.xml.XmlSuite;offentlig klass Guru99Reporter implementerar IReporter {@Åsidosättapublic void generateReport (List  arg0, List  arg1,String outputDirectory) {// Den andra parametern för den här metoden ISuite kommer att innehålla alla körade sviter.för (ISuite iSuite: arg1) {// Få en karta över resultatet av en enda svit i tagetKarta  results = iSuite.getResults ();// Hämta nyckeln till resultatkartanStäll in  -tangenter = resultat.keySet ();// Gå till varje kartvärde en efter enför (Strängnyckel: tangenter) {// Kontextobjektet för aktuellt resultatITestContext context = results.get (key) .getTestContext ();// Skriv ut svitdetaljer i konsolenSystem.out.println ("Suite Name ->" + context.getName ()+ ":: Rapportera utdata Ditectory ->" + context.getOutputDirectory ()+ ":: Suite Name ->" + context.getSuite (). GetName ()+ ":: Startdatum Tid för körning ->" + context.getStartDate ()+ ":: Slutdatum för körning ->" + context.getEndDate ());// Skaffa karta för endast misslyckade testfallIResultMap resultMap = context.getFailedTests ();// Få metodinformation om misslyckade testfallSamling  failedMethods = resultMap.getAllMethods ();// Loop en efter en i alla misslyckade metoderSystem.out.println ("-------- FAILED TEST CASE ---------");för (ITestNGMethod iTestNGMethod: failedMethods) {// Skriv ut misslyckade testfallsdetaljerSystem.out.println ("TESTCASE NAME ->" + iTestNGMethod.getMethodName ()+ "\ nBeskrivning ->" + iTestNGMethod.getDescription ()+ "\ nPrioritet ->" + iTestNGMethod.getPriority ()+ "\ n: Datum ->" + nytt datum (iTestNGMethod.getDate ()));}}}}}

TestGuru99ForReporter.java är en demo för anpassad rapportering

paket testNGReport.iReporterReport;importera org.testng.Assert;importera org.testng.annotations.Listeners;importera org.testng.annotations.Test;// Lägg till lyssnaren för att lyssna på rapporten och skriv den när testcas är klar@Listeners (värde = Guru99Reporter.class)allmän klass TestGuru99ForReporter {@Test (prioritet = 0, beskrivning = "testReporterOne")public void testReporterOne () {// Godkänn testfallAssert.assertTrue (true);}@Test (prioritet = 1, beskrivning = "testReporterTwo")public void testReporterTwo () {// Misslyckat testfallAssert.assertTrue (false);}}

Produktionen kommer att vara som-

PDF och e-post med rapporter

Ovanstående rapportimplementering är ganska enkel och tydlig för att komma igång med rapportanpassning.

Men i företagsmiljön måste du skapa mycket anpassade rapporter. Här är scenariot vi kommer att hantera

  1. Skapa anpassad rapport i PDF-format
  2. Ta ENDAST skärmdumpar vid fel. Länk till skärmdumpar i PDF
  3. Skicka e-post till PDF-filen

PDF-rapporten ser ut så här

För att skapa pdf-rapport behöver vi en Java API IText . Ladda ner den här. Det finns en annan anpassad lyssnarklass som faktiskt implementerar denna IText-burk och skapar en pdf-rapport för oss. Ladda ner den här

Ovanstående figur visar standardformatet för den genererade PDF-rapporten. Du kan anpassa den

Så här kommer vi att närma oss detta

Steg 1) Skapa en basklass

Steg 2) Anpassa JypersionListerner.Java (PDF-skapelsekod)

Steg 3) Skapa en TestGuru99PDFEmail.java som kör testfall, skapa PDF

Steg 4) Lägg till kod till TestGuru99PDFEmail.java för att skicka PDF-rapport via e-post

Låt oss titta på dessa steg

Steg 1) Skapa basklass

Denna basklass har funktioner för att skapa WebDriver och Ta skärmdump

paket PDFEmail;importera java.io.File;importera org.apache.commons.io.FileUtils;importera org.openqa.selenium.OutputType;importera org.openqa.selenium.TakesScreenshot;importera org.openqa.selenium.WebDriver;importera org.openqa.selenium.firefox.FirefoxDriver;offentlig klass BaseClass {statisk WebDriver-drivrutin;offentlig statisk WebDriver getDriver () {om (förare == null) {WebDriver-drivrutin;System.setProperty ("webdriver.gecko.driver", "C: \\ geckodriver.exe");drivrutin = ny FirefoxDriver ();}returförare;}/ *** Denna funktion tar en skärmdump* @param webdriver* @param fileWithPath* @ kastar undantag* /public static void takeSnapShot (WebDriver webdriver, String fileWithPath) kastar Undantag {// Konvertera webbdrivrutinsobjekt till TakeScreenshotTakesScreenshot scrShot = (((TakesScreenshot) webdriver);// Anropa getScreenshotAs-metoden för att skapa en bildfilFil SrcFile = scrShot.getScreenshotAs (OutputType.FILE);// Flytta bildfilen till en ny destinationFile DestFile = ny fil (fileWithPath);// Kopiera fil vid destinationFileUtils.copyFile (SrcFile, DestFile);}}

Steg 2) Anpassa JypersionListener.java

Vi håller fast vid standardrapportformatet. Men vi kommer att göra två anpassningar

  • Lägga till kod för att instruera JypersionListener att ta skärmdump på Fel
  • Att bifoga länken till skärmdumpen tar du i PDF-rapporten

Lägg till kod för att bifoga skärmdumpen till PDF-rapporten

Steg 3) Skapa en TestGuru99PDFEmail.java som kör testfall, skapa PDF

  • Här lägger vi till JyperionListener.class som lyssnare
  • Vi utför 3 testfall.
  • Med hjälp av Assert.assertTrue kommer vi att misslyckas med två testfall medan vi klarar bara ett.
  • Skärmdump tas för de misslyckade testfallet endast enligt våra anpassningar
paket PDFEmail;importera java.util.Properties;importera javax.activation.DataHandler;importera javax.activation.DataSource;importera javax.activation.FileDataSource;importera javax.mail.BodyPart;importera javax.mail.Message;importera javax.mail.MessagingException;importera javax.mail.Multipart;importera javax.mail.Session;importera javax.mail.Transport;importera javax.mail.internet.AddressException;importera javax.mail.internet.InternetAddress;importera javax.mail.internet.MimeBodyPart;importera javax.mail.internet.MimeMessage;importera javax.mail.internet.MimeMultipart;importera org.openqa.selenium.WebDriver;importera org.testng.Assert;importera org.testng.annotations.AfterSuite;importera org.testng.annotations.Listeners;importera org.testng.annotations.Test;importreporter.JyperionListener;// Lägg till lyssnare för generering av pdf-rapporter@Listeners (JyperionListener.class)offentlig klass TestGuru99PDFReport utökar BaseClass {WebDriver-drivrutin;// Testcase misslyckades så att skärmdump genereras@Testaoffentligt ogiltigt testPDFReportOne () {driver = BaseClass.getDriver ();driver.get ("http://google.com");Assert.assertTrue (false);}// Testcase misslyckades så att skärmdump genereras@Testaoffentligt ogiltigt testPDFReporTwo () {driver = BaseClass.getDriver ();driver.get ("http: /guru99.com");Assert.assertTrue (false);}// Test testfall kommer att vara godkänt, så ingen skärmdump på den@Testaoffentligt ogiltigt testPDFReportThree () {driver = BaseClass.getDriver ();driver.get ("http://demo.guru99.com");Assert.assertTrue (true);}

Steg 4) Lägg till kod till TestGuru99PDFEmail.java för att skicka PDF-rapport via e-post

  • Vi kommer att använda anteckningen @ AfterSuite för att skicka e-post av PDF-rapporten
  • Vi skickar e-post med Gmail
  • För att aktivera e-post måste du importera många biblioteksfiler som mail.jar, pop3.jar, smptp.jar, etc.
  • Innan du utför detta, ange från, till e-postadress och lösenord
 // Efter fullständig utförande skicka pdf-rapport via e-post@AfterSuiteoffentligt ogiltigt rivsnittsendPDFReportByGMail ("Den här e-postadressen är skyddad från spamrobotar. Du måste ha Javascript aktiverat för att visa det.", "password", "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(); } } }

Ladda ner hela projektet här

Obs! När vi klickar på skärmbildslänken i pdf, visas säkerhetsdialogrutan. Vi måste tillåta att denna dialog öppnar pdf.

E-postmeddelandet som genereras kommer att se ut så här

Sammanfattning:

  • TestNG har en inbyggd rapporteringsförmåga i den.
  • Efter ett fullständigt genomförande av testfall genererar TestNG en test-output-mapp i projektets rot.
  • I testutmatningsmappen finns två huvudrapporter, index.html och e-postbar-rapport.html.
  • För att anpassa TestNG-rapporten måste vi implementera två gränssnitt, ITestListener och IReporter.
  • Om vi ​​behöver få en rapport mellan utförandet behöver vi ITestListener.
  • För att skapa en slutrapport efter fullständig körning måste vi implementera IReporter.
  • När vi tar skärmdumpen i Selenium WebDriver, måste vi skriva cast WebDriver till TakesScreenShot-gränssnittet.
  • För att skapa pdf-rapporter måste vi lägga till IText jar i projektet.

Ladda ner Selenium-projektfilerna för demo i den här självstudien