Aanpassen, PDF & E-mail TestNG-rapporten in Selenium WebDriver

Inhoudsopgave:

Anonim

Voordat we iets anders onderzoeken, laten we eerst begrijpen -

Waarom hebben we rapportage nodig?

Wanneer we Selenium of een andere automatiseringstool gebruiken, voeren we bewerkingen uit op de webapplicatie. Maar ons doel van automatisering is niet alleen om de te testen applicatie uit te voeren. Wij, als automatiseringstester, moeten de applicatie testen, bugs opsporen en rapporteren aan het ontwikkelteam of hoger management. Hier krijgt de rapportage belang voor het softwaretestproces

TestNG-rapportage

De TestNG-bibliotheek biedt een zeer handige rapportagefunctie. Na uitvoering genereert Testng een testoutput-map in de root van het project. Deze map bevat twee soorten rapporten:

Index.html: Dit is het complete rapport van de huidige uitvoering dat informatie bevat zoals een fout, groepen, tijd, reporterlogs, testng XML-bestanden.

e-mailable-report.html: Dit is het samenvattende rapport van de huidige testuitvoering met een testcasebericht in groen (voor geslaagde testgevallen) en rood (voor mislukte testgevallen) gemarkeerd.

Hoe u TestNG-rapport kunt aanpassen

TestNG-rapportage is best handig, maar toch hebben we soms wat minder gegevens nodig in rapporten of willen we rapporten in een ander formaat weergeven, zoals pdf, excel, enz. Of willen we de lay-out van het rapport wijzigen.

Er kunnen twee manieren zijn waarop we het TestNG-rapport kunnen aanpassen

  • ITestListener-interface gebruiken:
  • IReporter-interface gebruiken:

ITestListener-interface

We gebruiken deze interface wanneer we het realtime rapport moeten aanpassen. Met andere woorden, als we de reeks testcases uitvoeren in een TetNG-suite en we willen het rapport van elke testcase ontvangen, dan moeten we na elke testcase de ITestListener-interface implementeren. Deze interface overschrijft de methode onTestFailure, onTestStart, onTestSkipped om de juiste status van de huidige testcase te verzenden.

Hier zijn de stappen die we zullen volgen

  • Maak een klasse, zeg RealGuru99Report, en implementeer iTestListener erin.
  • Implementeer methoden van iTestListener
  • Maak een testmethode en voeg de klasse RealGuru99Report toe als luisteraar in de klasse Testmethode.

Code Voorbeeld

RealGuru99TimeReport.java is de realtime rapportageklasse. Het implementeert de ITestListener-interface voor rapportage

pakket testNGReport.realTimeReport;importeer org.testng.ITestContext;importeer org.testng.ITestListener;importeer org.testng.ITestResult;openbare klasse RealGuru99TimeReport implementeert ITestListener {@Overrideopenbare void onStart (ITestContext arg0) {System.out.println ("Start van uitvoering (TEST) ->" + arg0.getName ());​@Overrideopenbare ongeldige onTestStart (ITestResult arg0) {System.out.println ("Test gestart ->" + arg0.getName ());​@Overrideopenbare ongeldigheid onTestSuccess (ITestResult arg0) {System.out.println ("Test geslaagd ->" + arg0.getName ());​@Overrideopenbare ongeldigheid onTestFailure (ITestResult arg0) {System.out.println ("Test mislukt ->" + arg0.getName ());​@Overrideopenbare ongeldigheid onTestSkipped (ITestResult arg0) {System.out.println ("Test overgeslagen ->" + arg0.getName ());​@Overrideopenbare leegte onFinish (ITestContext arg0) {System.out.println ("EINDE van uitvoering (TEST) ->" + arg0.getName ());​@Overrideopenbare ongeldige onTestFailedButWithinSuccessPercentage (ITestResult arg0) {// TODO Automatisch gegenereerde methodestub​​

TestGuru99RealReport.java is de testcase voor echt rapport

pakket testNGReport.realTimeReport;importeer org.testng.Assert;importeer org.testng.annotations.Listeners;importeer org.testng.annotations.Test;@Listeners (RealGuru99TimeReport.class)openbare klasse TestGuru99RealReport {@Testopenbare ongeldige testRealReportOne () {Assert.assertTrue (true);​@Testopenbare ongeldige testRealReportTwo () {Assert.assertTrue (false);​// Testgeval hangt af van mislukte testcase = testRealReportTwo@Test (afhankelijkOnMethods = "testRealReportTwo")openbare ongeldige testRealReportThree () {​​

De output zal eruit zien als-

IReporter-interface

Als we het door TestNG gegenereerde definitieve testrapport willen aanpassen, moeten we de IReporter-interface implementeren. Deze interface heeft maar één methode om GenerReport te implementeren. Deze methode bevat alle informatie van een volledige testuitvoering in de lijst en we kunnen het rapport ermee genereren.

Code Voorbeeld

Guru99Reporter.java is het bestand dat wordt gebruikt om het rapport aan te passen

pakket testNGReport.iReporterReport;importeer java.util.Collection;importeer java.util.Date;importeer java.util.List;importeer java.util.Map;importeer java.util.Set;importeer org.testng.IReporter;importeer org.testng.IResultMap;importeer org.testng.ISuite;importeer org.testng.ISuiteResult;importeer org.testng.ITestContext;importeer org.testng.ITestNGMethod;importeer org.testng.xml.XmlSuite;openbare klasse Guru99Reporter implementeert IReporter {@Overridepublic void generationReport (List  arg0, List  arg1,String outputDirectory) {// Tweede parameter van deze methode ISuite bevat alle uitgevoerde suites.voor (ISuite iSuite: arg1) {// Krijg een kaart met het resultaat van een enkele suite tegelijkKaart  resultaten = iSuite.getResults ();// Haal de sleutel van de resultaatkaart opSet  keys = results.keySet ();// Ga een voor een naar elke kaartwaardefor (String key: keys) {// Het contextobject van het huidige resultaatITestContext context = results.get (key) .getTestContext ();// Print Suite-details in ConsoleSystem.out.println ("Suite-naam ->" + context.getName ()+ ":: Rapportuitvoer Ditectory ->" + context.getOutputDirectory ()+ ":: Suite-naam ->" + context.getSuite (). GetName ()+ ":: Start Datum Tijd voor uitvoering ->" + context.getStartDate ()+ ":: Einddatum Tijd voor uitvoering ->" + context.getEndDate ());// Krijg een kaart voor alleen mislukte testgevallenIResultMap resultMap = context.getFailedTests ();// Krijg methodedetails van mislukte testgevallenVerzameling  failedMethods = resultMap.getAllMethods ();// Loop één voor één door in alle mislukte methodenSystem.out.println ("-------- FAILED TEST CASE ---------");voor (ITestNGMethod iTestNGMethod: failedMethods) {// Details van mislukte testcases afdrukkenSystem.out.println ("TESTCASE NAAM ->" + iTestNGMethod.getMethodName ()+ "\ nDescription ->" + iTestNGMethod.getDescription ()+ "\ nPriority ->" + iTestNGMethod.getPriority ()+ "\ n: Datum ->" + nieuwe datum (iTestNGMethod.getDate ()));​​​​​

TestGuru99ForReporter.java is een demo voor aangepaste rapportage

pakket testNGReport.iReporterReport;importeer org.testng.Assert;importeer org.testng.annotations.Listeners;importeer org.testng.annotations.Test;// Voeg luisteraar toe om te luisteren en schrijf het als testcas klaar zijn@Listeners (waarde = Guru99Reporter.class)openbare klasse TestGuru99ForReporter {@Test (prioriteit = 0, beschrijving = "testReporterOne")openbare ongeldige testReporterOne () {// Pass testcaseAssert.assertTrue (true);​@Test (prioriteit = 1, description = "testReporterTwo")openbare ongeldige testReporterTwo () {// Fail-testcaseAssert.assertTrue (false);​​

De uitvoer zal zijn als-

PDF en e-mail van rapporten

De bovenstaande rapportimplementatie is vrij eenvoudig en duidelijk om u op weg te helpen met het aanpassen van rapporten.

Maar in een bedrijfsomgeving moet u zeer aangepaste rapporten maken. Hier is het scenario waarmee we te maken zullen hebben

  1. Maak een aangepast rapport in pdf-vorm
  2. Maak ALLEEN schermafbeeldingen bij fouten. Link naar screenshots in pdf
  3. Stuur een e-mail van de pdf

Het pdf-rapport ziet er zo uit

Om een ​​pdf-rapport te maken hebben we een Java API IText nodig . Download het hier . Er is een andere aangepaste listener-klasse die deze IText-jar daadwerkelijk implementeert en een pdf-rapport voor ons maakt. Download het hier

De bovenstaande afbeelding toont het standaardformaat van het gegenereerde PDF-rapport. U kunt het aanpassen

Hier is hoe we dit zullen aanpakken

Stap 1) Maak een basisklasse

Stap 2) Pas JypersionListerner.Java aan (PDF-aanmaakcode)

Stap 3) Maak een TestGuru99PDFEmail.java die testgevallen zal uitvoeren, maak een PDF

Stap 4) Voeg code toe aan TestGuru99PDFEmail.java om een ​​PDF-rapport via e-mail te verzenden

Laten we deze stappen eens bekijken

Stap 1) Maak een basisklasse

Deze basisklasse heeft functies om WebDriver te maken en Screenshot te maken

pakket PDFEmail;importeer java.io.File;importeer org.apache.commons.io.FileUtils;importeer org.openqa.selenium.OutputType;importeer org.openqa.selenium.TakesScreenshot;importeer org.openqa.selenium.WebDriver;importeer org.openqa.selenium.firefox.FirefoxDriver;openbare klasse BaseClass {statische WebDriver-driver;openbare statische WebDriver getDriver () {if (driver == null) {WebDriver-stuurprogramma;System.setProperty ("webdriver.gecko.driver", "C: \\ geckodriver.exe");driver = nieuwe FirefoxDriver ();​terug chauffeur;​​* Deze functie maakt een screenshot* @param webdriver* @param fileWithPath* @throws Uitzondering​public static void takeSnapShot (WebDriver webdriver, String fileWithPath) genereert Uitzondering {// Converteer webstuurprogramma-object naar TakeScreenshotTakesScreenshot scrShot = ((TakesScreenshot) webdriver);// Roep de methode getScreenshotAs aan om een ​​afbeeldingsbestand te makenBestand SrcFile = scrShot.getScreenshotAs (OutputType.FILE);// Verplaats afbeeldingsbestand naar een nieuwe bestemmingFile DestFile = nieuw bestand (fileWithPath);// Kopieer bestand op bestemmingFileUtils.copyFile (SrcFile, DestFile);​​

Stap 2) Pas JypersionListener.java aan

We houden vast aan het standaardrapportformaat. Maar we zullen 2 aanpassingen maken

  • Code toevoegen om JypersionListener opdracht te geven een screenshot te maken bij Error
  • Voeg de link van het screenshot toe en neem het pdf-rapport op

Voeg code toe om de schermafbeelding aan het pdf-rapport toe te voegen

Stap 3) Maak een TestGuru99PDFEmail.java die testgevallen zal uitvoeren, maak een PDF

  • Hier zullen we JyperionListener.class als luisteraar toevoegen
  • We zullen 3 testcases uitvoeren.
  • Met behulp van Assert.assertTrue zullen we niet slagen voor 2 testcases terwijl we er slechts één passeren.
  • Er wordt alleen een screenshot gemaakt voor de mislukte testcases volgens onze aanpassingen
pakket PDFEmail;importeer java.util.Properties;importeer javax.activation.DataHandler;importeer javax.activation.DataSource;importeer javax.activation.FileDataSource;importeer javax.mail.BodyPart;importeer javax.mail.Message;importeer javax.mail.MessagingException;importeer javax.mail.Multipart;importeer javax.mail.Session;importeer javax.mail.Transport;importeer javax.mail.internet.AddressException;importeer javax.mail.internet.InternetAddress;importeer javax.mail.internet.MimeBodyPart;importeer javax.mail.internet.MimeMessage;importeer javax.mail.internet.MimeMultipart;importeer org.openqa.selenium.WebDriver;importeer org.testng.Assert;importeer org.testng.annotations.AfterSuite;importeer org.testng.annotations.Listeners;importeer org.testng.annotations.Test;importeer reporter.JyperionListener;// Luisteraar toevoegen voor het genereren van pdf-rapporten@Listeners (JyperionListener.class)openbare klasse TestGuru99PDFReport breidt BaseClass {uitWebDriver-stuurprogramma;// Testcase is mislukt, dus het genereren van een schermafbeelding@Testopenbare ongeldige testPDFReportOne () {stuurprogramma = BaseClass.getDriver ();driver.get ("http://google.com");Assert.assertTrue (false);​// Testcase is mislukt, dus het genereren van een schermafbeelding@Testopenbare ongeldige testPDFReporTwo () {stuurprogramma = BaseClass.getDriver ();driver.get ("http: /guru99.com");Assert.assertTrue (false);​// Testtestgeval is geslaagd, dus er is geen schermafbeelding op@Testopenbare ongeldige testPDFReportThree () {stuurprogramma = BaseClass.getDriver ();driver.get ("http://demo.guru99.com");Assert.assertTrue (true);​

Stap 4) Voeg code toe aan TestGuru99PDFEmail.java om een ​​PDF-rapport via e-mail te verzenden

  • We zullen de annotatie @AfterSuite gebruiken om een ​​e-mail van het PDF-rapport te verzenden
  • We zullen e-mail verzenden met Gmail
  • Om e-mail in te schakelen, moet u veel bibliotheekbestanden importeren, zoals mail.jar, pop3.jar, smptp.jar, enz
  • Voordat u dit uitvoert, moet u het van, naar e-mailadres en wachtwoord invoeren
 // Na volledige uitvoering pdf-rapport per e-mail verzenden@AfterSuiteopenbare leegte tearDown () {sendPDFReportByGMail (" Dit e-mailadres is beschermd tegen spambots. JavaScript moet ingeschakeld zijn om het te bekijken.", "wachtwoord", "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(); } } }

Download hier het complete project

Opmerking: wanneer we op de schermafdruklink in pdf klikken, wordt het beveiligingsvenster weergegeven. We moeten dit dialoogvenster toestaan ​​om pdf te openen.

De aldus gegenereerde e-mail ziet er als volgt uit

Overzicht:

  • TestNG heeft een ingebouwde rapportagemogelijkheid.
  • Na een volledige uitvoering van testcases, genereert TestNG een test-output-map in de root van het project.
  • In de test-output-map zijn er twee hoofdrapporten, index.html en emailable-report.html.
  • Om het TestNG-rapport aan te passen, moeten we twee interfaces implementeren, ITestListener en IReporter.
  • Als we tussendoor een rapport nodig hebben, hebben we ITestListener nodig.
  • Voor het maken van een eindrapport na volledige uitvoering, moeten we IReporter implementeren.
  • Als we de schermafbeelding maken, moeten we in Selenium WebDriver cast WebDriver typen in de TakesScreenShot-interface.
  • Om pdf-rapporten te genereren, moeten we IText-jar in het project toevoegen.

Download de Selenium-projectbestanden voor de demo in deze zelfstudie