Özelleştir, PDF & Selenium WebDriver'da E-posta TestNG Raporları

İçindekiler:

Anonim

Başka bir şeye bakmadan önce, önce anlayalım -

Neden raporlamaya ihtiyacımız var?

Selenium veya başka bir otomasyon aracı kullandığımızda, web uygulaması üzerinde işlem yapıyoruz. Ancak otomasyon amacımız sadece Test Edilen Uygulamayı uygulamak değildir. Bir otomasyon testçisi olarak, uygulamayı test etmemiz, hataları bulmamız ve geliştirme ekibine veya daha üst yönetime rapor etmemiz gerekiyor. Burada raporlama yazılım test süreci için önem kazanıyor

TestNG Raporlama

TestNG kitaplığı çok kullanışlı bir raporlama özelliği sağlar. Yürütmeden sonra, Testng projenin kökünde bir test çıktı klasörü oluşturacaktır. Bu klasör iki tür Rapor içerir-

Index.html: Bu, bir hata, gruplar, zaman, haberci günlükleri, XML dosyalarını test etme gibi bilgileri içeren mevcut yürütmenin tam raporudur.

emailable-report.html: Bu, yeşil (başarılı test senaryoları için) ve kırmızı (başarısız test senaryoları için) vurgulanan Test Senaryosu mesajını içeren mevcut test yürütmesinin özet raporudur.

TestNG Raporu nasıl özelleştirilir

TestNG raporlama oldukça kullanışlıdır, ancak yine de, bazen raporlarda biraz daha az veriye ihtiyaç duyarız veya raporları pdf, excel gibi başka bir formatta görüntülemek veya raporun düzenini değiştirmek isteriz.

TestNG raporunu özelleştirmenin iki yolu olabilir

  • ITestListener Arayüzünü Kullanma:
  • IReporter Arayüzünü Kullanma:

ITestListener Arayüzü

Gerçek zamanlı raporu özelleştirmemiz gerektiğinde bu arayüzü kullanıyoruz. Başka bir deyişle, bir TetNG paketinde bir dizi test senaryosu yürütüyorsak ve her bir test senaryosunun raporunu almak istiyorsak, her test senaryosundan sonra ITestListener arayüzünü uygulamamız gerekir. Bu arayüz, geçerli test olayının doğru durumunu göndermek için onTestFailure, onTestStart, onTestSkipped yöntemini geçersiz kılar.

İşte izleyeceğimiz adımlar

  • RealGuru99Report diyen bir sınıf oluşturun ve iTestListener'ı ona uygulayın.
  • İTestListener yöntemlerini uygulama
  • Test yöntemi oluşturun ve RealGuru99Report sınıfını Test Yöntemi sınıfına dinleyici olarak ekleyin.

Kod Örneği

RealGuru99TimeReport.java, gerçek zamanlı raporlama sınıfıdır. Raporlama için ITestListener arayüzünü uygulayacaktır.

paket testNGReport.realTimeReport;org.testng.ITestContext'i içe aktar;import org.testng.ITestListener;import org.testng.ITestResult;public class RealGuru99TimeReport, ITestListener {@Overridepublic void onStart (ITestContext arg0) {System.out.println ("Yürütme Başlangıcı (TEST) ->" + arg0.getName ());}@Overridepublic void onTestStart (ITestResult arg0) {System.out.println ("Test Başladı ->" + arg0.getName ());}@Overridepublic void onTestSuccess (ITestResult arg0) {System.out.println ("Test Geçişi ->" + arg0.getName ());}@Overridepublic void onTestFailure (ITestResult arg0) {System.out.println ("Test Başarısız ->" + arg0.getName ());}@Overridepublic void onTestSkipped (ITestResult arg0) {System.out.println ("Test Atlandı ->" + arg0.getName ());}@Overridepublic void onFinish (ITestContext arg0) {System.out.println ("Yürütme Sonu (TEST) ->" + arg0.getName ());}@Overridepublic void onTestFailedButWithinSuccessPercentage (ITestResult arg0) {// TODO Otomatik oluşturulan yöntem saplaması}}

TestGuru99RealReport.java, gerçek rapor için test durumudur

paket testNGReport.realTimeReport;import org.testng.Assert;import org.testng.annotations.Listeners;import org.testng.annotations.Test;@Listeners (RealGuru99TimeReport.class)public class TestGuru99RealReport {@Ölçekpublic void testRealReportOne () {Assert.assertTrue (doğru);}@Ölçekpublic void testRealReportTwo () {Assert.assertTrue (yanlış);}// Test durumu, başarısız olan test olayına bağlıdır = testRealReportTwo@Test (bağlıdırOnMethods = "testRealReportTwo")public void testRealReportThree () {}}

Çıktı şöyle görünecek:

IReporter Arayüzü

TestNG tarafından oluşturulan son test raporunu özelleştirmek istiyorsak, IReporter arayüzünü uygulamamız gerekir. Bu arabirim, generateReport'u uygulamak için yalnızca bir yönteme sahiptir. Bu yöntem, Listesinde tam bir test yürütme işleminin tüm bilgilerine sahiptir ve bunu kullanarak raporu oluşturabiliriz.

Kod Örneği

Guru99Reporter.java, raporu özelleştirmek için kullanılan dosyadır

paket testNGReport.iReporterReport;java.util.Collection içe aktarma;içe aktar java.util.Date;import java.util.List;içe aktar java.util.Map;içe aktar java.util.Set;import org.testng.IReporter;import org.testng.IResultMap;import org.testng.ISuite;import org.testng.ISuiteResult;org.testng.ITestContext'i içe aktar;import org.testng.ITestNGMethod;org.testng.xml.XmlSuite'i içe aktar;public class Guru99Reporter, IReporter'ı uygular {@Overridepublic void generateReport (List  arg0, List  arg1,String outputDirectory) {// Bu yöntemin ikinci parametresi ISuite, çalıştırılan tüm paketi içerecektir.for (ISuite iSuite: arg1) {// Tek seferde tek bir paketin sonucunun bir haritasını alınHarita  results = iSuite.getResults ();// Sonuç haritasının anahtarını alın anahtarlarını ayarlayın = results.keySet ();// Her bir harita değerine birer birer gidinfor (Dize anahtarı: anahtarlar) {// Mevcut sonucun Bağlam nesnesiITestContext bağlam = results.get (anahtar) .getTestContext ();// Konsolda Print Suite ayrıntısıSystem.out.println ("Suite Adı ->" + context.getName ()+ ":: Rapor çıktısı Dizini ->" + context.getOutputDirectory ()+ ":: Suite Adı ->" + context.getSuite (). GetName ()+ ":: Yürütme için Başlangıç ​​Tarihi Saat ->" + context.getStartDate ()+ ":: Yürütme için Bitiş Tarihi ->" + context.getEndDate ());// Yalnızca başarısız test durumları için Harita alınIResultMap resultMap = context.getFailedTests ();// Başarısız test senaryolarının yöntem ayrıntılarını alın Koleksiyonu failMethods = resultMap.getAllMethods ();// Başarısız olan tüm yöntemlerde tek tek döngü yapınSystem.out.println ("-------- BAŞARISIZ TEST DURUMU ---------");for (ITestNGMethod iTestNGMethod: failMethods) {// Başarısız test olayları ayrıntılarını yazdırınSystem.out.println ("TESTCASE NAME ->" + iTestNGMethod.getMethodName ()+ "\ nDescription ->" + iTestNGMethod.getDescription ()+ "\ nPriority ->" + iTestNGMethod.getPriority ()+ "\ n: Tarih ->" + yeni Tarih (iTestNGMethod.getDate ()));}}}}}

TestGuru99ForReporter.java, Özel raporlama için bir demodur

paket testNGReport.iReporterReport;import org.testng.Assert;import org.testng.annotations.Listeners;import org.testng.annotations.Test;// Raporu dinlemek ve testcas bittiğinde yazmak için dinleyici ekleyin@Listeners (değer = Guru99Reporter.class)public class TestGuru99ForReporter {@Test (öncelik = 0, açıklama = "testReporterOne")public void testReporterOne () {// Test durumunu geçAssert.assertTrue (doğru);}@Test (öncelik = 1, açıklama = "testReporterTwo")public void testReporterTwo () {// Başarısız test durumuAssert.assertTrue (yanlış);}}

Çıktı şöyle olacak-

Raporların PDF'si ve E-postası

Yukarıdaki rapor uygulaması, rapor özelleştirmeye başlamanız için oldukça basit ve açıktır.

Ancak kurumsal ortamda, oldukça özelleştirilmiş raporlar oluşturmanız gerekecektir. İşte ilgileneceğimiz senaryo

  1. PDF biçiminde Özel Rapor oluşturun
  2. YALNIZCA Hatalarda Ekran Görüntülerini Alın. PDF'deki ekran görüntülerine bağlantı
  3. PDF'nin E-postasını Gönderin

PDF raporu şuna benzer

PDF raporu oluşturmak için bir Java API IText'e ihtiyacımız var . Buradan indir . Aslında bu IText kavanozunu uygulayan ve bizim için bir pdf raporu oluşturan başka bir özel dinleyici sınıfı daha var. Buradan indir

Yukarıdaki şekil, oluşturulan PDF raporunun varsayılan formatını göstermektedir. Özelleştirebilirsiniz

İşte buna nasıl yaklaşacağız

Adım 1) Bir Temel Sınıf Oluşturun

Adım 2) JypersionListerner.Java'yı özelleştirin (PDF oluşturma kodu)

Adım 3) Test senaryolarını yürütecek bir TestGuru99PDFEmail.java oluşturun, PDF oluşturun

Adım 4) E-posta yoluyla PDF raporu göndermek için TestGuru99PDFEmail.java'ya kod ekleyin

Bu adımlara bakalım

Adım 1) Temel Sınıf Oluşturun

Bu temel sınıf, WebDriver oluşturmak ve Ekran Görüntüsü Almak için işlevlere sahiptir

PDFEmail paketi;java.io.File içe aktarma;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 {statik WebDriver sürücüsü;genel statik WebDriver getDriver () {eğer (sürücü == null) {WebDriver sürücüsü;System.setProperty ("webdriver.gecko.driver", "C: \\ geckodriver.exe");sürücü = yeni FirefoxDriver ();}dönüş sürücüsü;}/ *** Bu işlev ekran görüntüsü alacak* @param webdriver* @param fileWithPath* @throws Exception* /public static void takeSnapShot (WebDriver webdriver, String fileWithPath) {// Web sürücüsü nesnesini TakeScreenshot'a dönüştürAlırScreenshot scrShot = ((AlırScreenshot) webdriver);// Görüntü dosyası oluşturmak için getScreenshotAs yöntemini çağırınDosya SrcFile = scrShot.getScreenshotAs (OutputType.FILE);// Görüntü dosyasını yeni hedefe taşıDosya DestFile = yeni Dosya (fileWithPath);// Dosyayı hedefe kopyalaFileUtils.copyFile (SrcFile, DestFile);}}

Adım 2) JypersionListener.java'yı özelleştirin

Varsayılan rapor formatına bağlı kalacağız. Ama 2 özelleştirme yapacağız

  • JypersionListener'a Hata durumunda ekran görüntüsü alma talimatı vermek için kod ekleniyor
  • PDF raporuna ekran görüntüsünün bağlantısını eklemek

Ekran görüntüsünü PDF raporuna eklemek için kod ekleyin

Adım 3) Test senaryolarını yürütecek bir TestGuru99PDFEmail.java oluşturun, PDF oluşturun

  • Burada JyperionListener.class'ı dinleyici olarak ekleyeceğiz
  • 3 test vakası gerçekleştireceğiz.
  • Assert.assertTrue kullanarak, sadece birini geçerken 2 test vakasında başarısız olacağız.
  • Başarısız test durumları için ekran görüntüsü yalnızca özelleştirmelerimize göre alınacaktır.
PDFEmail paketi;import java.util.Properties;javax.activation.DataHandler'ı içe aktarın;javax.activation.DataSource'u içe aktarın;javax.activation.FileDataSource'u içe aktarın;javax.mail.BodyPart'ı içe aktar;içe aktarım javax.mail.Message;javax.mail.MessagingException'ı içe aktarın;javax.mail.Multipart'ı içe aktar;javax.mail.Session'ı içe aktarın;javax.mail.Transport'u içe aktarın;içe aktar javax.mail.internet.AddressException;javax.mail.internet.InternetAddress'i içe aktarın;javax.mail.internet.MimeBodyPart'ı içe aktar;içe aktar javax.mail.internet.MimeMessage;javax.mail.internet.MimeMultipart'ı içe aktar;import org.openqa.selenium.WebDriver;import org.testng.Assert;import org.testng.annotations.AfterSuite;import org.testng.annotations.Listeners;import org.testng.annotations.Test;ithalat muhabiri.JyperionListener;// pdf raporu oluşturmak için dinleyici ekleyin@Listeners (JyperionListener.class)public class TestGuru99PDFReport, BaseClass {WebDriver sürücüsü;// Test senaryosu başarısız olduğu için ekran görüntüsü oluşturuldu@Ölçekpublic void testPDFReportOne () {sürücü = BaseClass.getDriver ();driver.get ("http://google.com");Assert.assertTrue (yanlış);}// Test senaryosu başarısız olduğu için ekran görüntüsü oluşturuldu@Ölçekpublic void testPDFReporTwo () {sürücü = BaseClass.getDriver ();driver.get ("http: /guru99.com");Assert.assertTrue (yanlış);}// Test test senaryosu geçecek, bu nedenle üzerinde ekran görüntüsü yok@Ölçekpublic void testPDFReportThree () {sürücü = BaseClass.getDriver ();driver.get ("http://demo.guru99.com");Assert.assertTrue (doğru);}

Adım 4) E-posta yoluyla PDF raporu göndermek için TestGuru99PDFEmail.java'ya kod ekleyin

  • PDF raporunun e-postasını göndermek için @AfterSuite ek açıklamasını kullanacağız
  • Gmail kullanarak e-posta göndereceğiz
  • E-postayı etkinleştirmek için mail.jar, pop3.jar, smptp.jar vb. Gibi birçok kitaplık dosyasını içe aktarmanız gerekir.
  • Bunu yürütmeden önce, e-posta adresi ve şifreyi e-posta adresine girin
 // Tamamlandıktan sonra e-posta ile pdf raporu gönderin@Kafadergisipublic void tearDown () {sendPDFReportByGMail (" Bu e-posta adresi istenmeyen postalardan korunuyor. Görüntüleyebilmek için JavaScript'in etkin olması gerekir.", "şifre", "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(); } } }

Tam projeyi buradan indirin

Not: Pdf'deki ekran görüntüsü linkine tıkladığımızda güvenlik diyaloğunu gösterir. Bu iletişim kutusunun pdf açmasına izin vermeliyiz.

Bu şekilde oluşturulan e-posta şöyle görünecek

Özet:

  • TestNG, içinde yerleşik bir raporlama yeteneğine sahiptir.
  • Test olaylarının tam olarak yürütülmesinden sonra TestNG, projenin kök dizininde bir test çıktı klasörü oluşturur.
  • Test-output klasöründe iki ana rapor vardır: index.html ve emailable-report.html.
  • TestNG raporunu özelleştirmek için ITestListener ve IReporter olmak üzere iki arayüz uygulamamız gerekir.
  • Yürütme arasında bir rapor almamız gerekirse, ITestListener'a ihtiyacımız var.
  • Tamamen yürütmeden sonra nihai bir rapor oluşturmak için IReporter uygulamamız gerekir.
  • Ekran görüntüsünü alarak, Selenium WebDriver'da, TakesScreenShot arayüzüne cast WebDriver yazmamız gerekiyor.
  • Pdf raporları oluşturmak için projeye IText jar eklememiz gerekir.

Bu Öğreticide Demo için Selenium Proje Dosyalarını İndirin