अनुकूलित करें, पीडीएफ और ईमेल करें TestNG में रिपोर्ट करता है Selenium वेबड्राइवर
इससे पहले कि हम कुछ और देखें, आइए पहले समझते हैं -
हमें रिपोर्टिंग की आवश्यकता क्यों है?
जब हम उपयोग कर रहे हैं Selenium या किसी अन्य स्वचालन उपकरण का उपयोग करते हुए, हम वेब एप्लिकेशन पर संचालन कर रहे हैं। लेकिन स्वचालन का हमारा उद्देश्य केवल परीक्षण के तहत एप्लिकेशन का उपयोग करना नहीं है। हम, एक स्वचालन परीक्षक के रूप में, एप्लिकेशन का परीक्षण करने, बग खोजने और विकास टीम या उच्च प्रबंधन को इसकी रिपोर्ट करने वाले हैं। यहाँ रिपोर्टिंग सॉफ़्टवेयर के लिए महत्वपूर्ण हो जाती है परीक्षण प्रक्रिया
TestNG रिपोर्टिंग
TestNG लाइब्रेरी एक बहुत ही आसान रिपोर्टिंग सुविधा प्रदान करती है। निष्पादन के बाद, टेस्टिंग प्रोजेक्ट के रूट पर एक टेस्ट-आउटपुट फ़ोल्डर जेनरेट होगा। इस फ़ोल्डर में दो तरह की रिपोर्ट्स होती हैं-
सूचकांक.html: यह वर्तमान निष्पादन की पूरी रिपोर्ट है जिसमें त्रुटि, समूह, समय, रिपोर्टर लॉग, टेस्टिंग XML फ़ाइलें जैसी जानकारी शामिल है।
ईमेलयोग्य-रिपोर्ट.html: यह वर्तमान परीक्षण निष्पादन की सारांश रिपोर्ट है जिसमें निम्नलिखित शामिल है परीक्षण का मामला संदेश को हरे रंग में (पास परीक्षण मामलों के लिए) और लाल रंग में (असफल परीक्षण मामलों के लिए) हाइलाइट करें।
कैसे अनुकूलित करें TestNG रिपोर्ट
TestNG रिपोर्टिंग काफी उपयोगी है लेकिन फिर भी, कभी-कभी हमें रिपोर्ट में कुछ कम डेटा की आवश्यकता होती है या रिपोर्ट को किसी अन्य प्रारूप जैसे पीडीएफ, एक्सेल आदि में प्रदर्शित करना चाहते हैं या रिपोर्ट का लेआउट बदलना चाहते हैं।
हम दो तरीकों से इसे अनुकूलित कर सकते हैं TestNG रिपोर्ट
- ITestListener इंटरफ़ेस का उपयोग करना:
- IReporter इंटरफ़ेस का उपयोग करना:
ITestListener इंटरफ़ेस
हम इस इंटरफ़ेस का उपयोग तब करते हैं जब हमें वास्तविक समय रिपोर्ट को अनुकूलित करने की आवश्यकता होती है। दूसरे शब्दों में, यदि हम TetNG सूट में कई परीक्षण मामलों को निष्पादित कर रहे हैं और हम प्रत्येक परीक्षण मामले की रिपोर्ट प्राप्त करना चाहते हैं, तो प्रत्येक परीक्षण मामले के बाद हमें ITestListener इंटरफ़ेस को लागू करने की आवश्यकता है। यह इंटरफ़ेस वर्तमान परीक्षण मामले की सही स्थिति भेजने के लिए onTestFailure, onTestStart, onTestSkipped विधि को ओवरराइड करेगा।
हम निम्नलिखित चरणों का पालन करेंगे
- एक क्लास बनाएं जैसे RealGuru99Report और उसमें iTestListener लागू करें।
- iTestListener की विधियों को क्रियान्वित करें
- परीक्षण विधि बनाएं और RealGuru99Report वर्ग को परीक्षण विधि वर्ग में श्रोता के रूप में जोड़ें।
कोड उदाहरण
RealGuru99TimeReport.java वास्तविक समय रिपोर्टिंग क्लास है। यह रिपोर्टिंग के लिए ITestListener इंटरफ़ेस को लागू करेगा
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 वास्तविक रिपोर्ट के लिए परीक्षण मामला है
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(){ } }
आउटपुट इस प्रकार दिखेगा-
आईरिपोर्टर इंटरफ़ेस
यदि हम द्वारा उत्पन्न अंतिम परीक्षण रिपोर्ट को अनुकूलित करना चाहते हैं TestNG, हमें IReporter इंटरफ़ेस को लागू करने की आवश्यकता है। इस इंटरफ़ेस में generateReport को लागू करने के लिए केवल एक विधि है। इस विधि में सूची में एक पूर्ण परीक्षण निष्पादन की सभी जानकारी होती है , और हम इसका उपयोग करके रिपोर्ट तैयार कर सकते हैं।
कोड उदाहरण
Guru99Reporter.java वह फ़ाइल है जिसका उपयोग रिपोर्ट को अनुकूलित करने के लिए किया जाता है
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 कस्टम रिपोर्टिंग के लिए एक डेमो है
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); } }
आउटपुट इस प्रकार होगा-
रिपोर्ट की पीडीएफ और ईमेल
उपरोक्त रिपोर्ट कार्यान्वयन काफी सरल और स्पष्ट है जिससे आप रिपोर्ट अनुकूलन शुरू कर सकते हैं।
लेकिन कॉर्पोरेट माहौल में, आपको अत्यधिक अनुकूलित रिपोर्ट बनाने की आवश्यकता होगी। यहाँ वह परिदृश्य है जिससे हम निपटेंगे
- पीडीएफ फॉर्म में कस्टम रिपोर्ट बनाएं
- केवल त्रुटि होने पर ही स्क्रीनशॉट लें। स्क्रीनशॉट का लिंक PDF में है
- पीडीएफ का ईमेल भेजें
पीडीएफ रिपोर्ट इस प्रकार दिखती है
पीडीएफ रिपोर्ट बनाने के लिए हमें एक की जरूरत है Java API मैं संदेश भेजता हूं. डाउनलोड करो यहाँ उत्पन्न करें . एक और कस्टम श्रोता वर्ग है जो वास्तव में इस IText jar को कार्यान्वित कर रहा है और हमारे लिए एक पीडीएफ रिपोर्ट बना रहा है। इसे डाउनलोड करें यहाँ उत्पन्न करें
ऊपर दिया गया चित्र पीडीएफ रिपोर्ट का डिफ़ॉल्ट प्रारूप दिखाता है। आप इसे कस्टमाइज़ कर सकते हैं
हम इस पर कैसे विचार करेंगे
चरण 1) एक बेस क्लास बनाएं
चरण 2) JypersionListerner को अनुकूलित करें.Java (पीडीएफ निर्माण कोड)
चरण 3) TestGuru99PDFEmail.java बनाएं जो परीक्षण मामलों को निष्पादित करेगा, पीडीएफ बनाएगा
चरण 4) ईमेल के माध्यम से पीडीएफ रिपोर्ट भेजने के लिए TestGuru99PDFEmail.java में कोड जोड़ें
आइये इन चरणों पर नज़र डालें
चरण 1) बेस क्लास बनाएं
इस बेस क्लास में वेबड्राइवर बनाने और स्क्रीनशॉट लेने के लिए फ़ंक्शन हैं
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) JypersionListener.java को अनुकूलित करें
हम डिफ़ॉल्ट रिपोर्ट प्रारूप के साथ बने रहेंगे। लेकिन हम 2 अनुकूलन करेंगे
- त्रुटि पर स्क्रीनशॉट लेने के लिए JypersionListener को निर्देश देने के लिए कोड जोड़ना
- स्क्रीनशॉट का लिंक पीडीएफ रिपोर्ट में संलग्न करें
स्क्रीनशॉट को PDF रिपोर्ट में संलग्न करने के लिए कोड जोड़ें
चरण 3) TestGuru99PDFEmail.java बनाएं जो परीक्षण मामलों को निष्पादित करेगा, पीडीएफ बनाएगा
- यहां हम JyperionListener.class को श्रोता के रूप में जोड़ेंगे
- हम 3 परीक्षण मामलों का निष्पादन करेंगे।
- Assert.assertTrue का उपयोग करके हम 2 परीक्षण मामलों में असफल हो जाएंगे, जबकि केवल एक को पास करेंगे।
- स्क्रीनशॉट केवल हमारे अनुकूलन के अनुसार असफल परीक्षण मामलों के लिए लिया जाएगा
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("http://demo.guru99.com"); Assert.assertTrue(true); }
चरण 4) ईमेल के माध्यम से पीडीएफ रिपोर्ट भेजने के लिए TestGuru99PDFEmail.java में कोड जोड़ें
- हम पीडीएफ रिपोर्ट का ईमेल भेजने के लिए एनोटेशन @AfterSuite का उपयोग करेंगे
- हम Gmail का उपयोग करके ईमेल भेजेंगे
- ईमेल सक्षम करने के लिए, कई लाइब्रेरी फ़ाइलों को आयात करने की आवश्यकता है जैसे कि mail.jar, pop3.jar, smptp.jar, आदि
- इसे निष्पादित करने से पहले, ईमेल पता और पासवर्ड दर्ज करें
//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(); } } }
संपूर्ण परियोजना यहां से डाउनलोड करें
नोट: जब हम पीडीऍफ़ में स्क्रीन शॉट लिंक पर क्लिक करते हैं, तो यह सुरक्षा डायलॉग दिखाता है। हमें पीडीऍफ़ खोलने के लिए इस डायलॉग को अनुमति देनी होगी।
इस प्रकार उत्पन्न ईमेल इस प्रकार दिखाई देगा
सारांश
- TestNG इसमें रिपोर्टिंग की अंतर्निहित क्षमता है।
- परीक्षण मामलों के पूर्ण निष्पादन के बाद, TestNG प्रोजेक्ट के रूट में एक टेस्ट-आउटपुट फ़ोल्डर उत्पन्न करता है।
- टेस्ट-आउटपुट फ़ोल्डर में दो मुख्य रिपोर्ट हैं, index.html, और emailable-report.html.
- अनुकूलित करने के लिए TestNG रिपोर्ट में हमें दो इंटरफेस, ITestListener और IReporter को लागू करने की आवश्यकता है।
- यदि हमें निष्पादन के बीच में कोई रिपोर्ट प्राप्त करने की आवश्यकता है, तो हमें ITestListener की आवश्यकता होगी।
- पूर्ण निष्पादन के बाद अंतिम रिपोर्ट बनाने के लिए, हमें IReporter को कार्यान्वित करने की आवश्यकता है।
- स्क्रीनशॉट लेते हुए, Selenium WebDriver के लिए, हमें TakesScreenShot इंटरफ़ेस में WebDriver टाइप-कास्ट करना होगा।
- पीडीएफ रिपोर्ट तैयार करने के लिए हमें प्रोजेक्ट में IText jar जोड़ना होगा।
डाउनलोड Selenium इस ट्यूटोरियल में डेमो के लिए प्रोजेक्ट फ़ाइलें