Prilagodi, PDF & Pošaljite TestNG izvješća e-poštom u programu Selenium WebDriver

Sadržaj:

Anonim

Prije nego što istražimo bilo što drugo, prvo shvatimo -

Zašto trebamo izvještavanje?

Kada koristimo Selenium ili bilo koji drugi alat za automatizaciju, izvodimo operacije na web aplikaciji. Ali naša svrha automatizacije nije samo vježbanje aplikacije koja se testira. Mi bismo kao ispitivač automatizacije trebali testirati aplikaciju, pronaći greške i prijaviti ih razvojnom timu ili višem menadžmentu. Ovdje izvještavanje dobiva na značaju za proces testiranja softvera

Izvještavanje o testNG-u

Biblioteka TestNG pruža vrlo praktičnu značajku izvještavanja. Nakon izvršenja, Testng će generirati test-output mapu u korijenu projekta. Ova mapa sadrži dvije vrste Izvješća-

Index.html: Ovo je cjelovito izvješće o trenutnom izvršavanju koje sadrži informacije poput pogreške, grupa, vremena, zapisnika izvještaja, XML datoteka testng.

emailable-report.html: Ovo je sažeti izvještaj o trenutnom izvršavanju testa koji sadrži poruku Test Test zelene boje (za prolazne testne slučajeve) i crvene boje (za neuspjele testne slučajeve).

Kako prilagoditi TestNG izvješće

Izvještavanje TestNG prilično je zgodno, ali ipak, ponekad nam treba nešto manje podataka u izvješćima ili želimo prikazati izvješća u nekom drugom formatu kao što su pdf, excel itd. Ili želimo promijeniti izgled izvješća.

Izvješće TestNG možemo prilagoditi na dva načina

  • Korištenje sučelja ITestListener:
  • Korištenje IReporter sučelja:

Sučelje ITestListener

Ovo sučelje koristimo kada moramo prilagoditi izvješće u stvarnom vremenu. Drugim riječima, ako izvršavamo gomilu testnih slučajeva u TetNG paketu i želimo dobiti izvješće o svakom testnom slučaju, nakon svakog testnog slučaja moramo implementirati sučelje ITestListener. Ovo će sučelje nadjačati onTestFailure, onTestStart, onTestSkipped metodu da pošalje točan status trenutnog test slučaja.

Evo koraka koje ćemo slijediti

  • Stvorite klasu recimo RealGuru99Report i u nju implementirajte iTestListener.
  • Primijenite metode iTestListener
  • Stvorite test metodu i dodajte klasu RealGuru99Report kao slušatelja u klasi Test metoda.

Primjer koda

RealGuru99TimeReport.java je klasa izvještavanja u stvarnom vremenu. Primijenit će sučelje ITestListener za izvještavanje

paket testNGReport.realTimeReport;import org.testng.ITestContext;import org.testng.ITestListener;import org.testng.ITestResult;javna klasa RealGuru99TimeReport implementira ITestListener {@Preuzmijavna praznina onStart (ITestContext arg0) {System.out.println ("Početak izvršenja (TEST) ->" + arg0.getName ());}@Preuzmijavna praznina onTestStart (ITestResult arg0) {System.out.println ("Test je započet ->" + arg0.getName ());}@Preuzmijavna praznina onTestSuccess (ITestResult arg0) {System.out.println ("Test Pass ->" + arg0.getName ());}@Preuzmijavna praznina onTestFailure (ITestResult arg0) {System.out.println ("Test nije uspio ->" + arg0.getName ());}@Preuzmijavna praznina onTestSkipped (ITestResult arg0) {System.out.println ("Test preskočen ->" + arg0.getName ());}@Preuzmijavna praznina na Finish (ITestContext arg0) {System.out.println ("KRAJ IZVRŠENJA (TEST) ->" + arg0.getName ());}@Preuzmijavna praznina naTestFailedButWithinSuccessPercentage (ITestResult arg0) {// TODO Automatski generirani kvar metode}}

TestGuru99RealReport.java test je za stvarno izvješće

paket testNGReport.realTimeReport;import org.testng.Assert;import org.testng.annotations.Listeners;import org.testng.annotations.Test;@Listeners (RealGuru99TimeReport.class)javna klasa TestGuru99RealReport {@Testtest javne praznineRealReportOne () {Assert.assertTrue (true);}@Testtest javne praznineRealReportTwo () {Assert.assertTrue (false);}// Test slučaj ovisi o neuspjelom testcase = testRealReportTwo@Test (zavisiOnMethods = "testRealReportTwo")test javne praznineRealReportThree () {}}

Izlaz će izgledati kao-

IReporter sučelje

Ako želimo prilagoditi završno izvješće o testiranju koje je generirao TestNG, moramo implementirati IReporter sučelje. Ovo sučelje ima samo jednu metodu za provedbu generiranja izvještaja. Ova metoda sadrži sve informacije o cjelovitom izvršenju testa na Popisu , a izvještaj možemo generirati pomoću nje.

Primjer koda

Guru99Reporter.java je datoteka koja se koristi za prilagodbu izvješća

paket testNGReport.iReporterReport;import java.util.Collection;import java.util.Date;import 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;javna klasa Guru99Reporter provodi IReporter {@Preuzmijavna praznina generiraj izvještaj (Popis  arg0, Popis  arg1,String outputDirectory) {// Drugi parametar ove metode ISuite sadržavat će sav izvršeni paket.za (ISuite iSuite: arg1) {// Dohvatite kartu rezultata pojedinačnog skupa istovremenoMap  rezultati = iSuite.getResults ();// Nabavite ključ mape rezultataPostavite  tipke = results.keySet ();// Idite na svaku vrijednost karte jednu po jednufor (Tipka niza: tipke) {// Kontekstni objekt trenutnog rezultataITestContext context = results.get (key) .getTestContext ();// Ispis detalja Suitea u konzoliSystem.out.println ("Naziv paketa ->" + context.getName ()+ ":: Izlazni direktorij izvještaja ->" + context.getOutputDirectory ()+ ":: Naziv suite ->" + context.getSuite (). GetName ()+ ":: Datum početka Vrijeme za izvršenje ->" + context.getStartDate ()+ ":: Krajnji datum Vrijeme za izvršenje ->" + context.getEndDate ());// Nabavite mapu samo za neuspjele test slučajeveIResultMap resultMap = context.getFailedTests ();// Dobivanje detalja o metodi neuspjelih testnih slučajevaZbirka  failedMethods = resultMap.getAllMethods ();// Petlja jedan po jedan u svim neuspjelim metodamaSystem.out.println ("-------- SLUČAJ NEUSPJELOG TESTA ---------");za (ITestNGMethod iTestNGMethod: failedMethods) {// Ispis detalja neuspjelih testnih slučajevaSystem.out.println ("TESTCASE NAME ->" + iTestNGMethod.getMethodName ()+ "\ nOpis ->" + iTestNGMethod.getDescription ()+ "\ nPriority ->" + iTestNGMethod.getPriority ()+ "\ n: Datum ->" + novi datum (iTestNGMethod.getDate ()));}}}}}

TestGuru99ForReporter.java je demonstracija za prilagođeno izvještavanje

paket testNGReport.iReporterReport;import org.testng.Assert;import org.testng.annotations.Listeners;import org.testng.annotations.Test;// Dodajte slušatelja da slušate izvještaj i napišite ga kad testcas završi@Listeners (vrijednost = Guru99Reporter.class)javna klasa TestGuru99ForReporter {@Test (prioritet = 0, opis = "testReporterOne")test javne praznineReporterOne () {// Položiti testni slučajAssert.assertTrue (true);}@Test (prioritet = 1, opis = "testReporterTwo")test javne praznineReporterTwo () {// Test neuspjehaAssert.assertTrue (false);}}

Izlaz će biti poput-

PDF i e-pošta izvješća

Gornja implementacija izvješća prilično je jednostavna i jasna za početak prilagođavanja izvješća.

Ali u korporacijskom okruženju morat ćete stvoriti vrlo prilagođena izvješća. Evo scenarija s kojim ćemo se nositi

  1. Izradite prilagođeno izvješće u PDF obliku
  2. Snimajte snimke zaslona SAMO na pogreškama. Link na snimke zaslona u PDF-u
  3. Pošaljite e-poštu PDF-a

PDF izvješće izgleda ovako

Za stvaranje pdf izvješća potreban nam je Java API IText . Preuzmi je ovdje. Postoji još jedna prilagođena klasa slušatelja koja zapravo implementira ovu IText jar i stvara pdf izvješće za nas. Preuzmi je ovdje

Iznad slika prikazuje zadani format generiranog PDF izvještaja. Možete ga prilagoditi

Evo kako ćemo pristupiti ovome

Korak 1) Stvorite osnovnu klasu

Korak 2) Prilagodite JypersionListerner.Java (PDF kôd za izradu)

Korak 3) Stvorite TestGuru99PDFEmail.java koji će izvršiti test slučajeve, stvorite PDF

Korak 4) Dodajte kôd na TestGuru99PDFEmail.java da biste PDF izvještaj poslali e-poštom

Pogledajmo ove korake

Korak 1) Stvorite osnovnu klasu

Ova osnovna klasa ima funkcije za stvaranje WebDrivera i snimanje 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čki upravljački program WebDriver;javni statični WebDriver getDriver () {if (pokretač == null) {Upravljački program za WebDriver;System.setProperty ("webdriver.gecko.driver", "C: \\ geckodriver.exe");upravljački program = novi FirefoxDriver ();}povratni vozač;}/ *** Ova će funkcija snimiti snimku zaslona* @param webdriver* @param fileWithPath* @throws Izuzetak* /javna statička praznina takeSnapShot (WebDriver webdriver, String fileWithPath) baca iznimku {// Pretvorba objekta web upravljačkog programa u TakeScreenshotTakesScreenshot scrShot = ((TakesScreenshot) webdriver);// Pozovite metodu getScreenshotAs za stvaranje datoteke slikeDatoteka SrcFile = scrShot.getScreenshotAs (OutputType.FILE);// Premjesti slikovnu datoteku na novo odredišteDatoteka DestFile = nova datoteka (fileWithPath);// Kopiraj datoteku na odredišteFileUtils.copyFile (SrcFile, DestFile);}}

Korak 2) Prilagodite JypersionListener.java

Držat ćemo se zadanog formata izvješća. Ali izvršit ćemo 2 prilagodbe

  • Dodavanje koda koji će uputiti JypersionListener da napravi snimku zaslona o pogrešci
  • Prilažemo vezu snimke zaslona u PDF izvješću

Dodajte kôd da biste snimku zaslona priložili PDF izvješću

Korak 3) Stvorite TestGuru99PDFEmail.java koji će izvršiti test slučajeve, stvorite PDF

  • Ovdje ćemo dodati JyperionListener.class kao slušatelja
  • Izvršit ćemo 3 testna slučaja.
  • Korištenjem Assert.assertTrue proći ćemo 2 testna slučaja dok ćemo proći samo jedan.
  • Snimka zaslona snimit će se za neuspjele testne slučajeve samo prema našim prilagodbama
paket PDFEmail;import java.util.Properties;uvoz javax.activation.DataHandler;import javax.activation.DataSource;uvoz javax.activation.FileDataSource;import javax.mail.BodyPart;import javax.mail.Message;import javax.mail.MessagingException;import javax.mail.Multipart;uvoz javax.mail.Session;import javax.mail.Transport;import 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 slušatelja za generiranje pdf izvještaja@Listeners (JyperionListener.class)javna klasa TestGuru99PDFReport proširuje BaseClass {Upravljački program za WebDriver;// Testcase nije uspio, pa je snimka zaslona generirana@Testjavni void testPDFReportOne () {upravljački program = BaseClass.getDriver ();driver.get ("http://google.com");Assert.assertTrue (false);}// Testcase nije uspio, pa je snimka zaslona generirana@Testjavni void testPDFReporTwo () {upravljački program = BaseClass.getDriver ();driver.get ("http: /guru99.com");Assert.assertTrue (false);}// Test test slučaj će biti položen, tako da na njemu neće biti snimka zaslona@Testjavni void testPDFReportThree () {upravljački program = BaseClass.getDriver ();driver.get ("http://demo.guru99.com");Assert.assertTrue (true);}

Korak 4) Dodajte kôd na TestGuru99PDFEmail.java da biste PDF izvještaj poslali e-poštom

  • Koristit ćemo bilješku @AfterSuite za slanje e-pošte PDF izvješća
  • E-poštu ćemo slati putem Gmaila
  • Da biste omogućili e-poštu, trebate uvesti mnoge datoteke iz biblioteke poput mail.jar, pop3.jar, smptp.jar itd.
  • Prije nego što izvršite ovo, unesite od, na adresu e-pošte i lozinku
 // Nakon potpunog izvršenja pošaljite pdf izvještaj e-poštom@AfterSuitepublic void tearDown () {sendPDFReportByGMail (" Ova adresa e-pošte zaštićena je od neželjenih robota, potreban vam je omogućen JavaScript da biste je vidjeli.", "lozinka", "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(); } } }

Kompletni projekt preuzmite ovdje

Napomena: Kad kliknemo vezu zaslona u pdf-u, prikazuje se sigurnosni dijalog. Moramo dopustiti da se ovaj dijaloški okvir otvori u pdf-u.

Tako generirani e-mail izgledat će ovako

Sažetak:

  • TestNG ima ugrađenu sposobnost izvještavanja.
  • Nakon potpunog izvršavanja testnih slučajeva, TestNG generira test-output mapu u korijenu projekta.
  • U mapi test-output nalaze se dva glavna izvješća, index.html i emailable-report.html.
  • Da bismo prilagodili TestNG izvješće moramo implementirati dva sučelja, ITestListener i IReporter.
  • Ako trebamo dobiti izvješće između izvršenja, trebamo ITestListener.
  • Za stvaranje konačnog izvješća nakon potpunog izvršenja, moramo implementirati IReporter.
  • Uzimajući snimku zaslona, ​​u programu Selenium WebDriver moramo upisati cast WebDriver na sučelje TakesScreenShot.
  • Da bismo generirali pdf izvješća, u projekt moramo dodati IText jar.

U ovom vodiču preuzmite datoteke projekta Selenium za demonstraciju