Přizpůsobit, PDF a Zasílejte e-mailem zprávy TestNG v selenu WebDriver

Obsah:

Anonim

Než se podíváme na cokoli jiného, ​​nejprve pochopíme -

Proč potřebujeme hlášení?

Když používáme selen nebo jakýkoli jiný automatizační nástroj, provádíme operace s webovou aplikací. Naším účelem automatizace však není jen cvičení Testované aplikace. My, jako automatizační tester, máme testovat aplikaci, hledat chyby a hlásit ji vývojovému týmu nebo vyššímu managementu. Zde získává hlášení důležitost pro proces testování softwaru

Hlášení TestNG

Knihovna TestNG poskytuje velmi užitečnou funkci hlášení. Po spuštění Testng vygeneruje složku s výstupem testu v kořenovém adresáři projektu. Tato složka obsahuje dva typy zpráv-

Index.html: Toto je kompletní zpráva o aktuálním spuštění, která obsahuje informace jako chyba, skupiny, čas, protokoly reportérů, testovací soubory XML.

emailable-report.html: Toto je souhrnná zpráva o aktuálním provedení testu, která obsahuje zprávu Test Case v zelené (pro vyhovující testovací případy) a červené (pro neúspěšné testovací případy) zvýraznění.

Jak přizpůsobit protokol TestNG

Reportování TestNG je docela užitečné, ale přesto někdy potřebujeme v reportech méně dat nebo chceme zobrazit reporty v nějakém jiném formátu jako PDF, Excel atd. Nebo chceme změnit rozložení reportu.

Sestavu TestNG můžeme přizpůsobit dvěma způsoby

  • Použití rozhraní ITestListener:
  • Použití rozhraní IReporter:

Rozhraní ITestListener

Toto rozhraní používáme, když potřebujeme přizpůsobit hlášení v reálném čase. Jinými slovy, pokud provádíme spoustu testovacích případů v sadě TetNG a chceme získat zprávu o každém testovacím případě, musíme po každém testovacím případě implementovat rozhraní ITestListener. Toto rozhraní přepíše metodu onTestFailure, onTestStart, onTestSkipped a odešle správný stav aktuálního testovacího případu.

Zde jsou kroky, kterými se budeme řídit

  • Vytvořte třídu, řekněte RealGuru99Report, a implementujte do ní iTestListener.
  • Implementujte metody iTestListener
  • Vytvořte testovací metodu a přidejte třídu RealGuru99Report jako posluchače do třídy Testovací metody.

Příklad kódu

RealGuru99TimeReport.java je třída hlášení v reálném čase. Bude implementovat rozhraní ITestListener pro hlášení

balíček testNGReport.realTimeReport;import org.testng.ITestContext;import org.testng.ITestListener;import org.testng.ITestResult;veřejná třída RealGuru99TimeReport implementuje ITestListener {@ Přepispublic void onStart (ITestContext arg0) {System.out.println ("Začátek provádění (TEST) ->" + arg0.getName ());}@ Přepispublic void onTestStart (ITestResult arg0) {System.out.println ("Test spuštěn ->" + arg0.getName ());}@ Přepispublic void onTestSuccess (ITestResult arg0) {System.out.println ("Test Pass ->" + arg0.getName ());}@ Přepispublic void onTestFailure (ITestResult arg0) {System.out.println ("Test se nezdařil ->" + arg0.getName ());}@ Přepispublic void onTestSkipped (ITestResult arg0) {System.out.println ("Test přeskočen ->" + arg0.getName ());}@ Přepispublic void onFinish (ITestContext arg0) {System.out.println ("END Of Execution (TEST) ->" + arg0.getName ());}@ Přepispublic void onTestFailedButWithinSuccessPercentage (ITestResult arg0) {// TODO Automaticky generovaný útržek metody}}

TestGuru99RealReport.java je testovacím případem skutečné zprávy

balíček testNGReport.realTimeReport;import org.testng.Assert;import org.testng.annotations.Listeners;import org.testng.annotations.Test;@Listeners (RealGuru99TimeReport.class)veřejná třída TestGuru99RealReport {@Testpublic void testRealReportOne () {Assert.assertTrue (true);}@Testpublic void testRealReportTwo () {Assert.assertTrue (false);}// Testovací případ závisí na neúspěšném testcase = testRealReportTwo@Test (dependsOnMethods = "testRealReportTwo")public void testRealReportThree () {}}

Výstup bude vypadat jako-

Rozhraní IReporter

Pokud chceme přizpůsobit závěrečnou zprávu o testu vygenerovanou TestNG, musíme implementovat rozhraní IReporter. Toto rozhraní má pouze jednu metodu implementace generateReport. Tato metoda má všechny informace o úplném provedení testu v List a pomocí ní můžeme vygenerovat zprávu.

Příklad kódu

Guru99Reporter.java je soubor používaný k přizpůsobení zprávy

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;veřejná třída Guru99Reporter implementuje IReporter {@ Přepispublic void generateReport (List  arg0, List  arg1,Řetězec outputDirectory) {// Druhý parametr této metody ISuite bude obsahovat celou spuštěnou sadu.pro (ISuite iSuite: arg1) {// Získejte mapu výsledků jedné sady najednouMap  results = iSuite.getResults ();// Získejte klíč mapy výsledkůSet  keys = results.keySet ();// Přejít na každou hodnotu mapy po jednépro (String key: keys) {// Kontextový objekt aktuálního výsledkuITestContext context = results.get (klíč) .getTestContext ();// Tisk podrobností sady v konzoleSystem.out.println ("Název sady ->" + context.getName ()+ ":: Výstup sestavy Ditectory ->" + context.getOutputDirectory ()+ ":: Název sady ->" + context.getSuite (). GetName ()+ ":: Počáteční datum Čas pro provedení ->" + context.getStartDate ()+ ":: Datum ukončení Čas pro provedení ->" + context.getEndDate ());// Získat mapu pouze pro neúspěšné testovací případyIResultMap resultMap = context.getFailedTests ();// Získejte podrobnosti o metodě neúspěšných testovacích případůSbírka  failedMethods = resultMap.getAllMethods ();// Opakujte jeden po druhém ve všech neúspěšných metodáchSystem.out.println ("-------- FAILED TEST CASE ---------");pro (ITestNGMethod iTestNGMethod: failedMethods) {// Tisk detailů neúspěšných testovacích případůSystem.out.println ("NÁZEV TESTCASE ->" + iTestNGMethod.getMethodName ()+ "\ nPopis ->" + iTestNGMethod.getDescription ()+ "\ nPriority ->" + iTestNGMethod.getPriority ()+ "\ n: Datum ->" + nové datum (iTestNGMethod.getDate ()));}}}}}

TestGuru99ForReporter.java je ukázka pro vlastní hlášení

balíček testNGReport.iReporterReport;import org.testng.Assert;import org.testng.annotations.Listeners;import org.testng.annotations.Test;// Přidejte posluchače k ​​poslechu zprávy a po dokončení testcas ji zapište@ Listeners (hodnota = Guru99Reporter.class)veřejná třída TestGuru99ForReporter {@Test (priorita = 0, popis = "testReporterOne")public void testReporterOne () {// Úspěšný testovací případAssert.assertTrue (true);}@Test (priorita = 1, description = "testReporterTwo")public void testReporterTwo () {// Selhání testovacího případuAssert.assertTrue (false);}}

Výstup bude jako-

PDF a e-mail se zprávami

Výše uvedená implementace sestavy je poměrně jednoduchá a jasná, abyste mohli začít s přizpůsobením sestavy.

Ale v podnikovém prostředí budete muset vytvářet vysoce přizpůsobené zprávy. Zde je scénář, kterým se budeme zabývat

  1. Vytvořte vlastní zprávu ve formátu PDF
  2. Screenshoty POUZE u chyb. Odkaz na snímky obrazovky v PDF
  3. Odeslat e-mail PDF

Zpráva ve formátu PDF vypadá takto

K vytvoření zprávy ve formátu PDF potřebujeme Java API IText . Stáhněte si jej zde. Existuje další vlastní třída posluchače, která ve skutečnosti implementuje tento IText jar a vytváří pro nás zprávu ve formátu PDF. Stáhněte si jej zde

Výše uvedený obrázek ukazuje výchozí formát generované zprávy PDF. Můžete si jej přizpůsobit

Takto k tomu přistoupíme

Krok 1) Vytvořte základní třídu

Krok 2) Přizpůsobte JypersionListerner.Java (kód pro vytvoření PDF)

Krok 3) Vytvořte TestGuru99PDFEmail.java, který provede testovací případy, vytvořte PDF

Krok 4) Připojte kód k TestGuru99PDFEmail.java a odešlete zprávu PDF e-mailem

Podívejme se na tyto kroky

Krok 1) Vytvořte základní třídu

Tato základní třída má funkce pro vytvoření WebDriveru a pořízení snímku obrazovky

balíček PDFEmail;import java.io.File;import 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;veřejná třída BaseClass {statický ovladač WebDriver;veřejný statický WebDriver getDriver () {if (driver == null) {Ovladač WebDriver;System.setProperty ("webdriver.gecko.driver", "C: \\ geckodriver.exe");driver = new FirefoxDriver ();}zpáteční řidič;}/ *** Tato funkce pořídí snímek obrazovky* @param webdriver* @param fileWithPath* @hodí výjimku* /public static void takeSnapShot (WebDriver webdriver, String fileWithPath) vyvolá výjimku {// Převést objekt webového ovladače na TakeSc ScreenshotTakesSc Screenshot scrShot = ((TakesSc Screenshot) webdriver);// Voláním metody getSc ScreenshotAs k vytvoření obrazového souboruSoubor SrcFile = scrShot.getSc ScreenshotAs (OutputType.FILE);// Přesuňte obrazový soubor do nového cíleSoubor DestFile = nový soubor (fileWithPath);// Zkopírujte soubor na místo určeníFileUtils.copyFile (SrcFile, DestFile);}}

Krok 2) Přizpůsobte JypersionListener.java

Budeme se držet výchozího formátu zprávy. Ale uděláme 2 přizpůsobení

  • Přidání kódu, který instruuje JypersionListener, aby pořídil snímek obrazovky při chybě
  • Připojením odkazu na snímek obrazovky pořídíte zprávu PDF

Přidejte kód pro připojení snímku obrazovky k sestavě PDF

Krok 3) Vytvořte TestGuru99PDFEmail.java, který provede testovací případy, vytvořte PDF

  • Zde přidáme JyperionListener.class jako posluchače
  • Provedeme 3 testovací případy.
  • Pomocí Assert.assertTrue selháme 2 testovací případy, když projdeme jen jeden.
  • Screenshot pro neúspěšné testovací případy bude proveden pouze podle našich přizpůsobení
balíček PDFEmail;importovat 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;// Přidat posluchače pro generování zprávy ve formátu PDF@Listeners (JyperionListener.class)veřejná třída TestGuru99PDFReport rozšiřuje BaseClass {Ovladač WebDriver;// Testcase se nezdařil, takže se vygeneroval snímek obrazovky@Testpublic void testPDFReportOne () {driver = BaseClass.getDriver ();driver.get ("http://google.com");Assert.assertTrue (false);}// Testcase se nezdařil, takže se vygeneroval snímek obrazovky@Testpublic void testPDFReporTwo () {driver = BaseClass.getDriver ();driver.get ("http: /guru99.com");Assert.assertTrue (false);}// Testovací případ bude úspěšný, takže na něj nebude žádný snímek obrazovky@Testtest veřejné neplatnostiPDFReportThree () {driver = BaseClass.getDriver ();driver.get ("http://demo.guru99.com");Assert.assertTrue (true);}

Krok 4) Připojte kód k TestGuru99PDFEmail.java a odešlete zprávu PDF e-mailem

  • K odeslání e-mailu se zprávou PDF použijeme anotaci @AfterSuite
  • Budeme posílat e-maily pomocí Gmailu
  • Chcete-li povolit e-mail, musíte importovat mnoho souborů knihovny, jako je mail.jar, pop3.jar, smptp.jar atd
  • Než to provedete, zadejte e-mailovou adresu a heslo od, do
 // Po úplném provedení odešlete zprávu ve formátu PDF e-mailem@AfterSuitepublic void tearDown () {sendPDFReportByGMail (" Tato emailová adresa je chráněna před spamboty. Pro její zobrazení potřebujete mít Java scripty povoleny.", "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(); } } }

Stáhněte si kompletní projekt zde

Poznámka: Když klikneme na odkaz na snímek obrazovky v pdf, zobrazí se dialogové okno zabezpečení. V tomto dialogu musíme povolit otevření souboru PDF.

Takto vygenerovaný e-mail bude vypadat takto

Souhrn:

  • TestNG má v sobě zabudovanou schopnost hlášení.
  • Po úplném provedení testovacích případů vygeneruje TestNG složku s výstupem testu v kořenovém adresáři projektu.
  • Ve složce test-output existují dvě hlavní zprávy, index.html a emailable-report.html.
  • K přizpůsobení sestavy TestNG musíme implementovat dvě rozhraní, ITestListener a IReporter.
  • Pokud potřebujeme mezi spuštěním získat zprávu, potřebujeme ITestListener.
  • Pro vytvoření závěrečné zprávy po úplném provedení musíme implementovat IReporter.
  • Na snímku obrazovky v selenovém WebDriveru musíme zadat obsazení WebDriver do rozhraní TakesScreenShot.
  • Ke generování zpráv ve formátu PDF musíme do projektu přidat nádobu IText.

Stáhněte si soubory projektu Selenium pro ukázku v tomto výukovém programu