Налаштування, PDF & Надіслати звіти електронною поштою TestNG у Selenium WebDriver

Зміст:

Anonim

Перш ніж розглядати щось інше, давайте спочатку зрозуміємо -

Навіщо нам потрібна звітність?

Коли ми використовуємо Selenium або будь-який інший інструмент автоматизації, ми виконуємо операції над веб-додатком. Але наша мета автоматизації полягає не лише у проведенні тестованої програми. Ми, як тестер автоматизації, повинні протестувати додаток, знайти помилки та повідомити про це розробницьку команду або вище керівництво. Тут звітність набуває значення для процесу тестування програмного забезпечення

Звітність про TestNG

Бібліотека TestNG надає дуже зручну функцію звітування. Після виконання Testng згенерує папку для тестування в корені проекту. Ця папка містить два типи звітів -

Index.html: Це повний звіт про поточне виконання, який містить таку інформацію, як помилка, групи, час, журнали звітів, XML-файли testng.

emailable-report.html: Це узагальнюючий звіт поточного виконання тесту, який містить повідомлення "Тестовий випадок" зеленим (для проходження тестів) та червоним (для невдалих тестів).

Як налаштувати звіт 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 {@Overridepublic void onStart (ITestContext arg0) {System.out.println ("Початок виконання (ТЕСТ) ->" + arg0.getName ());}@Overridepublic void onTestStart (ITestResult arg0) {System.out.println ("Тест розпочато ->" + arg0.getName ());}@Overridepublic void onTestSuccess (ITestResult arg0) {System.out.println ("Тестовий пропуск ->" + arg0.getName ());}@Overridepublic void onTestFailure (ITestResult arg0) {System.out.println ("Помилка тесту ->" + arg0.getName ());}@Overridepublic void onTestSkipped (ITestResult arg0) {System.out.println ("Тест пропущений ->" + arg0.getName ());}@Overridepublic void onFinish (ITestContext arg0) {System.out.println ("END OF Execution (TEST) ->" + arg0.getName ());}@Overridepublic void onTestFailedButWithinSuccessPercentage (ITestResult arg0) {// Автоматично згенерований заглушок TODO}}

TestGuru99RealReport.java - це тест реального звіту

пакет testNGReport.realTimeReport;імпорт org.testng.Assert;імпорт org.testng.annotations.Listeners;імпорт org.testng.annotations.Test;@Listeners (RealGuru99TimeReport.class)публічний клас TestGuru99RealReport {@ Тестpublic void testRealReportOne () {Assert.assertTrue (true);}@ Тестpublic void testRealReportTwo () {Assert.assertTrue (false);}// Тестовий випадок залежить від невдалого тесту = 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;імпорт org.testng.ITestNGMethod;імпорт org.testng.xml.XmlSuite;публічний клас Guru99Reporter реалізує IReporter {@Overridepublic void generatedReport (List  arg0, List  arg1,Рядок outputDirectory) {// Другий параметр цього методу ISuite буде містити весь виконаний набір.для (ISuite iSuite: arg1) {// Отримати карту результатів окремого набору за разКарта  результати = iSuite.getResults ();// Отримаємо ключ карти результатівВстановити  keys = results.keySet ();// Переходьте до кожного значення карти по одномуfor (Клавіша рядка: клавіші) {// Контекстний об'єкт поточного результатуКонтекст ITestContext = results.get (ключ) .getTestContext ();// Детальна інформація про Suite в ConsoleSystem.out.println ("Назва набору ->" + 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 ("ІМЯ ТЕСТА - -" + iTestNGMethod.getMethodName ()+ "\ nОпис ->" + iTestNGMethod.getDescription ()+ "\ nПріоритет ->" + iTestNGMethod.getPriority ()+ "\ n: Дата ->" + нова дата (iTestNGMethod.getDate ()));}}}}}

TestGuru99ForReporter.java - це демонстрація спеціальних звітів

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

Вихід буде як-

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 та зробити знімок екрана

пакет PDFEmail;імпорт java.io.File;імпорт org.apache.commons.io.FileUtils;імпорт org.openqa.selenium.OutputType;імпорт org.openqa.selenium.TakesScreenshot;імпорт org.openqa.selenium.WebDriver;імпорт org.openqa.selenium.firefox.FirefoxDriver;публічний клас BaseClass {статичний драйвер WebDriver;загальнодоступний статичний WebDriver getDriver () {if (драйвер == null) {Драйвер WebDriver;System.setProperty ("webdriver.gecko.driver", "C: \\ geckodriver.exe");драйвер = новий FirefoxDriver ();}зворотний драйвер;}/ *** Ця функція зробить знімок екрана* @param веб-драйвер* @param fileWithPath* @throws Виняток* /public static void takeSnapShot (WebDriver webdriver, String fileWithPath) видає виняток {// Перетворимо об'єкт веб-драйвера на TakeScreenshotTakesScreenshot scrShot = ((TakesScreenshot) веб-драйвер);// Виклик методу 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;імпорт 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;// Тестовий кейс не вдався, тому знімок екрана генерується@ Тестpublic void testPDFReportOne () {драйвер = BaseClass.getDriver ();driver.get ("http://google.com");Assert.assertTrue (false);}// Тестовий кейс не вдався, тому знімок екрана генерується@ Тестpublic void testPDFReporTwo () {драйвер = BaseClass.getDriver ();driver.get ("http: /guru99.com");Assert.assertTrue (false);}// Тестовий тест буде пройдено, тому на ньому не буде знімка екрана@ Тестpublic void testPDFReportThree () {драйвер = BaseClass.getDriver ();driver.get ("http://demo.guru99.com");Assert.assertTrue (true);}

Крок 4) Додайте код до TestGuru99PDFEmail.java, щоб надіслати звіт PDF електронною поштою

  • Ми використаємо анотацію @AfterSuite для надсилання електронного листа звіту PDF
  • Ми надішлемо електронний лист за допомогою Gmail
  • Щоб увімкнути електронну пошту, потрібно імпортувати багато бібліотечних файлів, таких як mail.jar, pop3.jar, smptp.jar тощо
  • Перш ніж виконати це, введіть від, на адресу електронної пошти та пароль
 // Після повного виконання надішліть звіт у форматі PDF електронною поштою@AfterSuitepublic void tearDown () {sendPDFReportByGMail (" Ця електронна адреса захищена від спам-ботів. Для її перегляду потрібно ввімкнути JavaScript.", "пароль", "Ця електронна адреса захищена від спам-ботів. Вам потрібно увімкнути JavaScript, щоб переглянути його. "," Звіт PDF "," ");} / ** * Надіслати електронний лист за допомогою java * @param від * @param pass * @param до * @param subject * @param body * / приватна статична порожнеча sendPDFReportByGMail (рядок від, рядок передається, рядок до, тема рядка, тіло рядка) {Властивості props = System.getProperties (); рядок 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.getDefaultInstance (реквізит); MimeMessage повідомлення = новий MimeMessage (сеанс);спробуйте {// Встановити з адреси message.setFrom (new InternetAddress (from)); message.addRecipient (Message.RecipientType.TO, новий InternetAddress (до)); // Встановити тему повідомлення. SetSubject (тема); message.setText (тіло); BodyPart objMessageBodyPart = новий MimeBodyPart (); objMessageBodyPart.setText ("Будь ласка, знайдіть вкладений файл звіту!"); Багаточастковий багаточастинний = новий MimeMultipart (); multipart.addBodyPart (objMessageBodyPart); objMessageBodyPart = новий MimeBodyPart (); // Встановити шлях до файлу звіту pdf Рядок filename = System.getProperty ("user.dir") + "\\ test.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 для демонстрації у цьому посібнику