Özelleştir, PDF ve E-posta TestNG Içindeki raporlar Selenium Web Sürücüsü
Başka bir şeye bakmadan önce şunu anlayalım:
Neden raporlamaya ihtiyacımız var?
Kullandığımız zaman Selenium veya herhangi bir otomasyon aracı üzerinden web uygulaması üzerinden işlem gerçekleştiriyoruz. Ancak otomasyon amacımız yalnızca Test Edilen Uygulamayı uygulamak değildir. Otomasyon test uzmanı olarak uygulamayı test etmemiz, hataları bulmamız ve bunları geliştirme ekibine veya üst yönetime bildirmemiz gerekiyor. Burada raporlama yazılım açısından önem kazanıyor Test yapmak süreç
TestNG Raporlama
TestNG kütüphane çok kullanışlı bir raporlama özelliği sağlar. İnfazdan sonra, Test projenin kökünde bir test çıktısı klasörü oluşturacaktır. Bu klasör iki tür Rapor içerir:
Index.html: Bu, hata, gruplar, zaman, raporlayıcı günlükleri, XML dosyalarını test etme gibi bilgileri içeren mevcut yürütmenin tam raporudur.
e-postayla-gönderilebilir-rapor.html: Bu, mevcut test uygulamasının özet raporudur ve aşağıdakileri içerir: Test Durumu yeşil (başarılı test senaryoları için) ve kırmızı (başarısız test senaryoları için) mesaj vurgulanır.
Nasıl özelleştirilir? TestNG Report
TestNG raporlama oldukça kullanışlıdır ancak yine de bazen raporlarda daha az veriye ihtiyaç duyarız veya raporları pdf, excel vb. başka formatlarda görüntülemek veya raporun düzenini değiştirmek isteriz.
Özelleştirmemizin iki yolu olabilir TestNG rapor
- 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ırız. Başka bir deyişle, bir TetNG paketinde çok sayıda test senaryosu yürütüyorsak ve her test senaryosunun raporunu almak istiyorsak, her test senaryosundan sonra ITestListener arayüzünü uygulamamız gerekir. Bu arayüz, mevcut test senaryosunun doğru durumunu göndermek için onTestFailure, onTestStart, onTestSkipped yöntemini geçersiz kılacaktır.
İşte izleyeceğimiz adımlar
- RealGuru99Report diyen bir sınıf oluşturun ve içinde iTestListener'ı uygulayın.
- iTestListener 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ü uygulayacak
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 gerçek rapor için test senaryosudur
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(){ } }
Çıktı şöyle görünecek:
IReporter Arayüzü
tarafından oluşturulan son test raporunu özelleştirmek istiyorsak TestNGIReporter arayüzünü uygulamamız gerekiyor. Bu arayüzün createdReport'u uygulamak için tek bir yöntemi vardır. Bu yöntem, Listede tam bir test yürütmesinin tüm bilgilerine sahiptir. ve bunu kullanarak raporu oluşturabiliriz.
Kod Örneği
Guru99Reporter.java raporu özelleştirmek için kullanılan dosyadır
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, Özel raporlamaya yönelik bir demodur
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); } }
Çıktı şöyle olacak:
Raporların PDF 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 son derece özelleştirilmiş raporlar oluşturmanız gerekecektir. İşte ele alacağımız senaryo
- PDF biçiminde Özel Rapor Oluşturun
- SADECE Hatalarda Ekran Görüntüsü Alın. PDF'deki ekran görüntülerine bağlantı
- PDF'in E-postasını Gönder
PDF raporu şuna benzer
Pdf raporu oluşturmak için bir ihtiyacımız var Java API IMetin. İndir okuyun . Bu IText jar'ını uygulayan ve bizim için bir pdf raporu oluşturan başka bir özel dinleyici sınıfı daha var. İndir okuyun
Yukarıdaki şekilde oluşturulan PDF raporunun varsayılan formatı gösterilmektedir. Bunu özelleştirebilirsiniz
İşte buna nasıl yaklaşacağız
Adım 1) Temel Sınıf Oluşturun
Adım 2) JypersionListerner'ı özelleştirin.Java (PDF oluşturma kodu)
Adım 3) Test vakalarını yürütecek ve PDF oluşturacak bir TestGuru99PDFEmail.java oluşturun
Adım 4) PDF raporunu e-posta yoluyla 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ıfta WebDriver oluşturma ve Ekran Görüntüsü Alma işlevleri bulunur
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); } }
Adım 2) JypersionListener.java'yı özelleştirin
Varsayılan rapor formatına sadık kalacağız. Ancak 2 özelleştirme yapacağız
- JypersionListener'a Hata durumunda ekran görüntüsü alması talimatını verecek kod ekleme
- Ekran görüntüsü bağlantısının PDF raporuna eklenmesi
Ekran görüntüsünü PDF raporuna eklemek için kod ekleyin
Adım 3) Test vakalarını yürütecek ve PDF oluşturacak bir TestGuru99PDFEmail.java oluşturun
- Burada JyperionListener.class'ı dinleyici olarak ekleyeceğiz
- 3 test senaryosu yürüteceğiz.
- Assert.assertTrue'yu kullanarak yalnızca birini geçerken 2 test senaryosunda başarısız olacağız.
- Başarısız olan test senaryoları için yalnızca özelleştirmelerimize göre ekran görüntüsü alınacaktır.
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); }
Adım 4) PDF raporunu e-posta yoluyla göndermek için TestGuru99PDFEmail.java'ya kod ekleyin
- PDF raporunun e-postaya gönderilmesi için @AfterSuite açıklamasını kullanacağız
- Gmail kullanarak e-posta göndereceğiz
- E-postayı etkinleştirmek için mail.jar, pop3.jar, smptp.jar gibi birçok kütüphane dosyasını içe aktarmanız gerekir.
- Bunu yapmadan önce, gönderen, alıcı e-posta adresini ve şifreyi girin
//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(); } } }
Projenin tamamını 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 şu şekilde görünecektir
ÖZET
- TestNG Dahili bir raporlama yeteneğine sahiptir.
- Test senaryolarının tamamen yürütülmesinden sonra, TestNG projenin kökünde bir test çıktısı klasörü oluşturur.
- Test-output klasöründe iki ana rapor vardır; index.html ve emailable-report.html.
- özelleştirmek için TestNG raporunda ITestListener ve IReporter olmak üzere iki arayüz uygulamamız gerekiyor.
- Yürütme arasında bir rapor almamız gerekiyorsa ITestListener'a ihtiyacımız var.
- Tam yürütmenin ardından nihai bir rapor oluşturmak için IReporter'ı uygulamamız gerekir.
- Ekran görüntüsünün alınması, Selenium WebDriver, TakesScreenShot arayüzüne cast WebDriver yazmamız gerekiyor.
- Pdf raporları oluşturmak için projeye IText jar'ı eklememiz gerekiyor.
Atomic Cüzdanı indirin : Selenium Bu Eğitimdeki Demoya İlişkin Proje Dosyaları