Tilpass, PDF & Send TestNG-rapporter via e-post i Selenium WebDriver

Innholdsfortegnelse:

Anonim

Før vi ser på noe annet, la oss først forstå -

Hvorfor trenger vi rapportering?

Når vi bruker Selenium eller annet automatiseringsverktøy, utfører vi operasjoner på webapplikasjonen. Men vårt formål med automatisering er ikke bare å utøve Application Under Test. Vi, som automatiseringstester, skal teste applikasjonen, finne feil og rapportere det til utviklingsteamet eller høyere ledelse. Her blir rapporteringen viktig for testprosessen for programvare

TestNG-rapportering

TestNG-biblioteket gir en veldig praktisk rapporteringsfunksjon. Etter kjøring vil Testng generere en test-output-mappe ved roten til prosjektet. Denne mappen inneholder to typer rapporter -

Index.html: Dette er den fullstendige rapporten om gjeldende kjøring som inneholder informasjon som en feil, grupper, tid, reporterlogger, testng XML-filer.

emailable-report.html: Dette er en oppsummeringsrapport over den nåværende testutførelsen som inneholder Test Case-melding i grønt (for bestått testsaker ) og rødt (for mislykkede testsaker).

Hvordan tilpasse TestNG-rapporten

TestNG-rapportering er ganske praktisk, men likevel, noen ganger trenger vi litt mindre data i rapporter eller ønsker å vise rapporter i et annet format som pdf, excel, etc. eller ønsker å endre rapportens layout.

Det kan være to måter vi kan tilpasse TestNG-rapporten på

  • Bruke ITestListener-grensesnitt:
  • Bruke IReporter-grensesnitt:

ITestListener-grensesnitt

Vi bruker dette grensesnittet når vi trenger å tilpasse rapport i sanntid. Med andre ord, hvis vi utfører en rekke testsaker i en TetNG-pakke og vi ønsker å få rapporten om hver testsak, så må vi implementere ITestListener-grensesnittet etter hver testsak. Dette grensesnittet overstyrer onTestFailure, onTestStart, onTestSkipped-metoden for å sende riktig status for gjeldende testsak.

Her er trinnene vi vil følge

  • Lag en klasse si RealGuru99Report og implementer iTestListener i den.
  • Implementere metoder for iTestListener
  • Lag testmetode og legg til RealGuru99Report-klasse som lytter i klasse Test Test.

Kodeeksempel

RealGuru99TimeReport.java er sanntidsrapporteringsklassen. Den vil implementere ITestListener-grensesnittet for rapportering

pakke testNGReport.realTimeReport;importer org.testng.ITestContext;importer org.testng.ITestListener;importer org.testng.ITestResult;offentlig klasse RealGuru99TimeReport implementerer ITestListener {@Overstyringoffentlig tomrom onStart (ITestContext arg0) {System.out.println ("Start Of Execution (TEST) ->" + arg0.getName ());}@Overstyringoffentlig ugyldighet onTestStart (ITestResult arg0) {System.out.println ("Test startet ->" + arg0.getName ());}@Overstyringoffentlig ugyldighet onTestSuccess (ITestResult arg0) {System.out.println ("Test Pass ->" + arg0.getName ());}@Overstyringoffentlig ugyldighet onTestFailure (ITestResult arg0) {System.out.println ("Test mislyktes ->" + arg0.getName ());}@Overstyringoffentlig ugyldig onTestSkipped (ITestResult arg0) {System.out.println ("Test hoppet over ->" + arg0.getName ());}@Overstyringoffentlig tomrom onFinish (ITestContext arg0) {System.out.println ("END Of Execution (TEST) ->" + arg0.getName ());}@Overstyringoffentlig ugyldighet onTestFailedButWithinSuccessPercentage (ITestResult arg0) {// TODO Auto-generert metodestub}}

TestGuru99RealReport.java er testsaken for ekte rapport

pakke testNGReport.realTimeReport;importer org.testng.Assert;importer org.testng.annotations.Listeners;importer org.testng.annotations.Test;@Listeners (RealGuru99TimeReport.class)offentlig klasse TestGuru99RealReport {@Testpublic void testRealReportOne () {Assert.assertTrue (true);}@Testpublic void testRealReportTwo () {Assert.assertTrue (false);}// Test case avhenger av mislykket testcase = testRealReportTwo@Test (avhengerOnMethods = "testRealReportTwo")public void testRealReportThree () {}}

Utgangen vil se ut som-

IReportergrensesnitt

Hvis vi ønsker å tilpasse den endelige testrapporten generert av TestNG, må vi implementere IReporter-grensesnittet. Dette grensesnittet har bare én metode for å implementere genererereport. Denne metoden har all informasjon om en fullstendig testutførelse i listen , og vi kan generere rapporten ved hjelp av den.

Kodeeksempel

Guru99Reporter.java er filen som brukes til å tilpasse rapporten

pakke testNGReport.iReporterReport;importere java.util.Collection;importere java.util.Date;importere java.util.List;importere java.util.Map;importere java.util.Set;importer org.testng.IReporter;importer org.testng.IResultMap;importer org.testng.ISuite;importer org.testng.ISuiteResult;importer org.testng.ITestContext;importer org.testng.ITestNGMethod;importer org.testng.xml.XmlSuite;offentlig klasse Guru99Reporter implementerer IReporter {@Overstyringoffentlig ugyldig generereRapport (Liste  arg0, Liste  arg1,String outputDirectory) {// Andre parameter for denne metoden ISuite inneholder alle kjørte pakker.for (ISuite iSuite: arg1) {// Få et kart over resultatet av en enkelt suite om gangenKart  results = iSuite.getResults ();// Få nøkkelen til resultatkartetSett  -taster = results.keySet ();// Gå til hver kartverdi en etter enfor (strengnøkkel: nøkler) {// Kontekstobjektet til gjeldende resultatITestContext context = results.get (key) .getTestContext ();// Skriv ut Suite-detalj i konsollenSystem.out.println ("Suite Name ->" + context.getName ()+ ":: Rapporter utdata Ditectory ->" + context.getOutputDirectory ()+ ":: Suite-navn ->" + context.getSuite (). GetName ()+ ":: Startdato Tid for utførelse ->" + context.getStartDate ()+ ":: Sluttdato Tid for utførelse ->" + context.getEndDate ());// Få Map for bare mislykkede testsakerIResultMap resultMap = context.getFailedTests ();// Få metodedetaljer av mislykkede testtilfellerSamling  failedMethods = resultMap.getAllMethods ();// Loop en etter en i alle mislykkede metoderSystem.out.println ("-------- MISLAGT TESTSAK ---------");for (ITestNGMethod iTestNGMethod: failedMethods) {// Skriv ut detaljerte testtilfellerSystem.out.println ("TESTCASE NAME ->" + iTestNGMethod.getMethodName ()+ "\ nBeskrivelse ->" + iTestNGMethod.getDescription ()+ "\ nPrioritet ->" + iTestNGMethod.getPriority ()+ "\ n: Date ->" + new Date (iTestNGMethod.getDate ()));}}}}}

TestGuru99ForReporter.java er en demo for tilpasset rapportering

pakke testNGReport.iReporterReport;importer org.testng.Assert;importer org.testng.annotations.Listeners;importer org.testng.annotations.Test;// Legg til lytteren for å lytte rapporten og skriv den når testcas er ferdig@Listeners (verdi = Guru99Reporter.class)offentlig klasse TestGuru99ForReporter {@Test (prioritet = 0, beskrivelse = "testReporterOne")public void testReporterOne () {// Bestå prøvesakenAssert.assertTrue (true);}@Test (prioritet = 1, beskrivelse = "testReporterTwo")public void testReporterTwo () {// Mislykket testsakAssert.assertTrue (false);}}

Produksjonen vil være som-

PDF og e-post av rapporter

Ovennevnte rapportimplementering er ganske enkel og tydelig for å komme i gang med rapporttilpasning.

Men i bedriftsmiljø, må du lage svært tilpassede rapporter. Her er scenariet vi skal forholde oss til

  1. Lag egendefinert rapport i PDF-form
  2. Ta KUN skjermbilder på feil. Lenke til skjermbilder i PDF
  3. Send e-post av PDF-filen

PDF-rapporten ser slik ut

For å lage pdf-rapport trenger vi en Java API IText . Last den ned her. Det er en annen tilpasset lytterklasse som faktisk implementerer denne IText-krukken og lager en pdf-rapport for oss. Last den ned her

Figuren ovenfor viser standardformatet for den genererte PDF-rapporten. Du kan tilpasse det

Slik kommer vi til å nærme oss dette

Trinn 1) Opprett en basisklasse

Trinn 2) Tilpass JypersionListerner.Java (PDF-opprettelseskode)

Trinn 3) Opprett en TestGuru99PDFEmail.java som vil utføre testsaker, opprette PDF

Trinn 4) Legg til koden til TestGuru99PDFEmail.java for å sende PDF-rapport via e-post

La oss se på disse trinnene

Trinn 1) Opprett basisklasse

Denne baseklassen har funksjoner for å lage WebDriver og Take Screenshot

pakke PDFEmail;importere java.io.File;importer org.apache.commons.io.FileUtils;importer org.openqa.selenium.OutputType;importer org.openqa.selenium.TakesScreenshot;importer org.openqa.selenium.WebDriver;importer org.openqa.selenium.firefox.FirefoxDriver;offentlig klasse BaseClass {statisk WebDriver-driver;offentlig statisk WebDriver getDriver () {hvis (driver == null) {WebDriver driver;System.setProperty ("webdriver.gecko.driver", "C: \\ geckodriver.exe");driver = ny FirefoxDriver ();}retur sjåfør;}/ *** Denne funksjonen tar et skjermbilde* @param webdriver* @param fileWithPath* @kaster unntak* /offentlig statisk tomrom takeSnapShot (WebDriver webdriver, String fileWithPath) kaster Unntak {// Konverter webdriverobjekt til TakeScreenshotTakesScreenshot scrShot = (((TakesScreenshot) webdriver);// Call getScreenshotAs metode for å opprette bildefilFil SrcFile = scrShot.getScreenshotAs (OutputType.FILE);// Flytt bildefilen til en ny destinasjonFile DestFile = ny fil (fileWithPath);// Kopier fil på destinasjonenFileUtils.copyFile (SrcFile, DestFile);}}

Trinn 2) Tilpass JypersionListener.java

Vi vil holde oss til standard rapportformat. Men vi vil gjøre to tilpasninger

  • Legge til kode for å instruere JypersionListener om å ta skjermbilde på feil
  • Vedlegging av lenken til skjermbildet tar du i PDF-rapporten

Legg til kode for å knytte skjermbildet til PDF-rapporten

Trinn 3) Opprett en TestGuru99PDFEmail.java som vil utføre testsaker, opprette PDF

  • Her vil vi legge til JyperionListener.class som lytter
  • Vi vil utføre 3 testsaker.
  • Ved å bruke Assert.assertTrue vil vi mislykkes i 2 testtilfeller mens vi består bare en.
  • Skjermbilde blir tatt for de mislykkede testtilfellene bare i henhold til våre tilpasninger
pakke PDFEmail;importere java.util.Properties;importere javax.activation.DataHandler;importere javax.activation.DataSource;importere javax.activation.FileDataSource;importere javax.mail.BodyPart;importere javax.mail.Message;importere javax.mail.MessagingException;importere javax.mail.Multipart;importere javax.mail.Session;importere javax.mail.Transport;importere javax.mail.internet.AddressException;importere javax.mail.internet.InternetAddress;importere javax.mail.internet.MimeBodyPart;importere javax.mail.internet.MimeMessage;importere javax.mail.internet.MimeMultipart;importer org.openqa.selenium.WebDriver;importer org.testng.Assert;importer org.testng.annotations.AfterSuite;importer org.testng.annotations.Listeners;importer org.testng.annotations.Test;import reporter.JyperionListener;// Legg til lytter for generering av pdf-rapporter@Listeners (JyperionListener.class)offentlig klasse TestGuru99PDFReport utvider BaseClass {WebDriver driver;// Testcase mislyktes, så skjermbildet ble generert@Testoffentlig ugyldig testPDFReportOne () {driver = BaseClass.getDriver ();driver.get ("http://google.com");Assert.assertTrue (false);}// Testcase mislyktes, så skjermbildet ble generert@Testoffentlig ugyldig testPDFReporTwo () {driver = BaseClass.getDriver ();driver.get ("http: /guru99.com");Assert.assertTrue (false);}// Test test tilfelle vil være bestått, så ingen skjermbilde på den@Testoffentlig ugyldig testPDFReportThree () {driver = BaseClass.getDriver ();driver.get ("http://demo.guru99.com");Assert.assertTrue (true);}

Trinn 4) Legg til koden til TestGuru99PDFEmail.java for å sende PDF-rapport via e-post

  • Vi bruker merknaden @AfterSuite til å sende e-post av PDF-rapporten
  • Vi sender e-post ved hjelp av Gmail
  • For å aktivere e-post må du importere mange biblioteksfiler som mail.jar, pop3.jar, smptp.jar osv
  • Før du utfører dette, skriv inn fra, til e-postadresse og passord
 // Etter fullført gjennomføring send pdf-rapport på e-post@AfterSuiteoffentlig tomrom tearDown () {sendPDFReportByGMail (" Denne e-postadressen er beskyttet mot programmer som samler e-postadresser. Du må aktivere JavaScript for å kunne se den.", "passord", "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(); } } }

Last ned hele prosjektet her

Merk: Når vi klikker på skjermbildelinken i pdf, viser den sikkerhetsdialogen. Vi må tillate at denne dialogen åpner pdf.

Den genererte e-posten vil se slik ut

Sammendrag:

  • TestNG har en innebygd rapporteringsevne i den.
  • Etter fullstendig gjennomføring av testsaker genererer TestNG en test-output-mappe i roten til prosjektet.
  • I test-utdata-mappen er det to hovedrapporter, index.html og emailable-report.html.
  • For å tilpasse TestNG-rapporten må vi implementere to grensesnitt, ITestListener og IReporter.
  • Hvis vi trenger å få en rapport mellom utførelsen, trenger vi ITestListener.
  • For å lage en sluttrapport etter fullført gjennomføring, må vi implementere IReporter.
  • Tar skjermbildet, i Selenium WebDriver, må vi skrive cast WebDriver til TakesScreenShot-grensesnittet.
  • For å generere pdf-rapporter må vi legge til IText jar i prosjektet.

Last ned Selenium Project Files for Demo i denne veiledningen