Прежде чем мы рассмотрим что-либо еще, давайте сначала поймем —
Зачем нам нужна отчетность?
Когда мы используем Selenium или любой другой инструмент автоматизации, мы выполняем операции с веб-приложением. Но наша цель автоматизации заключается не только в проверке тестируемого приложения. Мы, как тестировщик автоматизации, должны тестировать приложение, находить ошибки и сообщать об этом команде разработчиков или высшему руководству. Здесь отчетность приобретает значение для процесса тестирования программного обеспечения.
TestNG Reporting
Библиотека TestNG предоставляет очень удобную функцию отчетности. После выполнения Testng сгенерирует папку test-output в корне проекта. Эта папка содержит два типа отчетов
Index.html: это полный отчет о текущем выполнении, который содержит такую информацию, как ошибки, группы, время, журналы репортера, тестовые XML-файлы.
emailable-report.html: это сводный отчет о текущем выполнении теста, который содержит сообщение « Тестовый случай» зеленого (для проходных тестов) и красного (для неудачного теста) выделения.
Как настроить отчет TestNG
Отчеты TestNG довольно удобны, но иногда нам нужно меньше данных в отчетах, или мы хотим отображать отчеты в каком-то другом формате, например, в формате pdf, excel и т. Д., Или хотим изменить макет отчета.
Мы можем настроить протокол 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(){ } }
Результат будет выглядеть как
Интерфейс IReporter
Если мы хотим настроить итоговый отчет о тестировании, сгенерированный TestNG, нам нужно реализовать интерфейс IReporter. Этот интерфейс имеет только один метод для реализации generateReport. Этот метод содержит всю информацию о полном выполнении теста в List <ISuite>, и мы можем сгенерировать отчет, используя его.
Пример кода
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 и электронная почта отчетов
Приведенная выше реализация отчета довольно проста и понятна, чтобы вы могли начать настройку отчетов.
Но в корпоративной среде вам нужно будет создавать настраиваемые отчеты. Вот сценарий, с которым мы будем иметь дело
- Создать пользовательский отчет в формате PDF
- Делайте скриншоты ТОЛЬКО на ошибки. Ссылка на скриншоты в PDF
- Отправить письмо в формате PDF
Отчет в формате PDF выглядит следующим образом
Для создания отчета в формате PDF нам нужен IText для Java API . Загрузите это здесь . Есть еще один пользовательский класс слушателей, который на самом деле реализует этот IText jar и создает для нас отчет в формате pdf. Загрузите это здесь
На рисунке выше показан формат отчета PDF, созданный по умолчанию. Вы можете настроить его
Вот как мы подойдем к этому
Шаг 1) Создайте базовый класс
Шаг 2) Настройте JypersionListerner.Java (код создания PDF)
Шаг 3) Создайте TestGuru99PDFEmail.java, который будет выполнять тестовые случаи, создайте PDF
Шаг 4) Добавьте код в TestGuru99PDFEmail.java для отправки отчета в формате PDF по электронной почте.
Давайте посмотрим на эти шаги
Шаг 1) Создайте базовый класс
Этот базовый класс имеет функции для создания WebDriver и создания снимка экрана
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
Добавьте код, чтобы прикрепить скриншот к отчету в формате PDF
Шаг 3) Создайте TestGuru99PDFEmail.java, который будет выполнять тестовые случаи, создайте PDF
- Здесь мы добавим 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 для отправки отчета в формате PDF по электронной почте.
- Мы будем использовать аннотацию @AfterSuite для отправки электронного письма с отчетом в формате PDF.
- Мы будем отправлять электронную почту с помощью Gmail
- Чтобы включить электронную почту, необходимо импортировать много библиотечных файлов, таких как mail.jar, pop3.jar, smptp.jar и т. Д.
- Прежде чем выполнить это, введите с, на адрес электронной почты и пароль
//After complete execution send pdf report by email @AfterSuite public void tearDown(){ sendPDFReportByGMail("[email protected]", "password", "[email protected]", "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 создает папку test-output в корневом каталоге проекта.
- В папке test-output есть два основных отчета: index.html и emailable-report.html.
- Чтобы настроить отчет TestNG, нам нужно реализовать два интерфейса: ITestListener и IReporter.
- Если нам нужно получить отчет между выполнением, нам нужен ITestListener.
- Для создания окончательного отчета после полного выполнения нам нужно реализовать IReporter.
- Делая скриншот, в Selenium WebDriver нам нужно набрать приведение WebDriver к интерфейсу TakesScreenShot.
- Для создания отчетов в формате PDF нам нужно добавить IText jar в проект.
Загрузите файлы проекта Selenium для демонстрации в этом уроке