Prilagodi, PDF & Pošljite poročila TestNG po e-pošti v programu Selenium WebDriver

Kazalo:

Anonim

Preden preučimo karkoli drugega, najprej razumemo -

Zakaj potrebujemo poročanje?

Ko uporabljamo Selenium ali katero koli drugo orodje za avtomatizacijo, izvajamo operacije na spletni aplikaciji. Toda naš namen avtomatizacije ni samo izvajanje preizkusne aplikacije. Kot preizkuševalec avtomatizacije naj bi preizkusili aplikacijo, našli napake in o tem poročali razvojni skupini ali višjemu vodstvu. Tu je poročanje pomembno za postopek testiranja programske opreme

Poročanje o preizkusu NG

Knjižnica TestNG ponuja zelo priročno funkcijo poročanja. Po izvedbi bo Testng ustvaril mapo test-output v korenu projekta. Ta mapa vsebuje dve vrsti poročil -

Index.html: To je celotno poročilo o trenutni izvedbi, ki vsebuje informacije, kot so napake, skupine, čas, dnevniki poročevalcev, datoteke XML testng.

emailable-report.html: To je povzetek poročila o trenutni izvedbi preizkusa, ki vsebuje zeleno sporočilo Test Case (za uspešno opravljene testne primere) in rdeče (za neuspešne testne primere).

Kako prilagoditi poročilo TestNG

Poročanje o TestNG je zelo priročno, vendar vseeno včasih v poročilih potrebujemo manj podatkov ali želimo prikazati poročila v kakšni drugi obliki, kot so pdf, excel itd., Ali pa želimo spremeniti postavitev poročila.

Poročilo TestNG lahko prilagodimo na dva načina

  • Uporaba vmesnika ITestListener:
  • Uporaba IReporter vmesnika:

Vmesnik ITestListener

Ta vmesnik uporabljamo, ko moramo prilagoditi poročilo v realnem času. Z drugimi besedami, če izvajamo kup testnih primerov v paketu TetNG in želimo dobiti poročilo o vsakem testnem primeru, potem moramo po vsakem testnem primeru implementirati vmesnik ITestListener. Ta vmesnik bo preglasil metode onTestFailure, onTestStart, onTestSkipped, da pošlje pravilno stanje trenutnega testnega primera.

Tu so koraki, ki jih bomo upoštevali

  • Ustvarite razred, recimo RealGuru99Report in vanj implementirajte iTestListener.
  • Izvedite metode iTestListener
  • Ustvarite preskusno metodo in dodajte razred RealGuru99Report kot poslušalec v razredu Testna metoda.

Primer kode

RealGuru99TimeReport.java je razred poročanja v realnem času. Uporabil bo vmesnik ITestListener za poročanje

paket testNGReport.realTimeReport;import org.testng.ITestContext;import org.testng.ITestListener;import org.testng.ITestResult;javni razred RealGuru99TimeReport izvaja ITestListener {@Overridejavna praznina onStart (ITestContext arg0) {System.out.println ("Začetek izvajanja (TEST) ->" + arg0.getName ());}@Overridejavna praznina onTestStart (ITestResult arg0) {System.out.println ("Test se je začel ->" + arg0.getName ());}@Overridejavna praznina onTestSuccess (ITestResult arg0) {System.out.println ("Test Pass ->" + arg0.getName ());}@Overridejavna praznina onTestFailure (ITestResult arg0) {System.out.println ("Test ni uspel ->" + arg0.getName ());}@Overridejavna praznina onTestSkipped (ITestResult arg0) {System.out.println ("Preskočen preskus ->" + arg0.getName ());}@Overridejavna praznina onFinish (ITestContext arg0) {System.out.println ("END OF Execution (TEST) ->" + arg0.getName ());}@Overridejavna praznina onTestFailedButWithinSuccessPercentage (ITestResult arg0) {// TODO Samodejno ustvarjena škrbina metode}}

TestGuru99RealReport.java je primer resničnega poročila

paket testNGReport.realTimeReport;import org.testng.Assert;import org.testng.annotations.Listeners;import org.testng.annotations.Test;@Listeners (RealGuru99TimeReport.class)javni razred TestGuru99RealReport {@Testpublic void testRealReportOne () {Assert.assertTrue (true);}@Testpublic void testRealReportTwo () {Assert.assertTrue (false);}// Testni primer je odvisen od neuspešnega testcase = testRealReportTwo@Test (dependOnMethods = "testRealReportTwo")public void testRealReportThree () {}}

Izhod bo videti kot-

IReporter vmesnik

Če želimo prilagoditi končno poročilo o preizkusu, ki ga je ustvaril TestNG, moramo implementirati vmesnik IReporter. Ta vmesnik ima samo en način za izvedbo generiranja poročila. Ta metoda ima na seznamu vse informacije o celotni izvedbi preizkusa in z njo lahko ustvarimo poročilo.

Primer kode

Guru99Reporter.java je datoteka, ki se uporablja za prilagajanje poročila

paket testNGReport.iReporterReport;uvoz java.util.Collection;uvoz java.util.Date;uvoz java.util.List;uvoz 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;uvoz org.testng.xml.XmlSuite;javni razred Guru99Reporter izvaja IReporter {@Overridejavna praznina generiraj poročilo (seznam  arg0, seznam  arg1,String outputDirectory) {// Drugi parameter te metode ISuite bo vseboval vso izvedeno zbirko.za (ISuite iSuite: arg1) {// Pridobite zemljevid rezultatov posamezne zbirke hkratiZemljevid  rezultati = iSuite.getResults ();// Pridobite ključ zemljevida rezultatovNastavite  tipke = results.keySet ();// Pojdite na vsako vrednost zemljevida eno za drugoza (tipka String: tipke) {// Kontekstni objekt trenutnega rezultataITestContext context = results.get (key) .getTestContext ();// Podrobnosti tiskanja Suite v konzoliSystem.out.println ("Ime zbirke ->" + context.getName ()+ ":: Izhodni imenik poročila ->" + context.getOutputDirectory ()+ ":: Ime suite ->" + context.getSuite (). GetName ()+ ":: Začetni datum Čas za izvedbo ->" + context.getStartDate ()+ ":: Končni datum Čas za izvedbo ->" + context.getEndDate ());// Pridobite zemljevid samo za neuspešne testne primereIResultMap resultMap = context.getFailedTests ();// Pridobite podrobnosti metode neuspešnih testnih primerovZbirka  failedMethods = resultMap.getAllMethods ();// Zanka enega za drugim pri vseh neuspelih metodahSystem.out.println ("-------- NEUSPELI PRESKUSNI PRIMER ---------");za (ITestNGMethod iTestNGMethod: failedMethods) {// Natisni podrobnosti neuspešnih testnih primerovSystem.out.println ("TESTCASE NAME ->" + iTestNGMethod.getMethodName ()+ "\ nOpis ->" + iTestNGMethod.getDescription ()+ "\ nPriority ->" + iTestNGMethod.getPriority ()+ "\ n: Datum ->" + nov datum (iTestNGMethod.getDate ()));}}}}}

TestGuru99ForReporter.java je predstavitev za poročanje po meri

paket testNGReport.iReporterReport;import org.testng.Assert;import org.testng.annotations.Listeners;import org.testng.annotations.Test;// Dodajte poslušalca za poslušanje poročila in ga napišite, ko testcas konča@Listeners (value = Guru99Reporter.class)javni razred TestGuru99ForReporter {@Test (prioritet = 0, opis = "testReporterOne")public void testReporterOne () {// Opraviti testni primerAssert.assertTrue (true);}@Test (prioritet = 1, opis = "testReporterTwo")public void testReporterTwo () {// Neuspešen testni primerAssert.assertTrue (false);}}

Izhod bo približno

PDF in elektronska pošta poročil

Zgornja izvedba poročila je zelo preprosta in jasna, če želite začeti s prilagajanjem poročil.

Toda v poslovnem okolju boste morali ustvariti zelo prilagojena poročila. Tukaj je scenarij, s katerim se bomo ukvarjali

  1. Ustvari poročilo po meri v obliki PDF
  2. Posnemite posnetke zaslona SAMO za napake. Povezava do posnetkov zaslona v PDF
  3. Pošlji e-pošto v PDF

Poročilo PDF je videti tako

Za izdelavo poročila v obliki PDF potrebujemo Java API IText . Prenesite ga tukaj. Obstaja še en razred poslušalcev po meri, ki dejansko izvaja ta kozarec IText in za nas ustvarja poročilo v obliki PDF. Prenesite ga tukaj

Zgornja slika prikazuje privzeto obliko ustvarjenega poročila PDF. Lahko ga prilagodite

Evo, kako se bomo lotili tega

Korak 1) Ustvarite osnovni razred

2. korak) Prilagodite JypersionListerner.Java (koda za ustvarjanje PDF)

Korak 3) Ustvarite TestGuru99PDFEmail.java, ki bo izvajal testne primere, ustvarite PDF

Korak 4) Dodajte kodo TestGuru99PDFEmail.java, da pošljete poročilo PDF po e-pošti

Poglejmo te korake

Korak 1) Ustvarite osnovni razred

Ta osnovni razred ima funkcije za ustvarjanje WebDriverja in posnetka zaslona

paket PDFEmail;import java.io.File;import org.apache.commons.io.FileUtils;import org.openqa.selenium.OutputType;import org.openqa.selenium.TakesScreenshot;uvoz org.openqa.selenium.WebDriver;uvoz org.openqa.selenium.firefox.FirefoxDriver;javni razred BaseClass {statični gonilnik WebDriver;javni statični WebDriver getDriver () {če (voznik == null) {Gonilnik WebDriver;System.setProperty ("webdriver.gecko.driver", "C: \\ geckodriver.exe");voznik = novi FirefoxDriver ();}povratni voznik;}/ *** Ta funkcija bo posnela posnetek zaslona* @param spletni gonilnik* @param fileWithPath* @throws Izjema* /javna statična praznina takeSnapShot (WebDriver webdriver, String fileWithPath) vrže izjemo {// Pretvorite objekt spletnega gonilnika v TakeScreenshotTakesScreenshot scrShot = ((TakesScreenshot) spletni gonilnik);// Pokličite metodo getScreenshotAs za ustvarjanje slikovne datotekeDatoteka SrcFile = scrShot.getScreenshotAs (OutputType.FILE);// Premakni slikovno datoteko na nov ciljDatoteka DestFile = nova datoteka (fileWithPath);// Kopiraj datoteko na ciljFileUtils.copyFile (SrcFile, DestFile);}}

2. korak) Prilagodite JypersionListener.java

Držali se bomo privzete oblike poročila. Izdelali pa bomo 2 prilagoditvi

  • Dodajanje kode, da naročite JypersionListener, da posname posnetek zaslona o napaki
  • Priložite povezavo posnetka zaslona v poročilu PDF

Dodajte kodo, da sliko zaslona priložite poročilu PDF

Korak 3) Ustvarite TestGuru99PDFEmail.java, ki bo izvajal testne primere, ustvarite PDF

  • Tu bomo kot poslušalca dodali JyperionListener.class
  • Izvedli bomo 3 testne primere.
  • Z uporabo Assert.assertTrue bomo pri preizkusu samo enega opravili dva preizkusna primera.
  • Posnetek zaslona bo za neuspešne testne primere narejen samo v skladu z našimi prilagoditvami
paket PDFEmail;uvoz java.util.Properties;uvoz javax.activation.DataHandler;uvoz javax.activation.DataSource;uvoz javax.activation.FileDataSource;uvoz javax.mail.BodyPart;uvoz javax.mail.Message;uvoz javax.mail.MessagingException;uvoz javax.mail.Multipart;uvoz javax.mail.Session;uvoz javax.mail.Transport;uvoz javax.mail.internet.AddressException;uvoz javax.mail.internet.InternetAddress;uvoz javax.mail.internet.MimeBodyPart;uvoz javax.mail.internet.MimeMessage;uvoz javax.mail.internet.MimeMultipart;uvoz 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;// Dodaj poslušalca za ustvarjanje poročila pdf@Listeners (JyperionListener.class)javni razred TestGuru99PDFReport razširja BaseClass {Gonilnik WebDriver;// Testcase ni uspel, zato je posnetek zaslona ustvarjen@Testjavni void testPDFReportOne () {voznik = BaseClass.getDriver ();driver.get ("http://google.com");Assert.assertTrue (false);}// Testcase ni uspel, zato je posnetek zaslona ustvarjen@Testjavni preizkus prazninePDFReporTwo () {voznik = BaseClass.getDriver ();driver.get ("http: /guru99.com");Assert.assertTrue (false);}// Testni testni primer bo uspešno opravljen, zato na njem ni posnetka zaslona@Testjavni preizkus prazninePDFReportThree () {voznik = BaseClass.getDriver ();driver.get ("http://demo.guru99.com");Assert.assertTrue (true);}

Korak 4) Dodajte kodo TestGuru99PDFEmail.java, da pošljete poročilo PDF po e-pošti

  • Pripis @AfterSuite bomo uporabili za pošiljanje e-pošte poročila PDF
  • E-pošto bomo pošiljali z Gmailom
  • Če želite omogočiti e-pošto, morate uvoziti veliko knjižničnih datotek, kot so mail.jar, pop3.jar, smptp.jar itd.
  • Preden izvedete to, vnesite od, na e-poštni naslov in geslo
 // Po popolni izvedbi pošljite pdf poročilo po e-pošti@AfterSuitepublic void tearDown () {sendPDFReportByGMail (" Ta e-poštni naslov je zaščiten proti smetenju. Če ga želite videti, omogočite Javascript.", "geslo", "Ta e-poštni naslov je zaščiten proti smetenju. Če ga želite videti, omogočite Javascript. "," Poročilo PDF "," ");} / ** * Pošljite e-pošto z uporabo java * @param iz * @param pass * @param na * @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 ", gostitelj); props.put (" mail.smtp.user ", od); props.put (" mail.smtp.password ", pass); props.put (" mail.smtp.port "," 587 "); props.put (" mail.smtp.auth "," true "); seja seje = Session.getDefaultInstance (rekviziti); MimeMessage message = novo sporočilo MimeMessage (seja);poskusite {// Nastavi z naslova message.setFrom (new InternetAddress (from)); message.addRecipient (Message.RecipientType.TO, nov InternetAddress (do)); // Nastavi predmetno sporočilo.setSubject (subject); message.setText (telo); BodyPart objMessageBodyPart = nov MimeBodyPart (); objMessageBodyPart.setText ("Poiščite priloženo datoteko poročila!"); Multipart multipart = nov MimeMultipart (); multipart.addBodyPart (objMessageBodyPart); objMessageBodyPart = nov MimeBodyPart (); // Nastavi pot do datoteke poročila pdf String filename = System.getProperty ("user.dir") + "\\ Privzeti test.pdf"; // Ustvari vir podatkov, da datoteko priložite v pošto DataSource source = new FileDataSource (ime datoteke); objMessageBodyPart.setDataHandler (nov DataHandler (vir)); objMessageBodyPart.setFileName (ime datoteke); multipart.addBodyPart (objMessageBodyPart); sporočilo.setContent (večdelni); Transport transport = session.getTransport ("smtp"); transport.connect (gostitelj, od, mimo); transport.sendMessage (message, message.getAllRecipients ()); transport.close (); } catch (AddressException ae) {ae.printStackTrace (); } catch (MessagingException me) {me.printStackTrace (); }}}

Celoten projekt prenesite tukaj

Opomba: Ko kliknemo povezavo posnetka zaslona v pdf, se prikaže varnostno pogovorno okno. Dovoliti moramo, da se to pogovorno okno odpre v pdf.

Tako ustvarjeno e-poštno sporočilo bo videti tako

Povzetek:

  • TestNG ima vgrajeno sposobnost poročanja.
  • Po popolni izvedbi testnih primerov TestNG v korenu projekta ustvari mapo test-output.
  • V mapi test-output sta dve glavni poročili, index.html in emailable-report.html.
  • Za prilagoditev poročila TestNG moramo uporabiti dva vmesnika, ITestListener in IReporter.
  • Če moramo dobiti poročilo med izvedbo, potrebujemo ITestListener.
  • Za izdelavo končnega poročila po popolni izvedbi moramo implementirati IReporter.
  • Če posnamemo posnetek zaslona, ​​moramo v programu Selenium WebDriver vnesti cast WebDriver v vmesnik TakesScreenShot.
  • Če želite ustvariti poročila pdf, moramo v projekt dodati kozarec IText.

V tej vadnici prenesite datoteke za projekt Selenium za predstavitev