Kustomisasi, PDF & Email TestNG Laporan dalam Selenium webdriver

Sebelum kita membahas hal lain, mari kita pahami dulu –

Mengapa kita perlu pelaporan?

Saat kita menggunakan Selenium atau alat otomatisasi lainnya, kami melakukan operasi pada aplikasi web. Namun tujuan otomatisasi kami bukan hanya untuk menjalankan Aplikasi yang Diuji. Kami, sebagai penguji otomatisasi seharusnya menguji aplikasi, menemukan bug, dan melaporkannya ke tim pengembangan atau manajemen yang lebih tinggi. Di sini pelaporan menjadi penting bagi perangkat lunak pengujian proses

TestNG Pelaporan

TestNG perpustakaan menyediakan fitur pelaporan yang sangat berguna. Setelah eksekusi, Pengujian akan menghasilkan folder hasil pengujian di root proyek. Folder ini berisi dua jenis Laporan-

Indeks.html: Ini adalah laporan lengkap eksekusi saat ini yang berisi informasi seperti kesalahan, grup, waktu, log reporter, file XML pengujian.

TestNG Pelaporan

emailable-report.html: Ini adalah laporan ringkasan pelaksanaan pengujian saat ini yang berisi Uji Kasus pesan berwarna hijau (untuk kasus uji yang lulus) dan sorotan merah (untuk kasus uji yang gagal).

TestNG Pelaporan

Bagaimana cara menyesuaikan TestNG Laporan

TestNG pelaporan cukup berguna namun tetap saja, terkadang kita membutuhkan lebih sedikit data dalam laporan atau ingin menampilkan laporan dalam format lain seperti pdf, excel, dll. atau ingin mengubah tata letak laporan.

Ada dua cara untuk menyesuaikannya TestNG melaporkan

  • Menggunakan Antarmuka ITestListener:
  • Menggunakan Antarmuka iReporter:

Menyesuaikan TestNG Laporan

Antarmuka ITestListener

Kami menggunakan antarmuka ini ketika kami perlu menyesuaikan laporan waktu nyata. Dengan kata lain, jika kita mengeksekusi sekumpulan kasus pengujian dalam rangkaian TetNG dan ingin mendapatkan laporan dari setiap kasus pengujian, maka setelah setiap kasus pengujian kita perlu mengimplementasikan antarmuka ITestListener. Antarmuka ini akan menggantikan metode onTestFailure, onTestStart, onTestSkipped untuk mengirimkan status yang benar dari kasus pengujian saat ini.

Antarmuka ITestListener

Berikut langkah-langkah yang akan kami ikuti

  • Buat kelas katakan RealGuru99Report dan implementasikan iTestListener di dalamnya.
  • Menerapkan metode iTestListener
  • Buat metode pengujian dan tambahkan kelas RealGuru99Report sebagai pendengar di kelas Metode Tes.

Antarmuka ITestListener

Contoh Kode

RealGuru99TimeReport.java adalah kelas pelaporan waktu nyata. Ini akan mengimplementasikan antarmuka ITestListener untuk pelaporan

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 adalah uji kasus untuk laporan nyata

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

        

    }

}

Outputnya akan terlihat seperti-

Antarmuka ITestListener

Antarmuka Reporter

Jika kita ingin menyesuaikan laporan pengujian akhir yang dihasilkan oleh TestNG, kita perlu mengimplementasikan antarmuka IReporter. Antarmuka ini hanya memiliki satu metode untuk mengimplementasikan generateReport. Metode ini memiliki semua informasi pelaksanaan pengujian lengkap dalam Daftar , dan kami dapat membuat laporan dengan menggunakannya.

Contoh Kode

Guru99Reporter.java adalah file yang digunakan untuk menyesuaikan laporan

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 adalah demo untuk pelaporan Kustom

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

    }

}

Outputnya akan seperti-

Antarmuka Reporter

Laporan dalam bentuk PDF dan Email

Penerapan laporan di atas cukup sederhana dan jelas untuk membantu Anda memulai penyesuaian laporan.

Namun di lingkungan perusahaan, Anda perlu membuat laporan yang sangat disesuaikan. Inilah skenario yang akan kita hadapi

  1. Buat Laporan Kustom dalam bentuk PDF
  2. Ambil Tangkapan Layar HANYA pada Kesalahan. Tautan ke tangkapan layar dalam PDF
  3. Kirim Email PDF

Laporan PDF terlihat seperti ini

Laporan dalam bentuk PDF dan Email

Untuk membuat laporan pdf kita membutuhkan a Java API Iteks. Unduh itu di sini . Ada kelas pendengar khusus lain yang sebenarnya mengimplementasikan toples IText ini dan membuat laporan pdf untuk kita. Unduh itu di sini

Gambar di atas menunjukkan format default laporan PDF yang dihasilkan. Anda dapat menyesuaikannya

Inilah cara kami melakukan pendekatan terhadap hal ini

Langkah 1) Buat Kelas Dasar

Langkah 2) Sesuaikan JypersionListerner.Java (Kode pembuatan PDF)

Langkah 3) Buat TestGuru99PDFEmail.java yang akan menjalankan kasus uji, buat PDF

Langkah 4) Tambahkan kode ke TestGuru99PDFEmail.java untuk mengirim laporan PDF melalui email

Mari kita lihat langkah-langkah ini

Langkah 1) Buat Kelas Dasar

Kelas dasar ini memiliki fungsi untuk membuat WebDriver dan Mengambil Screenshot

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

            

    }

}

Langkah 2) Sesuaikan JypersionListener.java

Kami akan tetap menggunakan format laporan default. Tapi kami akan membuat 2 penyesuaian

  • Menambahkan kode untuk menginstruksikan JypersionListener mengambil tangkapan layar pada Kesalahan
  • Melampirkan tautan pengambilan tangkapan layar dalam laporan PDF

Laporan dalam bentuk PDF dan Email

Tambahkan kode untuk melampirkan tangkapan layar ke laporan PDF

Laporan dalam bentuk PDF dan Email

Langkah 3) Buat TestGuru99PDFEmail.java yang akan menjalankan kasus uji, buat PDF

  • Di sini kita akan menambahkan JyperionListener.class sebagai pendengar
  • Kami akan menjalankan 3 kasus uji.
  • Dengan menggunakan Assert.assertTrue kita akan gagal dalam 2 kasus pengujian dan hanya meneruskan satu kasus.
  • Tangkapan layar akan diambil untuk kasus pengujian yang gagal hanya sesuai penyesuaian kami
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);

    }

Langkah 4) Tambahkan kode ke TestGuru99PDFEmail.java untuk mengirim laporan PDF melalui email

  • Kami akan menggunakan anotasi @AfterSuite untuk mengirim email laporan PDF
  • Kami akan mengirim email menggunakan Gmail
  • Untuk mengaktifkan Email, perlu mengimpor banyak file perpustakaan seperti mail.jar, pop3.jar, smptp.jar, dll.
  • Sebelum Anda menjalankan ini, masukkan alamat email dari, ke dan kata sandi
 //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();

}

}

}

Unduh proyek lengkapnya di sini

Catatan: Saat kita mengklik link cuplikan layar dalam pdf, dialog keamanan ditampilkan. Kita harus mengizinkan dialog ini untuk membuka pdf.

Laporan dalam bentuk PDF dan Email

Email yang dihasilkan akan terlihat seperti ini

Laporan dalam bentuk PDF dan Email

Kesimpulan

  • TestNG memiliki kemampuan pelaporan bawaan di dalamnya.
  • Setelah eksekusi kasus uji selesai, TestNG menghasilkan folder hasil pengujian di root proyek.
  • Dalam folder test-output, ada dua laporan utama, index.html, dan emailable-report.html.
  • Untuk menyesuaikan TestNG laporan kita perlu mengimplementasikan dua antarmuka, ITestListener dan IReporter.
  • Jika kita perlu mendapatkan laporan di sela-sela eksekusi, kita memerlukan ITestListener.
  • Untuk membuat laporan akhir setelah eksekusi selesai, kita perlu mengimplementasikan IReporter.
  • Mengambil tangkapan layar, masuk Selenium WebDriver, kita perlu mengetikkan cast WebDriver ke antarmuka TakesScreenShot.
  • Untuk menghasilkan laporan pdf kita perlu menambahkan jar IText di proyek.

Download Selenium File Proyek untuk Demo dalam Tutorial ini