Sebelum kita melihat perkara lain, mari kita fahami terlebih dahulu -
Mengapa kita perlu melaporkan?
Ketika kami menggunakan Selenium atau alat automasi lain, kami melakukan operasi di aplikasi web. Tetapi tujuan automasi kami bukan hanya menjalankan Aplikasi yang Diuji. Kami, sebagai penguji automasi seharusnya menguji aplikasi, mencari bug dan melaporkannya kepada pasukan pengembangan atau pihak pengurusan yang lebih tinggi. Di sini pelaporan menjadi penting untuk proses Pengujian perisian
Pelaporan TestNG
Perpustakaan TestNG menyediakan ciri pelaporan yang sangat berguna. Selepas pelaksanaan, Testng akan menghasilkan folder output-ujian pada akar projek. Folder ini mengandungi dua jenis Laporan-
Index.html: Ini adalah laporan lengkap pelaksanaan semasa yang mengandungi maklumat seperti kesalahan, kumpulan, waktu, log wartawan, file XML testng.
emailable-report.html: Ini adalah laporan ringkasan pelaksanaan ujian semasa yang mengandungi mesej Uji Kes dengan warna hijau (untuk kes ujian lulus) dan sorotan merah (untuk kes ujian yang gagal).
Cara menyesuaikan Laporan TestNG
Pelaporan TestNG cukup berguna tetapi tetap, kadang-kadang kita memerlukan lebih sedikit data dalam laporan atau ingin memaparkan laporan dalam beberapa format lain seperti pdf, excel, dll. Atau ingin mengubah susun atur laporan.
Terdapat dua cara untuk menyesuaikan laporan TestNG
- Menggunakan Antaramuka ITestListener:
- Menggunakan Antaramuka IReporter:
Antaramuka ITestListener
Kami menggunakan antara muka ini apabila perlu menyesuaikan laporan masa nyata. Dengan kata lain, jika kita menjalankan sekumpulan kes ujian dalam rangkaian TetNG dan kita ingin mendapatkan laporan setiap kes ujian, maka setelah setiap kes ujian, kita perlu menerapkan antara muka ITestListener. Antaramuka ini akan mengatasi kaedah onTestFailure, onTestStart, onTestSkipped untuk menghantar status betul kes ujian semasa.
Inilah langkah-langkah yang akan kita ikuti
- Buat kelas katakan RealGuru99Report dan laksanakan iTestListener di dalamnya.
- Laksanakan kaedah iTestListener
- Buat kaedah ujian dan tambahkan kelas RealGuru99Report sebagai pendengar di kelas Kaedah Uji.
Contoh Kod
RealGuru99TimeReport.java adalah kelas pelaporan masa nyata. Ia akan melaksanakan antara muka ITestListener untuk melaporkan
ujian pakejNGReport.realTimeReport;import org.testng.ITestContext;import org.testng.ITestListener;import org.testng.ITestResult;kelas awam RealGuru99TimeReport melaksanakan ITestListener {@Selamatkekosongan awam diStart (ITestContext arg0) {System.out.println ("Start Of Execution (TEST) ->" + arg0.getName ());}@Selamatkekosongan awam onTestStart (ITestResult arg0) {System.out.println ("Ujian Dimulakan ->" + arg0.getName ());}@Selamatkekosongan awam onTestSuccess (ITestResult arg0) {System.out.println ("Ujian Lulus ->" + arg0.getName ());}@Selamatkekosongan awam onTestFailure (ITestResult arg0) {System.out.println ("Ujian Gagal ->" + arg0.getName ());}@Selamatkekosongan awam onTestSkipped (ITestResult arg0) {System.out.println ("Uji Langkau ->" + arg0.getName ());}@Selamatkekosongan awam onFinish (ITestContext arg0) {System.out.println ("END Of Execution (TEST) ->" + arg0.getName ());}@Selamatkekosongan awam onTestFailedButWithinSuccessPercentage (ITestResult arg0) {// TODO Kaedah penjanaan automatik}}
TestGuru99RealReport.java adalah kes ujian untuk laporan sebenar
ujian pakejNGReport.realTimeReport;import org.testng.Assert;import org.testng.annotations.Pendengar;import org.testng.annotations.Test;@Listeners (RealGuru99TimeReport.class)kelas awam TestGuru99RealReport {@ Ujianujian kekosongan awamRealReportOne () {Assert.assertTrue (benar);}@ Ujianujian kekosongan awamRealReportTwo () {Assert.assertTrue (palsu);}// Kes ujian bergantung pada kotak ujian yang gagal = testRealReportTwo@Test (dependOnMethods = "testRealReportTwo")ujian kekosongan awamRealReportThree () {}}
Keluarannya akan kelihatan seperti-
Antaramuka IReporter
Sekiranya kita ingin menyesuaikan laporan ujian akhir yang dihasilkan oleh TestNG, kita perlu menerapkan antara muka IReporter. Antaramuka ini hanya mempunyai satu kaedah untuk melaksanakan menghasilkanReport. Kaedah ini mempunyai semua maklumat pelaksanaan ujian lengkap dalam Daftar
Contoh Kod
Guru99Reporter.java adalah fail yang digunakan untuk menyesuaikan laporan
ujian pakejNGReport.iReporterReport;import java.util.Koleksi;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.ITestNGMode;import org.testng.xml.XmlSuite;Guru99Reporter kelas awam melaksanakan IReporter {@Selamatpublic void createReport (Senaraiarg0, Senarai arg1,String outputDirektori) {// Parameter kedua kaedah ini ISuite akan mengandungi semua suite yang dijalankan.untuk (ISuite iSuite: arg1) {// Dapatkan peta hasil dari satu suite pada satu masaPeta hasil = iSuite.getResults ();// Dapatkan kunci peta hasilTetapkan keys = results.keySet ();// Pergi ke setiap nilai peta satu persatuuntuk (Kekunci rentetan: kunci) {// Objek konteks hasil semasaKonteks ITestContext = hasil.get (kunci) .getTestContext ();// Perincian Print Suite di ConsoleSystem.out.println ("Nama Suite ->" + konteks.getName ()+ ":: Laporan output Ditectory ->" + konteks.getOutputDirectory ()+ ":: Nama Suite ->" + konteks.getSuite (). GetName ()+ ":: Tarikh Mula Masa untuk pelaksanaan ->" + konteks.getStartDate ()+ ":: Tarikh Akhir Masa untuk pelaksanaan ->" + konteks.getEndDate ());// Dapatkan Peta untuk kes ujian yang gagal sahajaIResultMap resultMap = konteks.getFailedTests ();// Dapatkan perincian kaedah kes ujian yang gagalKoleksi gagalMetode = hasilMap.getAllMethods ();// Gelung satu persatu dalam semua kaedah yang gagalSystem.out.println ("-------- KES UJIAN GAGAL ---------");untuk (ITestNGMethod iTestNGMethod: FailMethods) {// Cetak butiran kes ujian yang gagalSystem.out.println ("NAMA UJIAN ->" + iTestNGMethod.getMethodName ()+ "\ nDeskripsi ->" + iTestNGMethod.getDescription ()+ "\ nPriority ->" + iTestNGMethod.getPriority ()+ "\ n: Tarikh ->" + Tarikh baru (iTestNGMethod.getDate ()));}}}}}
TestGuru99ForReporter.java adalah demo untuk pelaporan Custom
ujian pakejNGReport.iReporterReport;import org.testng.Assert;import org.testng.annotations.Pendengar;import org.testng.annotations.Test;// Tambahkan pendengar untuk mendengar laporan dan menulisnya apabila ujian selesai@Listeners (nilai = Guru99Reporter.class)kelas awam TestGuru99ForReporter {@Test (keutamaan = 0, keterangan = "testReporterOne")ujian kekosongan awamReporterOne () {// Lulus kes ujianAssert.assertTrue (benar);}@Test (keutamaan = 1, keterangan = "testReporterTwo")ujian kekosongan awamReporterTwo () {// Kes ujian gagalAssert.assertTrue (palsu);}}
Keluaran akan seperti-
PDF dan E-mel Laporan
Pelaksanaan laporan di atas cukup mudah dan jelas untuk memulakan anda dengan penyesuaian laporan.
Tetapi dalam persekitaran korporat, anda perlu membuat laporan yang sangat disesuaikan. Inilah senario yang akan kita hadapi
- Buat Laporan Khusus dalam bentuk PDF
- Ambil Tangkapan Skrin HANYA mengenai Kesalahan. Pautan ke tangkapan skrin dalam bentuk PDF
- Hantar E-mel PDF
Laporan PDF kelihatan seperti ini
Untuk membuat laporan pdf kita memerlukan Java API IText . Muat turunnya di sini. Terdapat satu lagi kelas pendengar tersuai yang sebenarnya melaksanakan balang IText ini dan membuat laporan pdf untuk kami. Muat turunnya di sini
Gambar di atas menunjukkan format lalai laporan PDF yang dihasilkan. Anda boleh menyesuaikannya
Inilah cara kami menghampiri perkara ini
Langkah 1) Buat Kelas Asas
Langkah 2) Sesuaikan JypersionListerner.Java (kod pembuatan PDF)
Langkah 3) Buat TestGuru99PDFEmail.java yang akan melaksanakan kes ujian, buat PDF
Langkah 4) Tambahkan kod ke TestGuru99PDFEmail.java untuk menghantar laporan PDF melalui e-mel
Mari lihat langkah-langkah ini
Langkah 1) Buat Kelas Asas
Kelas asas ini mempunyai fungsi untuk membuat WebDriver dan Take Screenshot
pakej 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;BaseClass kelas awam {pemacu WebDriver statik;getDriver WebDriver statik awam () {jika (driver == null) {Pemacu WebDriver;System.setProperty ("webdriver.gecko.driver", "C: \\ geckodriver.exe");driver = FirefoxDriver baru ();}pemandu balik;}/ *** Fungsi ini akan mengambil tangkapan skrin* pemacu laman web @param* @param fileWithPath* Pengecualian @throws* /public static void takeSnapShot (WebDriver webdriver, String fileWithPath) membuang Pengecualian {// Tukarkan objek pemacu web ke TakeScreenshotTakesScreenshot scrShot = ((TakesScreenshot) pemacu web);// Panggil kaedah getScreenshotAs untuk membuat fail gambarFail SrcFile = scrShot.getScreenshotAs (OutputType.FILE);// Pindahkan fail gambar ke destinasi baruFail DestFile = Fail baru (fileWithPath);// Salin fail di destinasiFileUtils.copyFile (SrcFile, DestFile);}}
Langkah 2) Sesuaikan JypersionListener.java
Kami akan mematuhi format laporan lalai. Tetapi kami akan membuat 2 penyesuaian
- Menambah kod untuk mengarahkan JypersionListener mengambil tangkapan skrin pada Ralat
- Melampirkan pautan tangkapan skrin dalam laporan PDF
Tambahkan kod untuk melampirkan tangkapan skrin ke laporan PDF
Langkah 3) Buat TestGuru99PDFEmail.java yang akan melaksanakan kes ujian, buat PDF
- Di sini kita akan menambah JyperionListener.class sebagai pendengar
- Kami akan Melaksanakan 3 kes ujian.
- Dengan menggunakan Assert.assertTrue, kita akan gagal 2 kes ujian sementara hanya melewati satu kes.
- Tangkapan skrin akan diambil untuk kes ujian yang gagal hanya mengikut penyesuaian kami
pakej PDFEmail;import java.util.Properti;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.Pendengar;import org.testng.annotations.Test;wartawan import.JyperionListener;// Tambahkan pendengar untuk penghasilan laporan pdf@Listeners (JyperionListener.class)kelas awam TestGuru99PDFReport memperluas BaseClass {Pemacu WebDriver;// Ujian gagal sehingga tangkapan skrin dihasilkan@ Ujianujian kekosongan awamPDFReportOne () {pemacu = BaseClass.getDriver ();driver.get ("http://google.com");Assert.assertTrue (palsu);}// Ujian gagal sehingga tangkapan skrin dihasilkan@ Ujianujian kekosongan awamPDFReporTwo () {pemacu = BaseClass.getDriver ();driver.get ("http: /guru99.com");Assert.assertTrue (palsu);}// Kes ujian akan lulus, jadi tidak ada tangkapan layar di atasnya@ Ujianujian kekosongan awamPDFReportThree () {pemacu = BaseClass.getDriver ();driver.get ("http://demo.guru99.com");Assert.assertTrue (benar);}
Langkah 4) Tambahkan kod ke TestGuru99PDFEmail.java untuk menghantar laporan PDF melalui e-mel
- Kami akan menggunakan anotasi @AfterSuite untuk menghantar e-mel laporan PDF
- Kami akan menghantar e-mel menggunakan Gmail
- Untuk mengaktifkan E-mel, perlu mengimport banyak fail perpustakaan seperti mail.jar, pop3.jar, smptp.jar, dll
- Sebelum anda melaksanakannya, masukkan alamat e-mel dan kata laluan dari, ke
// Setelah pelaksanaan lengkap hantar laporan pdf melalui e-mel@AfterSuiteair mata terbatal awam () {sendPDFReportByGMail (" Alamat e-mel ini dilindungi dari robot spam. Anda perlu mengaktifkan JavaScript untuk melihatnya.", "kata laluan", "This email address is being protected from spambots. You need JavaScript enabled to view it.", "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(); } } }
Muat turun projek lengkap di sini
Catatan: Apabila kita mengklik pautan tangkapan skrin dalam pdf, ini menunjukkan dialog keselamatan. Kita harus membenarkan dialog ini membuka pdf.
E-mel yang dihasilkan akan kelihatan seperti ini
Ringkasan:
- TestNG mempunyai kemampuan pelaporan terbina di dalamnya.
- Selepas pelaksanaan kes ujian yang lengkap, TestNG menghasilkan folder output-ujian dalam akar projek.
- Dalam folder ujian-output, terdapat dua laporan utama, index.html, dan emailable-report.html.
- Untuk menyesuaikan laporan TestNG, kita perlu menerapkan dua antara muka, ITestListener dan IReporter.
- Sekiranya kita perlu mendapatkan laporan di antara pelaksanaan, kita memerlukan ITestListener.
- Untuk membuat laporan akhir setelah pelaksanaan lengkap, kita perlu menerapkan IReporter.
- Mengambil tangkapan skrin, di Selenium WebDriver, kita perlu menaip antara muka WebDriver ke TakesScreenShot.
- Untuk menghasilkan laporan pdf kita perlu menambahkan balang IText dalam projek.
Muat turun Selenium Project Files untuk Demo dalam Tutorial ini