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
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 (Listearg0, 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
- Lag egendefinert rapport i PDF-form
- Ta KUN skjermbilder på feil. Lenke til skjermbilder i PDF
- 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