Ö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.

TestNG Raporlama

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.

TestNG Raporlama

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:

özelleştirmek TestNG Report

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.

ITestListener Arayüzü

İş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.

ITestListener Arayüzü

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:

ITestListener Arayüzü

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:

IReporter Arayüzü

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

  1. PDF biçiminde Özel Rapor Oluşturun
  2. SADECE Hatalarda Ekran Görüntüsü Alın. PDF'deki ekran görüntülerine bağlantı
  3. PDF'in E-postasını Gönder

PDF raporu şuna benzer

Raporların PDF ve E-postası

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

Raporların PDF ve E-postası

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

Raporların PDF ve E-postası

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.

Raporların PDF ve E-postası

Bu şekilde oluşturulan e-posta şu şekilde görünecektir

Raporların PDF ve E-postası

Ö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ı