Учебники

31) PDF, электронная почта и скриншот

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

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

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

TestNG Reporting

Библиотека TestNG предоставляет очень удобную функцию отчетности. После выполнения Testng сгенерирует папку test-output в корне проекта. Эта папка содержит два типа отчетов

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

Отчет TestNG: настройка, PDF и электронная почта отчета в Selenium WebDriver

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

Отчет TestNG: настройка, PDF и электронная почта отчета в Selenium WebDriver

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

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

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

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

Отчет TestNG: настройка, PDF и электронная почта отчета в Selenium WebDriver

Интерфейс ITestListener

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

Отчет TestNG: настройка, PDF и электронная почта отчета в Selenium WebDriver

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

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

Отчет TestNG: настройка, PDF и электронная почта отчета в Selenium WebDriver

Пример кода

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

        

    }

}

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

Отчет TestNG: настройка, PDF и электронная почта отчета в Selenium WebDriver

Интерфейс 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);

    }

}

Выход будет как

Отчет TestNG: настройка, PDF и электронная почта отчета в Selenium WebDriver

PDF и электронная почта отчетов

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

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

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

Отчет в формате PDF выглядит следующим образом

Отчет TestNG: настройка, PDF и электронная почта отчета в Selenium WebDriver

Для создания отчета в формате 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

Отчет TestNG: настройка, PDF и электронная почта отчета в Selenium WebDriver

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

Отчет TestNG: настройка, PDF и электронная почта отчета в Selenium WebDriver

Шаг 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("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.

Отчет TestNG: настройка, PDF и электронная почта отчета в Selenium WebDriver

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

Отчет TestNG: настройка, PDF и электронная почта отчета в Selenium WebDriver

Резюме:

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

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