Før vi ser på noget andet, lad os først forstå -
Hvorfor har vi brug for rapportering?
Når vi bruger Selenium eller ethvert andet automatiseringsværktøj, udfører vi operationer på webapplikationen. Men vores formål med automatisering er ikke kun at udøve applikationen under test. Vi skal som en automatiseringstester teste applikationen, finde fejl og rapportere det til udviklingsteamet eller den højere ledelse. Her bliver rapporteringen vigtig for softwaretestprocessen
TestNG-rapportering
TestNG-biblioteket giver en meget praktisk rapporteringsfunktion. Efter udførelse genererer Testng en test-output-mappe ved roden af projektet. Denne mappe indeholder to typer rapporter -
Index.html: Dette er den komplette rapport om den aktuelle udførelse, der indeholder information som en fejl, grupper, tid, reporterlogfiler, testng XML-filer.
emailable-report.html: Dette er den sammenfattende rapport om den aktuelle testudførelse, der indeholder Test Case-meddelelse i grønt (til bestået testsager) og rødt (for mislykkede testsager) fremhæver.
Sådan tilpasser du TestNG-rapporten
TestNG-rapportering er ret praktisk, men stadig, nogle gange har vi brug for nogle mindre data i rapporter eller ønsker at vise rapporter i et andet format som pdf, excel osv. Eller ønsker at ændre rapportens layout.
Der kan være to måder, vi kan tilpasse TestNG-rapporten på
- Brug af ITestListener-interface:
- Brug af IReporter-interface:
ITestListener-grænseflade
Vi bruger denne grænseflade, når vi har brug for at tilpasse rapport i realtid. Med andre ord, hvis vi udfører en række testsager i en TetNG-pakke, og vi ønsker at få rapporten om hver testsag, så skal vi efter hver testsag implementere ITestListener-grænsefladen. Denne grænseflade tilsidesætter onTestFailure, onTestStart, onTestSkipped-metoden for at sende den korrekte status for den aktuelle testsag.
Her er de trin, vi vil følge
- Opret en klasse siger RealGuru99Report og implementer iTestListener i den.
- Implementere metoder til iTestListener
- Opret testmetode og tilføj RealGuru99Report-klasse som lytter i klasse Test Method.
Kodeeksempel
RealGuru99TimeReport.java er klasse for rapportering i realtid. Det implementerer ITestListener-interface til rapportering
pakke testNGReport.realTimeReport;import org.testng.ITestContext;import org.testng.ITestListener;import org.testng.ITestResult;offentlig klasse RealGuru99TimeReport implementerer ITestListener {@Overrideoffentligt ugyldigt onStart (ITestContext arg0) {System.out.println ("Start Of Execution (TEST) ->" + arg0.getName ());}@Overrideoffentligt ugyldigt onTestStart (ITestResult arg0) {System.out.println ("Test startet ->" + arg0.getName ());}@Overrideoffentlig ugyldighed onTestSuccess (ITestResult arg0) {System.out.println ("Test Pass ->" + arg0.getName ());}@Overrideoffentlig ugyldighed onTestFailure (ITestResult arg0) {System.out.println ("Test mislykkedes ->" + arg0.getName ());}@Overrideoffentlig ugyldighed onTestSkipped (ITestResult arg0) {System.out.println ("Test springet over ->" + arg0.getName ());}@Overrideoffentlig tomrum onFinish (ITestContext arg0) {System.out.println ("END Of Execution (TEST) ->" + arg0.getName ());}@Overrideoffentlig ugyldighed onTestFailedButWithinSuccessPercentage (ITestResult arg0) {// TODO Auto-genereret metodestub}}
TestGuru99RealReport.java er test case for reel rapport
pakke testNGReport.realTimeReport;import org.testng.Assert;import org.testng.annotations.Listeners;import org.testng.annotations.Test;@Listeners (RealGuru99TimeReport.class)offentlig klasse TestGuru99RealReport {@Prøvepublic void testRealReportOne () {Assert.assertTrue (sand);}@Prøvepublic void testRealReportTwo () {Assert.assertTrue (false);}// Test sag afhænger af mislykket testcase = testRealReportTwo@Test (afhængerOnMethods = "testRealReportTwo")public void testRealReportThree () {}}
Outputtet vil se ud som-
IReportergrænseflade
Hvis vi ønsker at tilpasse den endelige testrapport genereret af TestNG, skal vi implementere IReporter-interface. Denne grænseflade har kun en metode til implementering af generationReport. Denne metode har alle oplysninger om en fuldstændig testudførelse i listen
Kodeeksempel
Guru99Reporter.java er den fil, der bruges til at tilpasse rapporten
pakke testNGReport.iReporterReport;import java.util.Collection;importere java.util.Date;importere java.util.List;importere java.util.Map;importere 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;importer org.testng.xml.XmlSuite;offentlig klasse Guru99Reporter implementerer IReporter {@Overrideoffentlig tomrum generereReport (Listearg0, Liste arg1,String outputDirectory) {// Anden parameter for denne metode ISuite indeholder al den suite, der er udført.til (ISuite iSuite: arg1) {// Få et kort over resultatet af en enkelt suite ad gangenKort results = iSuite.getResults ();// Få nøglen til resultatkortetIndstil -taster = results.keySet ();// Gå til hver kortværdi en efter enfor (strengnøgle: nøgler) {// Kontekstobjektet for det aktuelle resultatITestContext context = results.get (key) .getTestContext ();// Print Suite-detaljer i konsollenSystem.out.println ("Suite-navn ->" + context.getName ()+ ":: Rapport output Ditectory ->" + context.getOutputDirectory ()+ ":: Suite-navn ->" + context.getSuite (). GetName ()+ ":: Startdato Tid til udførelse ->" + context.getStartDate ()+ ":: Slutdato Tid for udførelse ->" + context.getEndDate ());// Få kort til kun mislykkede testsagerIResultMap resultMap = context.getFailedTests ();// Få metodedetaljer af mislykkede testsagerSamling failedMethods = resultMap.getAllMethods ();// Loop en efter en i alle mislykkede metoderSystem.out.println ("-------- MISLAGET TESTSAG ---------");til (ITestNGMethod iTestNGMethod: failedMethods) {// Udskriv mislykkede detaljer i testsagerSystem.out.println ("TESTCASE NAME ->" + iTestNGMethod.getMethodName ()+ "\ nBeskrivelse ->" + iTestNGMethod.getDescription ()+ "\ nPrioritet ->" + iTestNGMethod.getPriority ()+ "\ n: Dato ->" + ny dato (iTestNGMethod.getDate ()));}}}}}
TestGuru99ForReporter.java er en demo til brugerdefineret rapportering
pakke testNGReport.iReporterReport;import org.testng.Assert;import org.testng.annotations.Listeners;import org.testng.annotations.Test;// Tilføj lytter til lytterapport, og skriv den, når testcas er færdig@Listeners (værdi = Guru99Reporter.class)offentlig klasse TestGuru99ForReporter {@Test (prioritet = 0, beskrivelse = "testReporterOne")public void testReporterOne () {// Bestå test caseAssert.assertTrue (sand);}@Test (prioritet = 1, beskrivelse = "testReporterTwo")public void testReporterTwo () {// Mislykket testsagAssert.assertTrue (false);}}
Output vil være som-
PDF og e-mail med rapporter
Ovenstående rapportimplementering er ret enkel og klar for at komme i gang med rapporttilpasning.
Men i virksomhedsmiljøet skal du oprette meget tilpassede rapporter. Her er det scenarie, vi skal beskæftige os med
- Opret brugerdefineret rapport i PDF-form
- Tag KUN skærmbilleder på fejl. Link til skærmbilleder i PDF
- Send e-mail af PDF-filen
PDF-rapporten ser sådan ud
For at oprette pdf-rapport har vi brug for en Java API IText . Download det her. Der er en anden brugerdefineret lytterklasse, der faktisk implementerer denne IText-jar og opretter en pdf-rapport til os. Download det her
Ovenstående figur viser standardformatet for den genererede PDF-rapport. Du kan tilpasse det
Her er hvordan vi vil nærme os dette
Trin 1) Opret en basisklasse
Trin 2) Tilpas JypersionListerner.Java (oprettelse af PDF-kode)
Trin 3) Opret en TestGuru99PDFEmail.java, som udfører testsager, opret PDF
Trin 4) Tilføj kode til TestGuru99PDFEmail.java for at sende PDF-rapport via e-mail
Lad os se på disse trin
Trin 1) Opret basisklasse
Denne baseklasse har funktioner til at oprette WebDriver og tage skærmbillede
pakke PDFEmail;import java.io.File;importer 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;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 ();}returfører;}/ *** Denne funktion tager skærmbillede* @param webdriver* @param fileWithPath* @kaster undtagelse* /offentlig statisk ugyldighed takeSnapShot (WebDriver webdriver, String fileWithPath) kaster undtagelse {// Konverter webdriverobjekt til TakeScreenshotTakesScreenshot scrShot = ((TakesScreenshot) webdriver);// Ring til getScreenshotAs metode til at oprette billedfilFil SrcFile = scrShot.getScreenshotAs (OutputType.FILE);// Flyt billedfil til en ny destinationFile DestFile = ny fil (fileWithPath);// Kopier fil ved destinationFileUtils.copyFile (SrcFile, DestFile);}}
Trin 2) Tilpas JypersionListener.java
Vi holder fast i standardrapportformatet. Men vi foretager 2 tilpasninger
- Tilføjelse af kode for at instruere JypersionListener om at tage skærmbillede på Fejl
- Vedhæftning af linket til skærmbilledet skal du tage PDF-rapporten
Tilføj kode for at vedhæfte skærmbilledet til PDF-rapporten
Trin 3) Opret en TestGuru99PDFEmail.java, som udfører testsager, opret PDF
- Her vil vi tilføje JyperionListener.class som lytter
- Vi udfører 3 testsager.
- Ved hjælp af Assert.assertTrue vil vi mislykkes i 2 testsager, mens vi kun passerer en.
- Skærmbillede tages kun for de mislykkede testsager i henhold til vores tilpasninger
pakke PDFEmail;import java.util.Properties;import javax.activation.DataHandler;importere javax.activation.DataSource;importere javax.activation.FileDataSource;importere javax.mail.BodyPart;importere 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;importere javax.mail.internet.MimeBodyPart;importere javax.mail.internet.MimeMessage;importere 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;// Tilføj lytter til generering af pdf-rapporter@Listeners (JyperionListener.class)offentlig klasse TestGuru99PDFReport udvider BaseClass {WebDriver driver;// Testcase mislykkedes, så skærmbillede blev genereret@Prøveoffentlig ugyldig testPDFReportOne () {driver = BaseClass.getDriver ();driver.get ("http://google.com");Assert.assertTrue (false);}// Testcase mislykkedes, så skærmbillede blev genereret@Prøveoffentlig ugyldig testPDFReporTwo () {driver = BaseClass.getDriver ();driver.get ("http: /guru99.com");Assert.assertTrue (false);}// Test test case vil være bestået, så intet skærmbillede på det@Prøveoffentlig ugyldighedstestPDFReportThree () {driver = BaseClass.getDriver ();driver.get ("http://demo.guru99.com");Assert.assertTrue (sand);}
Trin 4) Tilføj kode til TestGuru99PDFEmail.java for at sende PDF-rapport via e-mail
- Vi bruger kommentaren @AfterSuite til at sende e-mail af PDF-rapporten
- Vi sender e-mail ved hjælp af Gmail
- For at aktivere e-mail skal du importere mange biblioteksfiler som mail.jar, pop3.jar, smptp.jar osv
- Inden du udfører dette, skal du indtaste fra, til e-mail-adresse og adgangskode
// Efter komplet udførelse sendes pdf-rapport via e-mail@AfterSuiteoffentlig ugyldighed tearDown () {sendPDFReportByGMail (" Denne e-mail-adresse er beskyttet mod spambots. Du skal aktivere JavaScript for at kunne se den.", "password", "Denne e-mail-adresse er beskyttet mod spambots. Du skal aktivere JavaScript for at kunne se den. "," PDF-rapport "," ");} / ** * Send e-mail ved hjælp af java * @param fra * @param pass * @param til * @param subject * @param body * / privat statisk ugyldig sendPDFReportByGMail (streng fra, strengpas, streng til, strengemne, strengtekst) {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 ", fra); props.put (" mail.smtp.password ", pass); props.put (" mail.smtp.port "," 587 "); props.put (" mail.smtp.auth "," true "); Session session = Session.getDefaultInstance (rekvisitter); MimeMessage besked = ny MimeMessage (session);prøv {// Set from address message.setFrom (new InternetAddress (from)); message.addRecipient (Message.RecipientType.TO, ny Internetadresse (til)); // Indstil emnebesked. SetSubject (emne); message.setText (body); BodyPart objMessageBodyPart = ny MimeBodyPart (); objMessageBodyPart.setText ("Find venligst den vedhæftede rapportfil!"); Multipart multipart = ny MimeMultipart (); multipart.addBodyPart (objMessageBodyPart); objMessageBodyPart = ny MimeBodyPart (); // Indstil sti til pdf-rapportfilen String filnavn = System.getProperty ("user.dir") + "\\ Standard test.pdf"; // Opret datakilde for at vedhæfte filen i mail DataSource kilde = ny FileDataSource (filnavn); objMessageBodyPart.setDataHandler (ny DataHandler (kilde)); objMessageBodyPart.setFileName (filnavn); multipart.addBodyPart (objMessageBodyPart); besked.setContent (multipart); Transporttransport = session.getTransport ("smtp"); transport.connect (vært, fra, pass); transport.sendMessage (besked, besked.getAllRecipients ()); transport.close (); } fange (AddressException ae) {ae.printStackTrace (); } fange (MessagingException me) {me.printStackTrace (); }}}
Download det komplette projekt her
Bemærk: Når vi klikker på linket til skærmbillede i pdf, vises sikkerhedsdialogen. Vi er nødt til at tillade, at denne dialog åbner pdf.
Den således genererede e-mail vil se sådan ud
Resumé:
- TestNG har en indbygget rapporteringsevne i det.
- Efter en fuldstændig udførelse af testsager genererer TestNG en test-outputmappe i roden af projektet.
- I test-output-mappen er der to hovedrapporter, index.html og rapportable.html, der kan mailes.
- For at tilpasse TestNG-rapporten skal vi implementere to grænseflader, ITestListener og IReporter.
- Hvis vi har brug for at få en rapport imellem udførelsen, har vi brug for ITestListener.
- For at oprette en endelig rapport efter fuldstændig udførelse er vi nødt til at implementere IReporter.
- Når vi tager skærmbilledet i Selenium WebDriver, er vi nødt til at skrive cast WebDriver til TakesScreenShot-interface.
- For at generere pdf-rapporter skal vi tilføje IText jar i projektet.
Download Selenium-projektfiler til demo i denne vejledning