Sesuaikan, PDF & Email TestNG Reports di Selenium WebDriver

Daftar Isi:

Anonim

Sebelum kita melihat hal lain, pertama-tama mari kita pahami -

Mengapa kita membutuhkan pelaporan?

Saat kami menggunakan Selenium atau alat otomatisasi lainnya, kami menjalankan operasi di aplikasi web. Tetapi tujuan otomatisasi kami tidak hanya untuk menjalankan Aplikasi yang Sedang 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 untuk proses Pengujian perangkat lunak

Pelaporan TestNG

Perpustakaan TestNG menyediakan fitur pelaporan yang sangat berguna. Setelah eksekusi, Testng akan menghasilkan folder keluaran uji di root proyek. Folder ini berisi dua jenis Laporan-

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

emailable-report.html: Ini adalah laporan ringkasan dari eksekusi uji saat ini yang berisi pesan Kasus Uji dalam warna hijau (untuk kasus uji lulus) dan merah (untuk kasus uji yang gagal).

Cara menyesuaikan Laporan TestNG

Pelaporan TestNG cukup berguna tetapi terkadang kami membutuhkan lebih sedikit data dalam laporan atau ingin menampilkan laporan dalam beberapa format lain seperti pdf, excel, dll. Atau ingin mengubah tata letak laporan.

Ada dua cara untuk menyesuaikan laporan TestNG

  • Menggunakan Antarmuka ITestListener:
  • Menggunakan IReporter Interface:

Antarmuka ITestListener

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

Berikut langkah-langkah yang akan kami ikuti

  • Buat kelas mengatakan RealGuru99Report dan terapkan iTestListener di dalamnya.
  • Menerapkan metode iTestListener
  • Buat metode pengujian dan tambahkan kelas RealGuru99Report sebagai pendengar di kelas Metode Uji.

Contoh Kode

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

paket testNGReport.realTimeReport;import org.testng.ITestContext;import org.testng.ITestListener;import org.testng.ITestResult;public class RealGuru99TimeReport mengimplementasikan ITestListener {@Mengesampingkanpublic void onStart (ITestContext arg0) {System.out.println ("Mulai Eksekusi (TEST) ->" + arg0.getName ());}@Mengesampingkanpublic void onTestStart (ITestResult arg0) {System.out.println ("Pengujian Dimulai ->" + arg0.getName ());}@Mengesampingkanpublic void onTestSuccess (ITestResult arg0) {System.out.println ("Test Pass ->" + arg0.getName ());}@Mengesampingkanpublic void onTestFailure (ITestResult arg0) {System.out.println ("Tes Gagal ->" + arg0.getName ());}@Mengesampingkanpublic void onTestSkipped (ITestResult arg0) {System.out.println ("Tes Dilewati ->" + arg0.getName ());}@Mengesampingkanpublic void onFinish (ITestContext arg0) {System.out.println ("AKHIR Eksekusi (TEST) ->" + arg0.getName ());}@Mengesampingkanpublic void onTestFailedButWithinSuccessPercentage (ITestResult arg0) {// TODO Rintisan metode yang dibuat secara otomatis}}

TestGuru99RealReport.java adalah kasus uji untuk laporan nyata

paket testNGReport.realTimeReport;import org.testng.Assert;import org.testng.annotations.Listeners;import org.testng.annotations.Test;@Listeners (RealGuru99TimeReport.class)public class TestGuru99RealReport {@Ujipublic void testRealReportOne () {Assert.assertTrue (benar);}@Ujipublic void testRealReportTwo () {Assert.assertTrue (false);}// Kasus pengujian bergantung pada testcase = testRealReportTwo yang gagal@Test (dependOnMethods = "testRealReportTwo")public void testRealReportThree () {}}

Outputnya akan terlihat seperti-

Antarmuka IReporter

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 dari eksekusi uji lengkap di Daftar , dan kami dapat membuat laporan menggunakannya.

Contoh Kode

Guru99Reporter.java adalah file yang digunakan untuk menyesuaikan laporan

paket testNGReport.iReporterReport;impor 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;impor org.testng.xml.XmlSuite;public class Guru99Reporter mengimplementasikan IReporter {@Mengesampingkanpublic void generateReport (List  arg0, List  arg1,String outputDirectory) {// Parameter kedua dari metode ini ISuite akan berisi semua suite yang dieksekusi.untuk (ISuite iSuite: arg1) {// Dapatkan peta hasil dari satu rangkaian pada satu waktuPeta  results = iSuite.getResults ();// Dapatkan kunci peta hasilSetel  keys = results.keySet ();// Pergi ke setiap nilai peta satu per satuuntuk (String key: keys) {// Objek konteks hasil saat iniKonteks ITestContext = result.get (key) .getTestContext ();// Cetak detail Suite di KonsolSystem.out.println ("Suite Name ->" + context.getName ()+ ":: Laporkan Ditectory keluaran ->" + context.getOutputDirectory ()+ ":: Nama Suite ->" + konteks.getSuite (). GetName ()+ ":: Tanggal Mulai Waktu untuk eksekusi ->" + konteks.getStartDate ()+ ":: Tanggal Akhir Waktu untuk eksekusi ->" + context.getEndDate ());// Dapatkan Peta hanya untuk kasus pengujian yang gagalIResultMap resultMap = context.getFailedTests ();// Dapatkan detail metode kasus pengujian yang gagalKoleksi  failMethods = resultMap.getAllMethods ();// Ulangi satu per satu di semua metode yang gagalSystem.out.println ("-------- KASUS PENGUJIAN GAGAL ---------");untuk (ITestNGMethod iTestNGMethod: failMethods) {// Cetak detail kasus uji yang gagalSystem.out.println ("TESTCASE NAME ->" + iTestNGMethod.getMethodName ()+ "\ nDeskripsi ->" + iTestNGMethod.getDescription ()+ "\ nPriority ->" + iTestNGMethod.getPriority ()+ "\ n: Tanggal ->" + Tanggal baru (iTestNGMethod.getDate ()));}}}}}

TestGuru99ForReporter.java adalah demo untuk pelaporan Kustom

paket testNGReport.iReporterReport;import org.testng.Assert;import org.testng.annotations.Listeners;import org.testng.annotations.Test;// Tambahkan pemroses untuk mendengarkan laporan dan menulisnya ketika testcas selesai@Listeners (value = Guru99Reporter.class)public class TestGuru99ForReporter {@Test (priority = 0, description = "testReporterOne")public void testReporterOne () {// Lulus uji kasusAssert.assertTrue (benar);}@Test (priority = 1, description = "testReporterTwo")public void testReporterTwo () {// Kasus uji gagalAssert.assertTrue (false);}}

Outputnya akan seperti-

PDF dan Email Laporan

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

Untuk membuat laporan pdf kita membutuhkan Java API IText . Unduh di sini . Ada kelas pendengar kustom lain yang benar-benar mengimplementasikan jar IText ini dan membuat laporan pdf untuk kita. Unduh di sini

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

Beginilah cara kami mendekati 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

paket PDFEmail;impor java.io.File;impor org.apache.commons.io.FileUtils;import org.openqa.selenium.OutputType;import org.openqa.selenium.TakesScreenshot;import org.openqa.selenium.WebDriver;impor org.openqa.selenium.firefox.FirefoxDriver;public class BaseClass {driver WebDriver statis;public static WebDriver getDriver () {jika (driver == null) {Driver WebDriver;System.setProperty ("webdriver.gecko.driver", "C: \\ geckodriver.exe");driver = baru FirefoxDriver ();}pengemudi kembali;}/ *** Fungsi ini akan mengambil tangkapan layar* @ driver webparam* @param fileWithPath* @throws Exception* /public static void takeSnapShot (WebDriver webdriver, String fileWithPath) melempar Exception {// Ubah objek web driver menjadi TakeScreenshotTakesScreenshot scrShot = ((TakesScreenshot) webdriver);// Panggil metode getScreenshotAs untuk membuat file gambarFile SrcFile = scrShot.getScreenshotAs (OutputType.FILE);// Pindahkan file gambar ke tujuan baruFile DestFile = File baru (fileWithPath);// Salin file di tujuanFileUtils.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 untuk mengambil tangkapan layar pada Error
  • Melampirkan tautan tangkapan layar dalam laporan PDF

Tambahkan kode untuk melampirkan tangkapan layar ke laporan PDF

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

  • Di sini kita akan menambahkan JyperionListener.class sebagai pendengar
  • Kami akan Eksekusi 3 kasus uji.
  • Dengan menggunakan Assert.assertTrue, kita akan gagal dalam 2 kasus uji jika hanya meneruskan satu kasus.
  • Tangkapan layar akan diambil untuk kasus uji yang gagal hanya sesuai penyesuaian kami
paket PDFEmail;import java.util.Properties;import javax.activation.DataHandler;import javax.activation.DataSource;import javax.activation.FileDataSource;impor javax.mail.BodyPart;impor javax.mail.Message;import javax.mail.MessagingException;impor javax.mail.Multipart;impor javax.mail.Session;impor javax.mail.Transport;impor javax.mail.internet.AddressException;impor javax.mail.internet.InternetAddress;impor javax.mail.internet.MimeBodyPart;impor javax.mail.internet.MimeMessage;impor 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;importir reporter.JyperionListener;// Tambahkan pendengar untuk pembuatan laporan pdf@Distroartonline (@distroartonline)public class TestGuru99PDFReport memperluas BaseClass {Driver WebDriver;// Testcase gagal sehingga screen shot dibuat@Ujipublic void testPDFReportOne () {driver = BaseClass.getDriver ();driver.get ("http://google.com");Assert.assertTrue (false);}// Testcase gagal sehingga screen shot dibuat@Ujipublic void testPDFReporTwo () {driver = BaseClass.getDriver ();driver.get ("http: /guru99.com");Assert.assertTrue (false);}// Uji kasus uji akan lulus, jadi tidak ada tangkapan layar di atasnya@Ujipublic void testPDFReportThree () {driver = BaseClass.getDriver ();driver.get ("http://demo.guru99.com");Assert.assertTrue (benar);}

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 dari, ke alamat email dan kata sandi
 // Setelah eksekusi selesai, kirim laporan pdf melalui email@Setelahpublic void tearDown () {sendPDFReportByGMail (" Alamat email ini dilindungi dari robot spam. Anda perlu mengaktifkan JavaScript untuk melihatnya.", "password", "Alamat email ini dilindungi dari robot spam. Anda perlu mengaktifkan JavaScript untuk melihatnya. "," PDF Report "," ");} / ** * Kirim email menggunakan java * @param dari * @param pass * @param ke * @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 ", dari); props.put (" mail.smtp.password ", pass); props.put (" mail.smtp.port "," 587 "); props.put (" mail.smtp.auth "," true "); Sesi sesi = Session.getDefaultInstance (props); MimeMessage message = new MimeMessage (sesi);coba {// Atur dari alamat message.setFrom (baru InternetAddress (dari)); message.addRecipient (Message.RecipientType.TO, new InternetAddress (to)); // Set subjek message.setSubject (subjek); message.setText (body); BodyPart objMessageBodyPart = MimeBodyPart baru (); objMessageBodyPart.setText ("Temukan File Laporan Terlampir!"); Multipart multipart = new MimeMultipart (); multipart.addBodyPart (objMessageBodyPart); objMessageBodyPart = MimeBodyPart baru (); // Setel jalur ke file laporan pdf String nama file = System.getProperty ("user.dir") + "\\ Default test.pdf"; // Buat sumber data untuk melampirkan file di email DataSource source = new FileDataSource (nama file); objMessageBodyPart.setDataHandler (DataHandler baru (sumber)); objMessageBodyPart.setFileName (nama file); multipart.addBodyPart (objMessageBodyPart); pesan.setContent (multipart); Transport transport = session.getTransport ("smtp"); transport.connect (host, from, pass); transport.sendMessage (message, message.getAllRecipients ()); transport.close (); } menangkap (AddressException ae) {ae.printStackTrace (); } menangkap (MessagingException me) {me.printStackTrace (); }}}

Unduh proyek lengkapnya di sini

Catatan: Ketika kita mengklik link screen shot dalam pdf, itu menunjukkan dialog keamanan. Kami harus mengizinkan dialog ini untuk membuka pdf.

Email yang dihasilkan akan terlihat seperti ini

Ringkasan:

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

Unduh File Proyek Selenium untuk Demo dalam Tutorial ini