Tinkinti, PDF & Siųskite „TestNG“ ataskaitas el. Paštu „Selenium WebDriver“

Turinys:

Anonim

Prieš pradėdami nagrinėti bet ką kitą, pirmiausia supraskime -

Kodėl mums reikia ataskaitų?

Kai naudojame „Selenium“ ar bet kurį kitą automatikos įrankį, atliekame operacijas žiniatinklio programoje. Tačiau mūsų automatikos tikslas nėra tik išbandyti taikomąją programą. Mes, kaip automatikos testuotojas, turėtume išbandyti programą, rasti klaidas ir pranešti apie tai kūrėjų komandai ar aukštesnei vadovybei. Čia ataskaitos tampa svarbios programinės įrangos testavimo procesui

„TestNG“ ataskaitų teikimas

„TestNG“ biblioteka teikia labai patogią ataskaitų teikimo funkciją. Po atlikimo „Testng“ sugeneruos bandomojo išvesties aplanką projekto šaknyje. Šiame aplanke yra dviejų tipų ataskaitos -

Index.html: Tai yra išsami dabartinio vykdymo ataskaita, kurioje yra tokia informacija kaip klaida, grupės, laikas, žurnalistų žurnalai, bandomieji XML failai.

emailable-report.html: Tai yra apibendrinta dabartinio bandymo vykdymo ataskaita, kurioje yra „Test Case“ pranešimas žalia spalva (jei bandymo atvejis yra tinkamas) ir raudonos spalvos (jei bandymo atvejis nepavyko).

Kaip pritaikyti „TestNG“ ataskaitą

„TestNG“ ataskaitos yra gana patogios, tačiau vis tiek kartais mums reikia šiek tiek mažiau duomenų ataskaitose arba norime rodyti ataskaitas kitu formatu, pvz., Pdf, „Excel“ ir pan., Arba norime pakeisti ataskaitos išdėstymą.

Tinkinti „TestNG“ ataskaitą galime dviem būdais

  • „ITestListener“ sąsajos naudojimas:
  • „IReporter“ sąsajos naudojimas:

„ITestListener“ sąsaja

Šią sąsają naudojame, kai reikia pritaikyti realaus laiko ataskaitą. Kitaip tariant, jei vykdome daugybę bandymų atvejų „TetNG“ rinkinyje ir norime gauti kiekvieno bandymo atvejo ataskaitą, tada po kiekvieno bandymo atvejo turime įdiegti „ITestListener“ sąsają. Ši sąsaja pakeis „onTestFailure“, „onTestStart“, „onTestSkipped“ metodą, kad būtų išsiųsta teisinga dabartinio bandymo atvejo būsena.

Štai žingsniai, kuriuos atliksime

  • Sukurkite klasę, sakydami „RealGuru99Report“, ir įdiekite joje „iTestListener“.
  • Įgyvendinkite „iTestListener“ metodus
  • Sukurkite bandymo metodą ir pridėkite „RealGuru99Report“ klasę kaip klausytoją „Test Method“ klasėje.

Kodo pavyzdys

RealGuru99TimeReport.java yra realaus laiko ataskaitų teikimo klasė. Ji įdiegs „ITestListener“ sąsają ataskaitoms teikti

paketas testNGReport.realTimeReport;importuoti org.testng.ITestContext;importuoti org.testng.ITestListener;importuoti org.testng.ITestResult;viešoji klasė „RealGuru99TimeReport“ įgyvendina „ITestListener“ {@ Nepaisytipublic void onStart (ITestContext arg0) {System.out.println ("Vykdymo pradžia (TESTAS) ->" + arg0.getName ());}@ Nepaisytipublic void onTestStart (ITestResult arg0) {System.out.println ("Testas pradėtas ->" + arg0.getName ());}@ Nepaisytipublic void onTestSuccess (ITestResult arg0) {System.out.println ("Test Pass ->" + arg0.getName ());}@ Nepaisytipublic void onTestFailure (ITestResult arg0) {System.out.println ("Bandymas nepavyko ->" + arg0.getName ());}@ Nepaisytipublic void onTestSkipped (ITestResult arg0) {System.out.println ("Testas praleistas ->" + arg0.getName ());}@ Nepaisytipublic void onFinish (ITestContext arg0) {System.out.println ("Vykdymo pabaiga (TESTAS) ->" + arg0.getName ());}@ Nepaisytipublic void onTestFailedButWithinSuccessPercentage (ITestResult arg0) {// TODO Automatiškai sugeneruotas metodas}}

TestGuru99RealReport.java yra tikrosios ataskaitos bandymo atvejis

paketas testNGReport.realTimeReport;importuoti org.testng.Assert;importuoti org.testng.nototations.Klausytojai;importuoti org.testng.annotations.Test;@Listeners (RealGuru99TimeReport.class)viešoji klasė TestGuru99RealReport {@Testpublic void testRealReportOne () {„Assert.assertTrue“ (tiesa);}@Testpublic void testRealReportTwo () {„Assert.assertTrue“ (klaidinga);}// Testas priklauso nuo nepavykusio testcase = testRealReportTwo@Test (priklausoOnMethods = "testRealReportTwo")public void testRealReportThree () {}}

Rezultatas atrodys

IReporterio sąsaja

Jei norime pritaikyti galutinę „TestNG“ sugeneruotą bandymų ataskaitą, turime įdiegti „IReporter“ sąsają. Ši sąsaja turi tik vieną metodą, kaip įdiegti „enerReport “. Šis metodas turi visą informaciją apie visą bandymo vykdymą sąraše , ir mes galime generuoti ataskaitą naudodamiesi ja.

Kodo pavyzdys

„Guru99Reporter.java“ yra failas, naudojamas tinkinti ataskaitą

paketo testNGReport.iReporterReport;importuoti java.util.Collection;importuoti java.util.Date;importuoti java.util.List;importuoti java.util.Žemėlapis;importuoti java.util.Set;importuoti org.testng.IReporter;importuoti org.testng.IResultMap;importuoti org.testng.ISuite;importuoti org.testng.ISuiteResult;importuoti org.testng.ITestContext;importuoti org.testng.ITestNGMethod;importuoti org.testng.xml.XmlSuite;viešoji klasė „Guru99Reporter“ įgyvendina „IReporter“ {@ Nepaisytipublic void generatorReport (sąrašas  arg0, sąrašas  arg1,String outputDirectory) {// Antrame šio metodo parametre „ISuite“ bus visas įvykdytas rinkinys.už (ISuite iSuite: arg1) {// Vienu metu gaukite vieno rinkinio rezultato žemėlapįŽemėlapis  results = iSuite.getResults ();// Gaukite rezultatų žemėlapio raktąNustatykite klavišus  = results.keySet ();// Eikite po kiekvieną žemėlapio vertę po vienąuž (String key: keys) {// Dabartinio rezultato konteksto objektas„ITestContext“ kontekstas = results.get (raktas) .getTestContext ();// „Print Suite“ informacija „Console“System.out.println ("Suite pavadinimas ->" + context.getName ()+ ":: Ataskaitos išvesties aprašas ->" + context.getOutputDirectory ()+ ":: Rinkinio pavadinimas ->" + context.getSuite (). GetName ()+ ":: Pradžios data vykdymo laikas ->" + context.getStartDate ()+ ":: Pabaigos data vykdymo laikas ->" + context.getEndDate ());// Gauti žemėlapį tik nepavykusiems bandymamsIResultMap resultMap = context.getFailedTests ();// Gaukite išsamią informaciją apie nepavykusius bandymo atvejusKolekcija  failMethods = resultMap.getAllMethods ();// Visus nepavykusius metodus surinkite po vienąSystem.out.println ("-------- NEPAVYKUSI BANDYMO ATVEJIS ---------");už (ITestNGMethod iTestNGMethod: nepavykoMethods) {// Spausdinti nepavykusius bandymų atvejusSystem.out.println ("TESTCASE NAME ->" + iTestNGMethod.getMethodName ()+ "\ nDescription ->" + iTestNGMethod.getDescription ()+ "\ nPriority ->" + iTestNGMethod.getPriority ()+ "\ n: Data ->" + nauja data (iTestNGMethod.getDate ()));}}}}}

„TestGuru99ForReporter.java“ yra „Custom Reporting“ demonstracinė versija

paketo testNGReport.iReporterReport;importuoti org.testng.Assert;importuoti org.testng.nototations.Klausytojai;importuoti org.testng.annotations.Test;// Pridėkite klausytoją, kad išklausytumėte ataskaitą, ir parašykite ją, kai baigsis testas@ Klausytojai (vertė = Guru99Reporter.class)viešoji klasė „TestGuru99ForReporter“ {@Test (prioritetas = 0, aprašymas = "testReporterOne")public void testReporterOne () {// Išlaikyti bandymo atvejį„Assert.assertTrue“ (tiesa);}@Test (prioritetas = 1, aprašymas = "testReporterTwo")public void testReporterTwo () {// Nepavyko bandymo atvejis„Assert.assertTrue“ (klaidinga);}}

Rezultatas bus panašus į

Ataskaitų PDF ir el. Paštas

Aukščiau pateiktas ataskaitos įgyvendinimas yra gana paprastas ir aiškus, kad galėtumėte pradėti naudoti ataskaitų tinkinimą.

Tačiau įmonės aplinkoje turėsite sukurti labai pritaikytas ataskaitas. Štai scenarijus, su kuriuo susidursime

  1. Sukurkite pasirinktinę ataskaitą PDF formatu
  2. Fotografuokite TIK iš klaidų. Nuoroda į ekrano kopijas PDF formatu
  3. Siųsti PDF el. Laišką

PDF ataskaita atrodo taip

Norėdami sukurti pdf ataskaitą, mums reikia „Java API IText“ . Atsisiųskite jį čia. Yra dar viena pasirinktinių klausytojų klasė, kuri iš tikrųjų įgyvendina šį „IText“ indelį ir kuria mums pdf ataskaitą. Atsisiųskite jį čia

Aukščiau pateiktame paveikslėlyje parodytas numatytasis sukurtos PDF ataskaitos formatas. Galite jį pritaikyti

Štai kaip mes tai priimsime

1 žingsnis) Sukurkite pagrindinę klasę

2 žingsnis) Tinkinkite „JypersionListerner.Java“ (PDF kūrimo kodas)

3 žingsnis) Sukurkite TestGuru99PDFEmail.java, kuri atliks bandomuosius atvejus, sukurkite PDF

4 žingsnis. Pridėkite kodą „TestGuru99PDFEmail.java“, jei norite siųsti PDF ataskaitą el. Paštu

Panagrinėkime šiuos veiksmus

1 žingsnis) Sukurkite pagrindinę klasę

Ši bazinė klasė turi funkcijas „WebDriver“ ir „Screenshot“ sukūrimui

paketas PDFEmail;importuoti java.io.File;importuoti org.apache.commons.io.FileUtils;importuoti org.openqa.selenium.OutputType;importuoti org.openqa.selenium.TakesScreenshot;importuoti org.openqa.selenium.WebDriver;importuoti org.openqa.selenium.firefox.FirefoxDriver;viešosios klasės „BaseClass“ {statinis „WebDriver“ tvarkyklė;viešasis statinis „WebDriver“ getDriver () {jei (tvarkyklė == nulis) {„WebDriver“ tvarkyklė;System.setProperty ("webdriver.gecko.driver", "C: \\ geckodriver.exe");tvarkyklė = new FirefoxDriver ();}grįžtantis vairuotojas;}/ *** Ši funkcija padarys ekrano kopiją* @param žiniatinklio tvarkyklė* @param fileWithPath* @ throws išimtis* /public static void takeSnapShot („WebDriver“ žiniatinklio tvarkyklė, „String fileWithPath“) išmeta išimtį {// Konvertuoti žiniatinklio tvarkyklės objektą į „TakeScreenshot“„TakesScreenshot“ scrShot = ((„TakesScreenshot“ žiniatinklio tvarkyklė);// Skambinkite „getScreenshotAs“ metodu, kad sukurtumėte vaizdo failąFailas SrcFile = scrShot.getScreenshotAs (OutputType.FILE);// Perkelkite vaizdo failą į naują paskirties vietąFailas DestFile = naujas failas (fileWithPath);// Kopijuoti failą paskirties vietojeFileUtils.copyFile (SrcFile, DestFile);}}

2 žingsnis) Tinkinkite „JypersionListener.java“

Laikysimės numatytojo ataskaitos formato. Bet mes atliksime 2 pritaikymus

  • Pridedant kodą nurodoma „JypersionListener“ padaryti ekrano kopiją apie klaidą
  • Ekrano kopijos nuorodos pridėjimas PDF ataskaitoje

Pridėkite kodą, kad pridėtumėte ekrano kopiją prie PDF ataskaitos

3 žingsnis) Sukurkite TestGuru99PDFEmail.java, kuri atliks bandomuosius atvejus, sukurkite PDF

  • Čia kaip klausytoją pridėsime „JyperionListener.class“
  • Mes atliksime 3 bandymo atvejus.
  • Naudodami „Assert.assertTrue“, 2 bandymo atvejai nepavyks, kai praeisime tik vieną.
  • Nepavykusių bandymų atvejų ekrano kopija bus atlikta tik pagal mūsų tinkinimus
paketas PDFEmail;importuoti java.util.Nuosavybės;importuoti javax.activation.DataHandler;importuoti javax.activation.DataSource;importuoti javax.activation.FileDataSource;importuoti javax.mail.BodyPart;importuoti javax.mail.Message;importuoti javax.mail.MessagingException;importuoti javax.mail.Multipart;importuoti javax.mail.Session;importuoti javax.mail.Transport;importuoti javax.mail.internet.AddressException;importuoti javax.mail.internet.InternetAddress;importuoti javax.mail.internet.MimeBodyPart;importuoti javax.mail.internet.MimeMessage;importuoti javax.mail.internet.MimeMultipart;importuoti org.openqa.selenium.WebDriver;importuoti org.testng.Assert;importuoti org.testng.annotations.AfterSuite;importuoti org.testng.nototations.Klausytojai;importuoti org.testng.annotations.Test;importo žurnalistas.JyperionListener;// Pridėti klausytoją, kuriantį pdf ataskaitą@ Klausytojai (JyperionListener.class)viešoji klasė „TestGuru99PDFReport“ pratęsia „BaseClass“ {„WebDriver“ tvarkyklė;// „Testcase“ nepavyko, todėl sukurta ekrano kopija@Testpublic void testPDFReportOne () {tvarkyklė = BaseClass.getDriver ();driver.get ("http://google.com");„Assert.assertTrue“ (klaidinga);}// „Testcase“ nepavyko, todėl sukurta ekrano kopija@Testpublic void testPDFReporTwo () {tvarkyklė = BaseClass.getDriver ();vairuotojas.get ("http: /guru99.com");„Assert.assertTrue“ (klaidinga);}// Bandomasis bandymo atvejis bus išlaikytas, todėl ekrano nebus@Testpublic void testPDFReportThree () {tvarkyklė = BaseClass.getDriver ();vairuotojas.get ("http://demo.guru99.com");„Assert.assertTrue“ (tiesa);}

4 žingsnis. Pridėkite kodą „TestGuru99PDFEmail.java“, jei norite siųsti PDF ataskaitą el. Paštu

  • Norėdami naudoti PDF ataskaitos el. Laišką, mes naudosime komentarą @AfterSuite
  • Siųsime el. Laišką naudodami „Gmail“
  • Norėdami įgalinti el. Paštą, turite importuoti daug bibliotekos failų, pvz., Mail.jar, pop3.jar, smptp.jar ir kt.
  • Prieš atlikdami tai, įveskite el. Pašto adresą ir slaptažodį nuo
 // Baigę vykdyti, atsiųskite ataskaitą el. Paštu@AfterSuitepublic void „tearDown“ () {sendPDFReportByGMail (" Šis el. pašto adresas yra apsaugotas nuo šiukšlų. Jums reikia įgalinti JavaScript, kad galėtumėte jį pamatyti.", "slaptažodis", "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(); } } }

Atsisiųskite visą projektą čia

Pastaba: Kai spustelėsime ekrano kopijos nuorodą pdf formatu, bus parodytas saugos dialogas. Turime leisti šiam dialogui atidaryti pdf.

Taip sugeneruotas el. Laiškas atrodys taip

Santrauka:

  • „TestNG“ turi integruotą ataskaitų teikimo galimybę.
  • Pabaigęs bandomuosius atvejus, TestNG sukuria bandomųjų išvesties aplanką projekto šaknyje.
  • Test-output aplanke yra dvi pagrindinės ataskaitos: index.html ir el. Paštu-report.html.
  • Norėdami pritaikyti „TestNG“ ataskaitą, turime įdiegti dvi sąsajas - „ITestListener“ ir „IReporter“.
  • Jei tarp vykdymo turime gauti ataskaitą, mums reikia „ITestListener“.
  • Norėdami sukurti galutinę ataskaitą po visiško įvykdymo, turime įdiegti „IReporter“.
  • Padarę ekrano kopiją „Selenium WebDriver“ turime įvesti „WebDriver“ į „TakesScreenShot“ sąsają.
  • Norėdami sugeneruoti pdf ataskaitas, turime į projektą įtraukti „IText jar“.

Šioje pamokoje atsisiųskite „Selenium“ projekto failus, skirtus demonstracijai