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
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 (seznamarg0, 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
- Ustvari poročilo po meri v obliki PDF
- Posnemite posnetke zaslona SAMO za napake. Povezava do posnetkov zaslona v PDF
- 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