Kohanda, PDF ja e-post TestNG Aruanded sisse Selenium Veebidraiver
Enne kui hakkame midagi muud uurima, mõistame kõigepealt
Miks me vajame aruandlust?
Kui me kasutame Selenium või mõni muu automatiseerimistööriist, teostame veebirakenduses toiminguid. Kuid meie automatiseerimise eesmärk ei ole ainult testitava rakenduse kasutamine. Meie, automaatika testija, peaksime rakendust testima, vead leidma ja arendusmeeskonnale või kõrgemale juhtkonnale teatama. Siin muutub aruandlus tarkvara jaoks oluliseks Testimine protsess
TestNG Aruandlus
TestNG raamatukogu pakub väga mugavat aruandlusfunktsiooni. Pärast hukkamist, Testng loob projekti juurtes test-väljundkausta. See kaust sisaldab kahte tüüpi aruandeid -
Index.html: See on praeguse täitmise täielik aruanne, mis sisaldab teavet, nagu viga, rühmad, aeg, reporteri logid, XML-failide testimine.
emailable-report.html: See on praeguse testi täitmise koondaruanne, mis sisaldab Testjuhtum teade on esile tõstetud rohelise (testi läbimise korral) ja punasega (ebaõnnestunud testjuhtumite puhul).
Kuidas kohandada TestNG Aruanne
TestNG aruandlus on üsna mugav, kuid mõnikord vajame aruannetes vähem andmeid või tahame kuvada aruandeid mõnes muus vormingus (nt pdf, excel vms) või soovime muuta aruande paigutust.
Me saame kohandada kahel viisil TestNG aru
- ITestListeneri liidese kasutamine:
- IReporteri liidese kasutamine:
ITestListeneri liides
Kasutame seda liidest, kui peame kohandama reaalajas aruannet. Teisisõnu, kui teostame hulga testjuhtumeid TetNG komplektis ja tahame saada iga testjuhtumi aruannet, siis pärast iga testjuhtumit peame rakendama ITestListeneri liidese. See liides alistab meetodi TestFailure, onTestStart ja onTestSkipped, et saata praeguse testjuhtumi õige olek.
Siin on sammud, mida järgime
- Looge klass, öelge RealGuru99Report ja rakendage selles iTestListener.
- Rakendage iTestListeneri meetodeid
- Looge testmeetod ja lisage klassis Test Method kuulajaks RealGuru99Report klass.
Koodinäide
RealGuru99TimeReport.java on reaalajas aruandlusklass. See rakendab aruandluse jaoks ITestListeneri liidest
package testNGReport.realTimeReport; import org.testng.ITestContext; import org.testng.ITestListener; import org.testng.ITestResult; public class RealGuru99TimeReport implements ITestListener{ @Override public void onStart(ITestContext arg0) { System.out.println("Start Of Execution(TEST)->"+arg0.getName()); } @Override public void onTestStart(ITestResult arg0) { System.out.println("Test Started->"+arg0.getName()); } @Override public void onTestSuccess(ITestResult arg0) { System.out.println("Test Pass->"+arg0.getName()); } @Override public void onTestFailure(ITestResult arg0) { System.out.println("Test Failed->"+arg0.getName()); } @Override public void onTestSkipped(ITestResult arg0) { System.out.println("Test Skipped->"+arg0.getName()); } @Override public void onFinish(ITestContext arg0) { System.out.println("END Of Execution(TEST)->"+arg0.getName()); } @Override public void onTestFailedButWithinSuccessPercentage(ITestResult arg0) { // TODO Auto-generated method stub } }
TestGuru99RealReport.java on tõelise aruande testjuhtum
package testNGReport.realTimeReport; import org.testng.Assert; import org.testng.annotations.Listeners; import org.testng.annotations.Test; @Listeners(RealGuru99TimeReport.class) public class TestGuru99RealReport { @Test public void testRealReportOne(){ Assert.assertTrue(true); } @Test public void testRealReportTwo(){ Assert.assertTrue(false); } //Test case depends on failed testcase= testRealReportTwo @Test(dependsOnMethods="testRealReportTwo") public void testRealReportThree(){ } }
Väljund näeb välja selline -
IReporteri liides
Kui soovime kohandada poolt loodud lõplikku testiaruannet TestNG, peame rakendama IReporteri liidese. Sellel liidesel on generReport rakendamiseks ainult üks meetod. Sellel meetodil on loendis kogu teave täieliku testi täitmise kohta ja saame selle abil aruande luua.
Koodinäide
Guru99Reporter.java on fail, mida kasutatakse aruande kohandamiseks
package 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; public class Guru99Reporter implements IReporter{ @Override public void generateReport(List<XmlSuite> arg0, List<ISuite> arg1, String outputDirectory) { // Second parameter of this method ISuite will contain all the suite executed. for (ISuite iSuite : arg1) { //Get a map of result of a single suite at a time Map<String,ISuiteResult> results = iSuite.getResults(); //Get the key of the result map Set<String> keys = results.keySet(); //Go to each map value one by one for (String key : keys) { //The Context object of current result ITestContext context = results.get(key).getTestContext(); //Print Suite detail in Console System.out.println("Suite Name->"+context.getName() + "::Report output Ditectory->"+context.getOutputDirectory() +"::Suite Name->"+ context.getSuite().getName() +"::Start Date Time for execution->"+context.getStartDate() +"::End Date Time for execution->"+context.getEndDate()); //Get Map for only failed test cases IResultMap resultMap = context.getFailedTests(); //Get method detail of failed test cases Collection<ITestNGMethod> failedMethods = resultMap.getAllMethods(); //Loop one by one in all failed methods System.out.println("--------FAILED TEST CASE---------"); for (ITestNGMethod iTestNGMethod : failedMethods) { //Print failed test cases detail System.out.println("TESTCASE NAME->"+iTestNGMethod.getMethodName() +"\nDescription->"+iTestNGMethod.getDescription() +"\nPriority->"+iTestNGMethod.getPriority() +"\n:Date->"+new Date(iTestNGMethod.getDate())); } } } } }
TestGuru99ForReporter.java on kohandatud aruandluse demo
package testNGReport.iReporterReport; import org.testng.Assert; import org.testng.annotations.Listeners; import org.testng.annotations.Test; //Add listener to listen report and write it when testcas finished @Listeners(value=Guru99Reporter.class) public class TestGuru99ForReporter { @Test(priority=0,description="testReporterOne") public void testReporterOne(){ //Pass test case Assert.assertTrue(true); } @Test(priority=1,description="testReporterTwo") public void testReporterTwo(){ //Fail test case Assert.assertTrue(false); } }
Väljund on selline -
PDF ja aruannete e-post
Ülaltoodud aruande rakendamine on üsna lihtne ja selge, et saaksite aruande kohandamisega alustada.
Kuid ettevõtte keskkonnas peate looma väga kohandatud aruandeid. Siin on stsenaarium, millega me tegeleme
- Loo kohandatud aruanne PDF-vormingus
- Tehke ekraanipilte AINULT vigade korral. Link ekraanipiltidele PDF-is
- Saada PDF-i meil
PDF-aruanne näeb välja selline
Pdf-aruande koostamiseks vajame a Java API IText. Laadige see alla siin . On veel üks kohandatud kuulajaklass, mis tegelikult rakendab seda ITexti jari ja loob meie jaoks pdf-aruande. Laadige see alla siin
Ülaltoodud joonis näitab loodud PDF-aruande vaikevormingut. Saate seda kohandada
Siin on, kuidas me sellele läheneme
1. samm) looge baasklass
2. samm) Kohandage JypersionListerner.Java (PDF-i loomise kood)
Samm 3) Looge testGuru99PDFEmail.java, mis käivitab testjuhtumid ja loob PDF-i
Samm 4) Lisage kood saidile TestGuru99PDFEmail.java, et saata PDF-aruanne meili teel
Vaatame neid samme
1. samm) looge baasklass
Sellel baasklassil on funktsioonid WebDriveri loomiseks ja ekraanipildi tegemiseks
package PDFEmail; import java.io.File; import org.apache.commons.io.FileUtils; import org.openqa.selenium.OutputType; import org.openqa.selenium.TakesScreenshot; import org.openqa.selenium.WebDriver; import org.openqa.selenium.firefox.FirefoxDriver; public class BaseClass { static WebDriver driver; public static WebDriver getDriver(){ if(driver==null){ WebDriver driver ; System.setProperty("webdriver.gecko.driver","C:\\geckodriver.exe"); driver = new FirefoxDriver(); } return driver; } /** * This function will take screenshot * @param webdriver * @param fileWithPath * @throws Exception */ public static void takeSnapShot(WebDriver webdriver,String fileWithPath) throws Exception{ //Convert web driver object to TakeScreenshot TakesScreenshot scrShot =((TakesScreenshot)webdriver); //Call getScreenshotAs method to create image file File SrcFile=scrShot.getScreenshotAs(OutputType.FILE); //Move image file to new destination File DestFile=new File(fileWithPath); //Copy file at destination FileUtils.copyFile(SrcFile, DestFile); } }
2. samm) Kohandage JypersionListener.java
Jääme aruande vaikevormingu juurde. Kuid me teeme 2 kohandust
- Koodi lisamine, et juhendada JypersionListenerit vea korral ekraanipilti tegema
- Lisan PDF-aruandes pildi pildi lingi
Lisage kood, et lisada ekraanipilt PDF-aruandele
Samm 3) Looge testGuru99PDFEmail.java, mis käivitab testjuhtumid ja loob PDF-i
- Siia lisame kuulajaks JyperionListener.class
- Viime läbi 3 testjuhtumit.
- Kasutades Assert.assertTrue, kukume läbi 2 testjuhtumit, läbides vaid ühe.
- Ekraanipilt tehakse ainult ebaõnnestunud testjuhtumite kohta vastavalt meie kohandustele
package PDFEmail; import 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 reporter.JyperionListener; //Add listener for pdf report generation @Listeners(JyperionListener.class) public class TestGuru99PDFReport extends BaseClass { WebDriver driver; //Testcase failed so screen shot generate @Test public void testPDFReportOne(){ driver = BaseClass.getDriver(); driver.get("http://google.com"); Assert.assertTrue(false); } //Testcase failed so screen shot generate @Test public void testPDFReporTwo(){ driver = BaseClass.getDriver(); driver.get("http:/guru99.com"); Assert.assertTrue(false); } //Test test case will be pass, so no screen shot on it @Test public void testPDFReportThree(){ driver = BaseClass.getDriver(); driver.get("https://demo.guru99.com"); Assert.assertTrue(true); }
Samm 4) Lisage kood saidile TestGuru99PDFEmail.java, et saata PDF-aruanne meili teel
- Kasutame PDF-aruande meili saatmiseks märkust @AfterSuite
- Saadame e-kirju Gmaili kaudu
- Meili lubamiseks tuleb importida palju teegifaile, nagu mail.jar, pop3.jar, smptp.jar jne
- Enne selle käivitamist sisestage e-posti aadress ja parool
//After complete execution send pdf report by email @AfterSuite public void tearDown(){ sendPDFReportByGMail("FROM@gmail.com", "password", "TO@gmail.com", "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(); } } }
Laadige kogu projekt alla siit
Märkus. Kui klõpsame pdf-is ekraanipildi lingil, kuvatakse turvadialoog. Peame lubama sellel dialoogil pdf-i avada.
Sel viisil loodud e-kiri näeb välja selline
kokkuvõte
- TestNG on sisseehitatud aruandlusvõime.
- Pärast testjuhtumite täielikku täitmist TestNG genereerib projekti juurkataloogis test-väljundkausta.
- Test-väljundi kaustas on kaks peamist aruannet, index.html ja emailable-report.html.
- Kohandamiseks TestNG aruanne, peame rakendama kaks liidest, ITestListener ja IReporter.
- Kui vajame täitmise vahepeal aruannet, vajame ITestListenerit.
- Lõpparuande koostamiseks pärast täielikku täitmist peame rakendama IReporteri.
- Ekraanipildi tegemine, sisse Selenium WebDriver, peame sisestama cast WebDriver TakesScreenShot liidesesse.
- Pdf-aruannete genereerimiseks peame projekti lisama IText jari.
Lae alla Selenium Selle õpetuse demo projektifailid