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
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 (Listarg0, 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
- Maak een aangepast rapport in pdf-vorm
- Maak ALLEEN schermafbeeldingen bij fouten. Link naar screenshots in pdf
- 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 Uitzonderingpublic 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