Прежде чем мы займемся чем-либо еще, давайте сначала разберемся -
Зачем нужна отчетность?
Когда мы используем 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 в качестве слушателя в класс Test Method.
Пример кода
RealGuru99TimeReport.java - это класс отчетов в реальном времени. Будет реализован интерфейс ITestListener для отчетности
пакет testNGReport.realTimeReport;import org.testng.ITestContext;import org.testng.ITestListener;import 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 ("КОНЕЦ выполнения (ТЕСТ) ->" + arg0.getName ());}@Overridepublic void onTestFailedButWithinSuccessPercentage (ITestResult arg0) {// TODO Заглушка автоматически сгенерированного метода}}
TestGuru99RealReport.java - это тестовый пример для реального отчета
пакет testNGReport.realTimeReport;import org.testng.Assert;import org.testng.annotations.Listeners;import org.testng.annotations.Test;@ Слушатели (RealGuru99TimeReport.class)открытый класс TestGuru99RealReport {@Тестpublic void testRealReportOne () {Assert.assertTrue (истина);}@Тестpublic void testRealReportTwo () {Assert.assertTrue (ложь);}// Тестовый пример зависит от неудачного теста = testRealReportTwo@Test (dependsOnMethods = "testRealReportTwo")public void testRealReportThree () {}}
Результат будет выглядеть так:
Интерфейс IReporter
Если мы хотим настроить окончательный отчет о тестировании, созданный TestNG, нам необходимо реализовать интерфейс IReporter. В этом интерфейсе есть только один метод для реализации generateReport. Этот метод имеет всю информацию о выполнении полного теста в List
Пример кода
Guru99Reporter.java - это файл, используемый для настройки отчета.
пакет 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;открытый класс Guru99Reporter реализует IReporter {@Overridepublic void generateReport (Listarg0, List arg1,String outputDirectory) {// Второй параметр этого метода ISuite будет содержать весь выполненный набор.for (ISuite iSuite: arg1) {// Получить карту результатов одного пакета за разКарта results = iSuite.getResults ();// Получаем ключ результирующей картыУстановите keys = results.keySet ();// Переходим к каждому значению карты по одномуfor (Строковый ключ: ключи) {// Объект Context текущего результатаITestContext context = results.get (ключ) .getTestContext ();// Распечатать сведения о Suite в консолиSystem.out.println ("Название пакета ->" + context.getName ()+ ":: Выходной отчет Ditectory ->" + context.getOutputDirectory ()+ ":: Название набора ->" + context.getSuite (). GetName ()+ ":: Дата начала Время выполнения ->" + context.getStartDate ()+ ":: Дата окончания и время выполнения ->" + context.getEndDate ());// Получить карту только для неудачных тестовых случаевIResultMap resultMap = context.getFailedTests ();// Получить подробную информацию о методе неудачных тестовых случаевКоллекция failedMethods = resultMap.getAllMethods ();// Цикл один за другим во всех неудачных методахSystem.out.println ("-------- СЛУЧАЙ НЕИСПРАВНОСТИ ---------");for (ITestNGMethod iTestNGMethod: failedMethods) {// Распечатать детали неудачных тестовых случаевSystem.out.println ("НАЗВАНИЕ ТЕСТА ->" + iTestNGMethod.getMethodName ()+ "\ nDescription ->" + iTestNGMethod.getDescription ()+ "\ nPriority ->" + iTestNGMethod.getPriority ()+ "\ n: Дата ->" + новая дата (iTestNGMethod.getDate ()));}}}}}
TestGuru99ForReporter.java - это демонстрация пользовательской отчетности.
пакет testNGReport.iReporterReport;import org.testng.Assert;import org.testng.annotations.Listeners;import org.testng.annotations.Test;// Добавляем слушателя для прослушивания отчета и записываем его по окончании тестирования@Listeners (значение = Guru99Reporter.class)public class TestGuru99ForReporter {@Test (приоритет = 0, описание = "testReporterOne")public void testReporterOne () {// Пройдите тестовый примерAssert.assertTrue (истина);}@Test (приоритет = 1, description = "testReporterTwo")public void testReporterTwo () {// Неудачный тестовый примерAssert.assertTrue (ложь);}}
Результат будет примерно таким:
PDF и электронная почта отчетов
Вышеупомянутая реализация отчета довольно проста и понятна, чтобы вы могли начать настройку отчета.
Но в корпоративной среде вам нужно будет создавать настраиваемые отчеты. Вот сценарий, с которым мы будем иметь дело
- Создать собственный отчет в формате PDF
- Делайте скриншоты ТОЛЬКО при ошибках. Ссылка на скриншоты в PDF
- Отправить 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;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 {статический драйвер WebDriver;public static WebDriver getDriver () {if (driver == null) {Драйвер WebDriver;System.setProperty ("webdriver.gecko.driver", "C: \\ geckodriver.exe");драйвер = новый FirefoxDriver ();}вернуть водителя;}/ *** Эта функция сделает снимок экрана* @param webdriver* @param fileWithPath* @throws Exception* /public static void 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;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;// Добавляем слушателя для генерации pdf отчета@ Слушатели (JyperionListener.class)открытый класс TestGuru99PDFReport расширяет BaseClass {Драйвер WebDriver;// Тестовый сценарий завершился неудачно, поэтому создается снимок экрана@Тестpublic void testPDFReportOne () {драйвер = BaseClass.getDriver ();driver.get ("http://google.com");Assert.assertTrue (ложь);}// Тестовый сценарий завершился неудачно, поэтому создается снимок экрана@Тестpublic void testPDFReporTwo () {драйвер = BaseClass.getDriver ();driver.get ("http: /guru99.com");Assert.assertTrue (ложь);}// Тестовый тестовый пример будет пройден, поэтому на нем нет снимка экрана@Тестpublic void testPDFReportThree () {драйвер = BaseClass.getDriver ();driver.get ("http://demo.guru99.com");Assert.assertTrue (истина);}
Шаг 4) Добавьте код в TestGuru99PDFEmail.java для отправки отчета в формате PDF по электронной почте.
- Мы будем использовать аннотацию @AfterSuite для отправки отчета в формате PDF по электронной почте.
- Мы будем отправлять электронную почту через Gmail
- Чтобы включить электронную почту, необходимо импортировать множество файлов библиотеки, таких как mail.jar, pop3.jar, smptp.jar и т. Д.
- Перед тем, как выполнить это, введите от, до адреса электронной почты и пароля.
// По окончании выполнения отправляем отчет в формате pdf по электронной почте@AfterSuitepublic void tearDown () {sendPDFReportByGMail (" Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для его просмотра.", "пароль", "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(); } } }
Загрузите полный проект здесь
Примечание. Когда мы щелкаем ссылку на снимок экрана в формате PDF, отображается диалоговое окно безопасности. Мы должны разрешить этому диалогу открывать pdf.
Созданное таким образом электронное письмо будет выглядеть так
Резюме:
- TestNG имеет встроенную возможность создания отчетов.
- После полного выполнения тестовых случаев TestNG создает папку тестовых выходных данных в корне проекта.
- В папке тестового вывода есть два основных отчета: index.html и emailable-report.html.
- Чтобы настроить отчет TestNG, нам нужно реализовать два интерфейса: ITestListener и IReporter.
- Если нам нужно получить отчет в перерывах между выполнением, нам понадобится ITestListener.
- Для создания итогового отчета после полного выполнения нам необходимо реализовать IReporter.
- Сделав снимок экрана, в Selenium WebDriver нам нужно ввести приведение WebDriver к интерфейсу TakesScreenShot.
- Для создания отчетов в формате pdf нам необходимо добавить в проект файл IText jar.
Загрузите файлы проекта Selenium для демонстрации в этом руководстве