Настроить, PDF и отправить по электронной почте TestNG Отчеты в Selenium Вебдрайвер

Прежде чем мы рассмотрим что-либо еще, давайте сначала поймем –

Зачем нам нужна отчетность?

Когда мы используем Selenium или любой другой инструмент автоматизации, мы выполняем операции в веб-приложении. Но наша цель автоматизации — не просто протестировать тестируемое приложение. Мы, как тестировщик автоматизации, должны тестировать приложение, находить ошибки и сообщать об этом команде разработчиков или вышестоящему руководству. Здесь отчетность приобретает важное значение для программного обеспечения. Тестирование процесс

TestNG Отчетность

TestNG библиотека предоставляет очень удобную функцию создания отчетов. После исполнения, TestNG создаст папку тестовых результатов в корне проекта. Эта папка содержит два типа отчетов:

Индекс.html: Это полный отчет о текущем выполнении, который содержит такую ​​информацию, как ошибки, группы, время, журналы отчетов, XML-файлы тестирования.

TestNG Отчетность

электронная почта-report.html: Это сводный отчет о текущем выполнении теста, который содержит Тестовый кейс сообщение, выделенное зеленым цветом (для пройденных тестовых случаев) и красным (для неудавшихся тестовых случаев).

TestNG Отчетность

Как настроить TestNG Отчет

TestNG отчетность очень удобна, но, тем не менее, иногда нам нужно меньше данных в отчетах или мы хотим отображать отчеты в каком-либо другом формате, например pdf, excel и т. д., или хотим изменить макет отчета.

Мы можем настроить два способа TestNG докладе

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

Настроить TestNG Отчет

Интерфейс ITestListener

Мы используем этот интерфейс, когда нам нужно настроить отчет в реальном времени. Другими словами, если мы выполняем набор тестовых примеров в наборе TetNG и хотим получить отчет о каждом тестовом примере, то после каждого тестового примера нам нужно реализовать интерфейс ITestListener. Этот интерфейс переопределит методы onTestFailure, onTestStart, onTestSkipped, чтобы отправить правильный статус текущего тестового примера.

Интерфейс ITestListener

Вот шаги, которые мы будем выполнять

  • Создайте класс, например RealGuru99Report, и реализуйте в нем iTestListener.
  • Реализация методов iTestListener
  • Создайте тестовый метод и добавьте класс RealGuru99Report в качестве прослушивателя в класс тестового метода.

Интерфейс ITestListener

Пример кода

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(){

        

    }

}

Результат будет выглядеть так:

Интерфейс ITestListener

Интерфейс IReporter

Если мы хотим настроить окончательный отчет об испытаниях, созданный TestNGнам нужно реализовать интерфейс IReporter. Этот интерфейс имеет только один метод реализацииgenerReport. Этот метод содержит всю информацию о полном выполнении теста в списке. , и мы можем с его помощью создать отчет.

Пример кода

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);

    }

}

Вывод будет такой:

Интерфейс IReporter

Отчеты в формате PDF и по электронной почте

Приведенная выше реализация отчета довольно проста и понятна, чтобы вы могли начать настройку отчета.

Но в корпоративной среде вам потребуется создавать индивидуально настраиваемые отчеты. Вот сценарий, с которым мы будем иметь дело

  1. Создать пользовательский отчет в формате PDF
  2. Делайте скриншоты ТОЛЬКО при ошибках. Ссылка на скриншоты в PDF
  3. Отправить PDF-файл по электронной почте

Отчет в формате PDF выглядит так

Отчеты в формате PDF и по электронной почте

Для создания отчета в формате PDF нам понадобится Java API Iтекст. Загрузить здесь . Существует еще один пользовательский класс прослушивателя, который фактически реализует этот jar-файл IText и создает для нас отчет в формате 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 и по электронной почте

Добавьте код, чтобы прикрепить снимок экрана к отчету в формате PDF.

Отчеты в формате PDF и по электронной почте

Шаг 3) Создайте TestGuru99PDFEmail.java, который будет выполнять тестовые примеры, создайте PDF-файл.

  • Здесь мы добавим JyperionListener.class в качестве прослушивателя.
  • Мы выполним 3 тестовых случая.
  • Используя Assert.assertTrue, мы провалим два тестовых случая, пройдя только один.
  • Снимок экрана будет сделан для неудачных тестовых случаев только в соответствии с нашими настройками.
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("https://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("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();

}

}

}

Скачать полный проект здесь

Примечание. Когда мы нажимаем ссылку на снимок экрана в формате PDF, открывается диалоговое окно безопасности. Мы должны разрешить этому диалоговому окну открывать PDF-файл.

Отчеты в формате PDF и по электронной почте

Сгенерированное таким образом электронное письмо будет выглядеть так

Отчеты в формате PDF и по электронной почте

Резюме

  • TestNG имеет встроенную возможность создания отчетов.
  • После полного выполнения тестовых случаев TestNG создает папку тестовых результатов в корне проекта.
  • В папке test-output находятся два основных отчета: index.html и emailable-report.html.
  • Настроить TestNG report нам нужно реализовать два интерфейса: ITestListener и IReporter.
  • Если нам нужно получить отчет между выполнением, нам понадобится ITestListener.
  • Для создания итогового отчета после полного выполнения нам необходимо реализовать IReporter.
  • Делаем скриншот, в Selenium WebDriver, нам нужно ввести приведение WebDriver к интерфейсу TakesScreenShot.
  • Для создания отчетов в формате PDF нам нужно добавить jar IText в проект.

Скачать Selenium Файлы проекта для демонстрации в этом руководстве