Персонализиране, PDF & Изпратете имейл TestNG отчети в Selenium WebDriver

Съдържание:

Anonim

Преди да разгледаме нещо друго, нека първо разберем -

Защо се нуждаем от докладване?

Когато използваме Selenium или друг инструмент за автоматизация, ние извършваме операции в уеб приложението. Но нашата цел на автоматизацията не е просто да упражняваме тестваното приложение. Ние, като тестер за автоматизация, трябва да тестваме приложението, да намерим грешки и да докладваме на екипа за разработка или на висшето ръководство. Тук отчитането придобива значение за процеса на тестване на софтуера

Отчитане на TestNG

Библиотеката TestNG предоставя много удобна функция за отчитане. След изпълнението Testng ще генерира папка за тест-изход в основата на проекта. Тази папка съдържа два вида отчети -

Index.html: Това е пълният отчет за текущото изпълнение, който съдържа информация като грешка, групи, време, журнали на репортери, XML файлове testng.

emailable-report.html: Това е обобщаващият отчет на текущото изпълнение на теста, който съдържа съобщение Test Case в зелено (за успешно преминати тестови случаи) и червено (за неуспешни тестови случаи).

Как да персонализирате отчета TestNG

Отчитането на TestNG е доста удобно, но все пак понякога се нуждаем от малко по-малко данни в отчетите или искаме да покажем отчети в друг формат като pdf, excel и т.н. или искаме да променим оформлението на отчета.

Може да има два начина да персонализираме отчета TestNG

  • Използване на интерфейс ITestListener:
  • Използване на IReporter интерфейс:

Интерфейс на ITestListener

Използваме този интерфейс, когато трябва да персонализираме отчета в реално време. С други думи, ако изпълняваме куп тестови случаи в пакет TetNG и искаме да получим отчета за всеки тестов случай, тогава след всеки тестов случай трябва да внедрим интерфейс ITestListener. Този интерфейс ще замени метода onTestFailure, onTestStart, onTestSkipped, за да изпрати правилното състояние на текущия тест.

Ето стъпките, които ще следваме

  • Създайте клас, който казва RealGuru99Report и внедрете iTestListener в него.
  • Внедряване на методи на iTestListener
  • Създайте метод за тестване и добавете клас RealGuru99Report като слушател в клас метод за тест.

Пример за код

RealGuru99TimeReport.java е класът за отчитане в реално време. Той ще внедри интерфейс ITestListener за отчитане

пакет testNGReport.realTimeReport;внос org.testng.ITestContext;внос org.testng.ITestListener;внос org.testng.ITestResult;публичен клас RealGuru99TimeReport реализира ITestListener {@Overrideпублична невалидна onStart (ITestContext arg0) {System.out.println ("Начало на изпълнение (TEST) ->" + arg0.getName ());}@Overrideпублична празнина onTestStart (ITestResult arg0) {System.out.println ("Тестът започна ->" + arg0.getName ());}@Overrideпублична невалидна onTestSuccess (ITestResult arg0) {System.out.println ("Тестова карта ->" + arg0.getName ());}@Overrideпублична празнина onTestFailure (ITestResult arg0) {System.out.println ("Тестът е неуспешен ->" + arg0.getName ());}@Overrideпублична празнина onTestSkipped (ITestResult arg0) {System.out.println ("Тестът е пропуснат ->" + arg0.getName ());}@Overrideпублична празнина onFinish (ITestContext arg0) {System.out.println ("END OF Execution (TEST) ->" + arg0.getName ());}@Overrideпублична невалидност наTestFailedButWithinSuccessPercentage (ITestResult arg0) {// TODO Автоматично генериран мъниче от метод}}

TestGuru99RealReport.java е тестовият случай за реален отчет

пакет testNGReport.realTimeReport;import org.testng.Assert;внос org.testng.annotations.Listeners;внос org.testng.annotations.Test;@Listeners (RealGuru99TimeReport.class)публичен клас TestGuru99RealReport {@Тестpublic void testRealReportOne () {Assert.assertTrue (вярно);}@Тестpublic void testRealReportTwo () {Assert.assertTrue (невярно);}// Тестовият случай зависи от неуспешен тест = testRealReportTwo@Test (dependOnMethods = "testRealReportTwo")public void testRealReportThree () {}}

Резултатът ще изглежда като-

IReporter интерфейс

Ако искаме да персонализираме окончателния доклад за теста, генериран от TestNG, трябва да внедрим интерфейс IReporter. Този интерфейс има само един метод за реализиране на createReport. Този метод има цялата информация за цялостно изпълнение на теста в Списък и ние можем да генерираме отчета, като го използваме.

Пример за код

Guru99Reporter.java е файлът, използван за персонализиране на отчета

пакет testNGReport.iReporterReport;импортиране на java.util.Collection;импортиране на java.util.Date;импортиране на java.util.List;импортиране на java.util.Map;импортиране на java.util.Set;внос org.testng.IReporter;импортиране на org.testng.IResultMap;внос org.testng.ISuite;импортиране на org.testng.ISuiteResult;внос org.testng.ITestContext;import org.testng.ITestNGMethod;импортиране на org.testng.xml.XmlSuite;публичната класа Guru99Reporter прилага IReporter {@Overrideпублична невалидна createReport (Списък  arg0, Списък  arg1,String outputDirectory) {// Вторият параметър на този метод ISuite ще съдържа целия изпълнен пакет.за (ISuite iSuite: arg1) {// Вземете карта на резултата на отделен апартамент наведнъжMap  резултати = iSuite.getResults ();// Вземете ключа на картата с резултатитеЗадайте  бутони = results.keySet ();// Отидете до всяка стойност на картата една по едназа (клавиш String: ключове) {// Контекстният обект на текущия резултатITestContext context = results.get (ключ) .getTestContext ();// Детайли за Print Suite в конзолатаSystem.out.println ("Име на Suite ->" + context.getName ()+ ":: Доклад на изхода на отчета ->" + context.getOutputDirectory ()+ ":: Име на апартамента ->" + context.getSuite (). GetName ()+ ":: Начална дата Час за изпълнение ->" + context.getStartDate ()+ ":: Крайна дата Час за изпълнение ->" + context.getEndDate ());// Вземете карта само за неуспешни тестови случаиIResultMap resultMap = context.getFailedTests ();// Вземете подробности за метода на неуспешни тестови случаиКолекция  failedMethods = resultMap.getAllMethods ();// Цикъл един по един във всички неуспешни методиSystem.out.println ("-------- СЛУЧАЙ ЗА НЕУСТАВЕН ТЕСТ ---------");за (ITestNGMethod iTestNGMethod: failedMethods) {// Печат на неуспешни подробности за тестови случаиSystem.out.println ("TESTCASE NAME ->" + iTestNGMethod.getMethodName ()+ "\ nОписание ->" + iTestNGMethod.getDescription ()+ "\ nПриоритет ->" + iTestNGMethod.getPriority ()+ "\ n: Дата ->" + нова дата (iTestNGMethod.getDate ()));}}}}}

TestGuru99ForReporter.java е демонстрация за персонализирано отчитане

пакет testNGReport.iReporterReport;import org.testng.Assert;внос org.testng.annotations.Listeners;внос org.testng.annotations.Test;// Добавете слушател, за да слушате доклад и го напишете, когато testcas приключи@Listeners (стойност = Guru99Reporter.class)публичен клас TestGuru99ForReporter {@Test (приоритет = 0, описание = "testReporterOne")public void testReporterOne () {// Издържа тестAssert.assertTrue (вярно);}@Test (приоритет = 1, описание = "testReporterTwo")public void testReporterTwo () {// Неуспешен тестAssert.assertTrue (невярно);}}

Изходът ще бъде като-

PDF и имейл на отчети

Горното изпълнение на отчета е доста просто и ясно, за да започнете с персонализирането на отчета.

Но в корпоративна среда ще трябва да създадете силно персонализирани отчети. Ето сценария, с който ще се справим

  1. Създайте персонализиран отчет в PDF форма
  2. Правете екранни снимки САМО за грешки. Връзка към екранни снимки в PDF
  3. Изпратете имейл на PDF файла

Отчетът за PDF изглежда така

За да създадем pdf отчет, се нуждаем от Java API IText . Изтеглете го тук. Има още един потребителски клас слушател, който всъщност изпълнява този IText буркан и създава pdf отчет за нас. Изтеглете го тук

Горната фигура показва формата по подразбиране на генерирания PDF отчет. Можете да го персонализирате

Ето как ще подходим към това

Стъпка 1) Създайте основен клас

Стъпка 2) Персонализирайте JypersionListerner.Java (PDF код за създаване)

Стъпка 3) Създайте TestGuru99PDFEmail.java, който ще изпълнява тестови случаи, създайте PDF

Стъпка 4) Добавете код към TestGuru99PDFEmail.java, за да изпратите PDF отчет по имейл

Нека да разгледаме тези стъпки

Стъпка 1) Създаване на основен клас

Този основен клас има функции за създаване на WebDriver и Take Screenshot

пакет PDFEmail;import java.io.File;импортирайте org.apache.commons.io.FileUtils;import org.openqa.selenium.OutputType;импортиране на org.openqa.selenium.TakesScreenshot;импортиране на org.openqa.selenium.WebDriver;импортиране на org.openqa.selenium.firefox.FirefoxDriver;публичен клас BaseClass {статичен драйвер на WebDriver;публичен статичен WebDriver getDriver () {ако (драйвер == нула) {Драйвер за WebDriver;System.setProperty ("webdriver.gecko.driver", "C: \\ geckodriver.exe");драйвер = нов FirefoxDriver ();}драйвер за връщане;}/ *** Тази функция ще направи екранна снимка* @param webdriver* @param fileWithPath* @throws Изключение* /публична статична празнота takeSnapShot (WebDriver webdriver, String fileWithPath) хвърля изключение {// Конвертиране на обект на уеб драйвер в TakeScreenshotTakesScreenshot scrShot = ((TakesScreenshot) webdriver);// Извикайте метода getScreenshotAs, за да създадете файл с изображениеФайл SrcFile = scrShot.getScreenshotAs (OutputType.FILE);// Преместване на файл с изображение на ново местоназначениеФайл DestFile = нов файл (fileWithPath);// Копиране на файл в местоназначениетоFileUtils.copyFile (SrcFile, DestFile);}}

Стъпка 2) Персонализирайте JypersionListener.java

Ще се придържаме към формата на отчета по подразбиране. Но ние ще направим 2 персонализации

  • Добавяне на код, който да инструктира JypersionListener да направи екранна снимка на Грешка
  • Прикачване на връзката на екранна снимка в PDF отчета

Добавете код, за да прикачите екранната снимка към PDF отчета

Стъпка 3) Създайте TestGuru99PDFEmail.java, който ще изпълнява тестови случаи, създайте PDF

  • Тук ще добавим JyperionListener.class като слушател
  • Ще изпълним 3 тестови случая.
  • Използвайки Assert.assertTrue, ще провалим 2 тестови случая, докато преминем само един.
  • Екранна снимка ще бъде направена за неуспешните тестови случаи само според нашите персонализации
пакет PDFEmail;импортиране на java.util.Properties;импортиране на javax.activation.DataHandler;импортиране на javax.activation.DataSource;импортиране на javax.activation.FileDataSource;импортиране на javax.mail.BodyPart;импортиране на javax.mail.Message;импортиране на javax.mail.MessagingException;импортиране на javax.mail.Multipart;импортиране на javax.mail.Session;импортиране на javax.mail.Transport;импортиране на javax.mail.internet.AddressException;импортиране на javax.mail.internet.InternetAddress;импортиране на javax.mail.internet.MimeBodyPart;импортиране на javax.mail.internet.MimeMessage;импортиране на javax.mail.internet.MimeMultipart;импортиране на org.openqa.selenium.WebDriver;import org.testng.Assert;внос org.testng.annotations.AfterSuite;внос org.testng.annotations.Listeners;внос org.testng.annotations.Test;import reporter.JyperionListener;// Добавяне на слушател за генериране на pdf отчет@Listeners (JyperionListener.class)публичен клас TestGuru99PDFReport разширява BaseClass {Драйвер за WebDriver;// Тестът не е успешен, така че генерирането на снимка на екрана@Тестпубличен празен тестPDFReportOne () {драйвер = BaseClass.getDriver ();driver.get ("http://google.com");Assert.assertTrue (невярно);}// Тестът не е успешен, така че генерирането на снимка на екрана@Тестпубличен празен тестPDFReporTwo () {драйвер = BaseClass.getDriver ();driver.get ("http: /guru99.com");Assert.assertTrue (невярно);}// Тестовият тестов случай ще бъде преминат, така че няма скрийншот върху него@Тестпубличен празен тестPDFReportThree () {драйвер = BaseClass.getDriver ();driver.get ("http://demo.guru99.com");Assert.assertTrue (вярно);}

Стъпка 4) Добавете код към TestGuru99PDFEmail.java, за да изпратите PDF отчет по имейл

  • Ще използваме пояснението @AfterSuite, за да изпратим имейл на PDF отчета
  • Ще изпращаме имейли чрез Gmail
  • За да активирате Email, трябва да импортирате много библиотечни файлове като mail.jar, pop3.jar, smptp.jar и т.н.
  • Преди да изпълните това, въведете от, до имейл адрес и парола
 // След пълно изпълнение изпратете pdf доклад по имейл@AfterSuitepublic void tearDown () {sendPDFReportByGMail (" Този имейл адрес е защитен от спам ботове. Трябва да имате активиран JavaScript, за да го видите.", "парола", "Този имейл адрес е защитен от спам ботове. Трябва да имате активиран JavaScript, за да го видите. "," PDF Report "," ");} / ** * Изпратете имейл с помощта на java * @param от * @param pass * @param до * @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 ", хост); props.put (" mail.smtp.user ", от); props.put (" mail.smtp.password ", pass); props.put (" mail.smtp.port "," 587 "); props.put (" mail.smtp.auth "," true "); Session session = Session.getDefaultInstance (props); MimeMessage съобщение = ново MimeMessage (сесия);опитайте {// Задайте от адрес message.setFrom (нов InternetAddress (от)); message.addRecipient (Message.RecipientType.TO, нов InternetAddress (към)); // Задаване на тема съобщение.setSubject (тема); message.setText (тяло); BodyPart objMessageBodyPart = нов MimeBodyPart (); objMessageBodyPart.setText ("Моля, намерете прикачения файл с отчет!"); Multipart multipart = нов MimeMultipart (); multipart.addBodyPart (objMessageBodyPart); objMessageBodyPart = нов MimeBodyPart (); // Задаване на път към pdf файла на отчета String filename = System.getProperty ("user.dir") + "\\ Тест по подразбиране.pdf"; // Създаване на източник на данни, за да прикачите файла в пощата DataSource source = new FileDataSource (име на файл); objMessageBodyPart.setDataHandler (нов DataHandler (източник)); objMessageBodyPart.setFileName (име на файл); multipart.addBodyPart (objMessageBodyPart); съобщение.setContent (многочаст); Транспорт транспорт = session.getTransport ("smtp"); transport.connect (хост, от, преминаване); transport.sendMessage (message, message.getAllRecipients ()); transport.close (); } catch (AddressException ae) {ae.printStackTrace (); } catch (MessagingException me) {me.printStackTrace (); }}}

Изтеглете пълния проект от тук

Забележка: Когато щракнем върху връзката за скрийншот в pdf, тя показва диалогов прозорец за сигурност. Трябва да позволим на този диалогов прозорец да отвори pdf.

Така генерираният имейл ще изглежда така

Резюме:

  • TestNG има вградена способност за отчитане.
  • След пълно изпълнение на тестови случаи TestNG генерира папка за тестване и изход в корена на проекта.
  • В папката test-output има два основни отчета, index.html и emailable-report.html.
  • За да персонализираме отчета TestNG, трябва да внедрим два интерфейса, ITestListener и IReporter.
  • Ако трябва да получим отчет между изпълнението, имаме нужда от ITestListener.
  • За да създадем окончателен отчет след пълно изпълнение, трябва да внедрим IReporter.
  • Правейки екранната снимка, в Selenium WebDriver, трябва да напишем гласовете WebDriver в интерфейса TakesScreenShot.
  • За да генерираме pdf отчети, трябва да добавим IText jar в проекта.

Изтеглете файловете за проект на Selenium за демонстрацията в този урок