Prispôsobiť, PDF a E-mailové správy TestNG v selenovom WebDriveri

Obsah:

Anonim

Predtým, ako sa pozrieme na čokoľvek iné, najskôr pochopíme -

Prečo potrebujeme hlásenie?

Keď používame selén alebo akýkoľvek iný automatizačný nástroj, vykonávame operácie s webovou aplikáciou. Naším cieľom v oblasti automatizácie však nie je iba vykonávanie testovanej aplikácie. Ako tester automatizácie máme testovať aplikáciu, vyhľadávať chyby a hlásiť ju vývojovému tímu alebo vyššiemu manažmentu. Tu má reporting dôležitosť pre proces testovania softvéru

Hlásenie TestNG

Knižnica TestNG poskytuje veľmi užitočnú funkciu vykazovania. Po vykonaní Testng vygeneruje testovací výstupný priečinok v koreňovom adresári projektu. Tento priečinok obsahuje dva typy prehľadov

Index.html: Toto je úplná správa o aktuálnom spustení, ktorá obsahuje informácie ako chyba, skupiny, čas, protokoly reportérov, testovacie súbory XML.

emailable-report.html: Toto je súhrnná správa o aktuálnom vykonaní testu, ktorá obsahuje správu Test Case v zelenom (pre úspešné testovacie prípady) a červenom (pre zlyhanie testovacích prípadov) zvýraznení.

Ako prispôsobiť protokol TestNG

Reportovanie TestNG je celkom užitočné, ale aj tak niekedy potrebujeme v správach o niečo menej údajov alebo chceme správy zobraziť v inom formáte, ako je PDF, Excel atď., Alebo chceme zmeniť ich rozloženie.

Existujú dva spôsoby, ako môžeme prispôsobiť správu TestNG

  • Používanie rozhrania ITestListener:
  • Používanie rozhrania IReporter:

Rozhranie ITestListener

Toto rozhranie používame, keď potrebujeme prispôsobiť správu v reálnom čase. Inými slovami, ak vykonávame množstvo testovacích prípadov v súprave TetNG a chceme získať správu o každom testovacom prípade, potom po každom testovacom prípade musíme implementovať rozhranie ITestListener. Toto rozhranie prepíše metódu onTestFailure, onTestStart, onTestSkipped na odoslanie správneho stavu aktuálneho testovacieho prípadu.

Tu sú kroky, ktorými sa budeme riadiť

  • Vytvorte triedu, povedzte RealGuru99Report, a implementujte do nej iTestListener.
  • Implementujte metódy iTestListener
  • Vytvorte testovaciu metódu a pridajte triedu RealGuru99Report ako poslucháča do triedy testovacej metódy.

Príklad kódu

RealGuru99TimeReport.java je trieda prehľadov v reálnom čase. Bude implementovať rozhranie ITestListener na vykazovanie

balíček testNGReport.realTimeReport;import org.testng.ITestContext;import org.testng.ITestListener;import org.testng.ITestResult;verejná trieda RealGuru99TimeReport implementuje ITestListener {@ Overridepublic void onStart (ITestContext arg0) {System.out.println ("Začiatok vykonania (TEST) ->" + arg0.getName ());}@ Overridepublic void onTestStart (ITestResult arg0) {System.out.println ("Test spustený ->" + arg0.getName ());}@ Overridepublic void onTestSuccess (ITestResult arg0) {System.out.println ("Testovací preukaz ->" + arg0.getName ());}@ Overridepublic void onTestFailure (ITestResult arg0) {System.out.println ("Test zlyhal ->" + arg0.getName ());}@ Overridepublic void onTestSkipped (ITestResult arg0) {System.out.println ("Test vynechaný ->" + arg0.getName ());}@ Overridepublic void onFinish (ITestContext arg0) {System.out.println ("END Of Execution (TEST) ->" + arg0.getName ());}@ Overridepublic void onTestFailedButWithinSuccessPercentage (ITestResult arg0) {// TODO Automaticky generovaný pahýl metódy}}

TestGuru99RealReport.java je testovacím prípadom skutočnej správy

balíček testNGReport.realTimeReport;import org.testng.Assert;import org.testng.annotations.Listeners;import org.testng.annotations.Test;@Listeners (RealGuru99TimeReport.class)verejná trieda TestGuru99RealReport {@Testpublic void testRealReportOne () {Assert.assertTrue (true);}@Testpublic void testRealReportTwo () {Assert.assertTrue (false);}// Testovací prípad závisí od zlyhania testcase = testRealReportTwo@Test (dependsOnMethods = "testRealReportTwo")public void testRealReportThree () {}}

Výstup bude vyzerať ako -

Rozhranie IReporter

Ak chceme prispôsobiť výslednú správu o teste vygenerovanú TestNG, musíme implementovať rozhranie IReporter. Toto rozhranie má iba jeden spôsob implementácie generateReport. Táto metóda obsahuje všetky informácie o úplnom vykonaní testu v zozname a pomocou nej môžeme vygenerovať správu.

Príklad kódu

Guru99Reporter.java je súbor, ktorý sa používa na prispôsobenie prehľadu

balíček testNGReport.iReporterReport;import java.util.Collection;import java.util.Date;import java.util.List;import java.util.Map;import 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;import org.testng.xml.XmlSuite;verejná trieda Guru99Reporter implementuje IReporter {@ Overridepublic void generateReport (Zoznam  arg0, Zoznam  arg1,Reťazec outputDirectory) {// Druhý parameter tejto metódy ISuite bude obsahovať celú vykonanú sadu.pre (ISuite iSuite: arg1) {// Získanie mapy výsledkov jednej sady narazMapa  výsledky = iSuite.getResults ();// Získajte kľúč mapy výsledkovSet  keys = results.keySet ();// Prejdite postupne na každú hodnotu mapypre (String key: keys) {// Kontextový objekt aktuálneho výsledkuITestContext context = results.get (kľúč) .getTestContext ();// Tlač balíka podrobností v konzoleSystem.out.println ("Názov balíka ->" + context.getName ()+ ":: Výstup správy - adresár ->" + context.getOutputDirectory ()+ ":: Názov balíka ->" + context.getSuite (). GetName ()+ ":: Počiatočný dátum Čas na vykonanie ->" + context.getStartDate ()+ ":: Dátum ukončenia Čas na vykonanie ->" + context.getEndDate ());// Získať mapu iba pre neúspešné testovacie prípadyIResultMap resultMap = context.getFailedTests ();// Získajte podrobnosti o metóde zlyhania testovacích prípadovZbierka  failedMethods = resultMap.getAllMethods ();// Opakujte jeden po druhom vo všetkých zlyhaných metódachSystem.out.println ("-------- FAILED TEST CASE ---------");pre (ITestNGMethod iTestNGMethod: failedMethods) {// Tlač podrobností o zlyhaných testovacích prípadochSystem.out.println ("NÁZOV TESTCASE ->" + iTestNGMethod.getMethodName ()+ "\ nPopis ->" + iTestNGMethod.getDescription ()+ "\ nPriority ->" + iTestNGMethod.getPriority ()+ "\ n: Dátum ->" + nový dátum (iTestNGMethod.getDate ()));}}}}}

TestGuru99ForReporter.java je ukážka vlastného prehľadu

balíček testNGReport.iReporterReport;import org.testng.Assert;import org.testng.annotations.Listeners;import org.testng.annotations.Test;// Pridajte poslucháča, aby si vypočul správu, a po dokončení testcas ju napíšte@Listeners (hodnota = Guru99Reporter.class)verejná trieda TestGuru99ForReporter {@Test (priorita = 0, popis = "testReporterOne")public void testReporterOne () {// Úspešný testovací prípadAssert.assertTrue (true);}@Test (priorita = 1, description = "testReporterTwo")public void testReporterTwo () {// Testovací prípad zlyhaniaAssert.assertTrue (false);}}

Výstup bude podobný-

PDF a e-mail so správami

Vyššie uvedená implementácia prehľadu je celkom jednoduchá a jasná, aby ste mohli začať s prispôsobovaním prehľadov.

Ale v podnikovom prostredí budete musieť vytvárať vysoko prispôsobené správy. Tu je scenár, ktorým sa budeme zaoberať

  1. Vytvorte si vlastnú správu vo formáte PDF
  2. Screenshoty robte IBA pri chybách. Odkaz na snímky obrazovky v PDF
  3. Poslať e-mail PDF

Správa vo formáte PDF vyzerá takto

Na vytvorenie správy vo formáte PDF potrebujeme Java API IText . Stiahnite si ho tu. Existuje ďalšia vlastná trieda poslucháčov, ktorá v skutočnosti implementuje tento IText jar a vytvára pre nás správu vo formáte PDF. Stiahnite si ho tu

Obrázok vyššie zobrazuje predvolený formát vygenerovanej správy PDF. Môžete si ho prispôsobiť

Takto sa k tomu postavíme

Krok 1) Vytvorte základnú triedu

Krok 2) Prispôsobte JypersionListerner.Java (kód na vytvorenie PDF)

Krok 3) Vytvorte TestGuru99PDFEmail.java, ktorý vykoná testovacie prípady, vytvorte PDF

Krok 4) Pripojte kód k TestGuru99PDFEmail.java na odoslanie správy PDF e-mailom

Pozrime sa na tieto kroky

Krok 1) Vytvorte základnú triedu

Táto základná trieda má funkcie na vytvorenie WebDriveru a funkcie Screenshot

balík PDFEmail;import java.io.File;importovať org.apache.commons.io.FileUtils;import org.openqa.selenium.OutputType;import org.openqa.selenium.TakesSc Screenshot;import org.openqa.selenium.WebDriver;import org.openqa.selenium.firefox.FirefoxDriver;verejná trieda BaseClass {statický ovládač WebDriver;verejný statický WebDriver getDriver () {if (driver == null) {Ovládač WebDriver;System.setProperty ("webdriver.gecko.driver", "C: \\ geckodriver.exe");ovládač = nový FirefoxDriver ();}spiatočný vodič;}/ *** Táto funkcia vytvorí snímku obrazovky* @param webdriver* @param fileWithPath* @hodí výnimku* /public static void takeSnapShot (WebDriver webdriver, String fileWithPath) vyvolá výnimku {// Preveďte objekt webového ovládača na TakeSc ScreenshotTakesSc Screenshot scrShot = ((TakesSc Screenshot) webdriver);// Zavolajte metódu getSc ScreenshotAs na vytvorenie obrazového súboruSúbor SrcFile = scrShot.getSc ScreenshotAs (OutputType.FILE);// Presuňte obrazový súbor na nové miestoFile DestFile = nový súbor (fileWithPath);// Skopírujte súbor na miesto určeniaFileUtils.copyFile (SrcFile, DestFile);}}

Krok 2) Prispôsobte si JypersionListener.java

Budeme sa držať predvoleného formátu správy. Ale urobíme 2 prispôsobenia

  • Pridanie kódu na pokyn JypersionListeneru, aby urobil snímku obrazovky o chybe
  • Pripojením odkazu na snímku obrazovky sa urobí správa PDF

Pridajte kód na priloženie snímky obrazovky k správe PDF

Krok 3) Vytvorte TestGuru99PDFEmail.java, ktorý vykoná testovacie prípady, vytvorte PDF

  • Sem pridáme ako poslucháča JyperionListener.class
  • Vykonáme 3 testovacie prípady.
  • Pomocou Assert.assertTrue zlyháme 2 testovacie prípady, keď prejdeme iba jedným.
  • Screenshot pre neúspešné testovacie prípady sa urobí iba podľa našich prispôsobení
balík PDFEmail;import java.util.Properties;import javax.activation.DataHandler;import javax.activation.DataSource;import javax.activation.FileDataSource;import javax.mail.BodyPart;import 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;import javax.mail.internet.MimeBodyPart;import javax.mail.internet.MimeMessage;import 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 reportér.JyperionListener;// Pridať poslucháča pre generovanie správy PDF@Listeners (JyperionListener.class)verejná trieda TestGuru99PDFReport rozširuje BaseClass {Ovládač WebDriver;// Testcase zlyhal, takže sa vygeneroval screenshot@Testpublic void testPDFReportOne () {driver = BaseClass.getDriver ();driver.get ("http://google.com");Assert.assertTrue (false);}// Testcase zlyhal, takže sa vygeneroval screenshot@Testtest verejnej neplatnostiPDFReporTwo () {driver = BaseClass.getDriver ();driver.get ("http: /guru99.com");Assert.assertTrue (false);}// Testovací prípad bude úspešný, takže sa na ňom nebude snímať obrazovka@Testtest verejnej neplatnostiPDFReportThree () {driver = BaseClass.getDriver ();driver.get ("http://demo.guru99.com");Assert.assertTrue (true);}

Krok 4) Pripojte kód k TestGuru99PDFEmail.java na odoslanie správy PDF e-mailom

  • Na odoslanie e-mailu so správou PDF použijeme anotáciu @AfterSuite
  • Budeme posielať e-maily pomocou služby Gmail
  • Ak chcete povoliť e-mail, musíte importovať veľa súborov z knižnice, ako napríklad mail.jar, pop3.jar, smptp.jar atď
  • Pred vykonaním tohto kroku zadajte e-mailovú adresu a heslo od, do
 // Po dokončení vykonania pošlite správu vo formáte pdf e-mailom@AfterSuitepublic void tearDown () {sendPDFReportByGMail (" Táto e-mailová adresa je chránená pred spamovacími robotmi. Ak ju chcete vidieť, musíte mať povolený JavaScript.", "heslo", "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(); } } }

Celý projekt si môžete stiahnuť tu

Poznámka: Keď klikneme na odkaz na snímku obrazovky v PDF, zobrazí sa dialógové okno zabezpečenia. Musíme povoliť, aby sa v tomto dialógovom okne otvorilo pdf.

Takto vygenerovaný e-mail bude vyzerať takto

Zhrnutie:

  • TestNG má v sebe zabudovanú schopnosť podávania správ.
  • Po úplnom vykonaní testovacích prípadov vygeneruje TestNG priečinok výstupných testov v koreňovom adresári projektu.
  • V priečinku výstupných testov sú dve hlavné správy, index.html a emailable-report.html.
  • Na prispôsobenie zostavy TestNG musíme implementovať dve rozhrania, ITestListener a IReporter.
  • Ak potrebujeme dostať správu medzi vykonaním, potrebujeme ITestListener.
  • Na vytvorenie záverečnej správy po úplnom vykonaní musíme implementovať IReporter.
  • Na snímke obrazovky musíme v selenickom WebDriveri napísať obsadený WebDriver do rozhrania TakesScreenShot.
  • Na generovanie správ vo formáte PDF musíme do projektu pridať nádobu IText.

Stiahnite si súbory projektu Selenium pre ukážku v tomto výučbe