ปรับแต่ง PDF และอีเมล์ TestNG รายงานใน Selenium ไดรเวอร์เว็บ

ก่อนที่เราจะพิจารณาสิ่งอื่นใด เรามาทำความเข้าใจกันก่อนว่า –

ทำไมเราจึงต้องมีการรายงาน?

เมื่อเราใช้ Selenium หรือเครื่องมืออัตโนมัติอื่น ๆ เรากำลังดำเนินการกับแอปพลิเคชันบนเว็บ แต่จุดประสงค์ของเราในการทำงานอัตโนมัติไม่ได้มีเพียงการทดสอบแอปพลิเคชันที่อยู่ระหว่างการทดสอบเท่านั้น เราในฐานะผู้ทดสอบการทำงานอัตโนมัติควรทดสอบแอปพลิเคชัน ค้นหาจุดบกพร่อง และรายงานให้ทีมพัฒนาหรือผู้บริหารระดับสูงทราบ ในกรณีนี้ การรายงานมีความสำคัญสำหรับซอฟต์แวร์ การทดสอบ กระบวนการ

TestNG การรายงาน

TestNG ไลบรารี่มีคุณสมบัติการรายงานที่มีประโยชน์มาก หลังจากการประหารชีวิต ทดสอบ จะสร้างโฟลเดอร์ทดสอบเอาต์พุตที่รูทของโปรเจ็กต์ โฟลเดอร์นี้ประกอบด้วยรายงานสองประเภท-

ดัชนี.html: นี่คือรายงานฉบับสมบูรณ์ของการดำเนินการปัจจุบัน ซึ่งประกอบด้วยข้อมูล เช่น ข้อผิดพลาด กลุ่ม เวลา บันทึกของผู้รายงาน ไฟล์ XML การทดสอบ

TestNG การรายงาน

รายงานทางอีเมล.html: นี่คือรายงานสรุปการดำเนินการทดสอบปัจจุบันซึ่งประกอบด้วย กรณีทดสอบ ข้อความสีเขียว (สำหรับกรณีการทดสอบที่ผ่าน) และสีแดง (สำหรับกรณีการทดสอบที่ล้มเหลว)

TestNG การรายงาน

วิธีปรับแต่ง TestNG การรับรอง

TestNG การรายงานค่อนข้างสะดวก แต่บางครั้งเราต้องการข้อมูลในรายงานน้อยลง หรือต้องการแสดงรายงานในรูปแบบอื่น เช่น pdf, excel ฯลฯ หรือต้องการเปลี่ยนเค้าโครงของรายงาน

มีสองวิธีที่เราสามารถปรับแต่งได้ TestNG รายงาน

  • การใช้อินเทอร์เฟซ ITestListener:
  • การใช้อินเทอร์เฟซ IReporter:

ปรับแต่ง TestNG การรับรอง

อินเทอร์เฟซ ITestListener

เราใช้อินเทอร์เฟซนี้เมื่อเราต้องการปรับแต่งรายงานแบบเรียลไทม์ กล่าวอีกนัยหนึ่ง หากเรากำลังดำเนินการกรณีทดสอบจำนวนมากในชุด TetNG และเราต้องการได้รับรายงานของกรณีทดสอบแต่ละกรณี หลังจากแต่ละกรณีทดสอบ เราจำเป็นต้องใช้อินเทอร์เฟซ ITestListener อินเทอร์เฟซนี้จะแทนที่เมธอด onTestFailure, onTestStart, onTestSkipped เพื่อส่งสถานะที่ถูกต้องของกรณีการทดสอบปัจจุบัน

อินเทอร์เฟซ ITestListener

นี่คือขั้นตอนที่เราจะปฏิบัติตาม

  • สร้างคลาสพูดว่า RealGuru99Report และใช้ iTestListener ในนั้น
  • ใช้วิธีการของ iTestListener
  • สร้างวิธีทดสอบและเพิ่มคลาส RealGuru99Report เป็นผู้ฟังในคลาส Test Method

อินเทอร์เฟซ ITestListener

ตัวอย่างรหัส

RealGuru99TimeReport.java เป็นคลาสการรายงานตามเวลาจริง จะใช้อินเทอร์เฟซ ITestListener สำหรับการรายงาน

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 เป็นกรณีทดสอบสำหรับรายงานจริง

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(){

        

    }

}

ผลลัพธ์จะมีลักษณะดังนี้-

อินเทอร์เฟซ ITestListener

อินเทอร์เฟซ IReporter

หากเราต้องการปรับแต่งรายงานการทดสอบขั้นสุดท้ายที่สร้างโดย TestNGเราจำเป็นต้องใช้อินเทอร์เฟซ IReporter อินเทอร์เฟซนี้มีเพียงวิธีเดียวเท่านั้นในการใช้ GenerateReport วิธีนี้มีข้อมูลทั้งหมดของการดำเนินการทดสอบที่สมบูรณ์ในรายการ และเราสามารถสร้างรายงานโดยใช้มันได้

ตัวอย่างรหัส

Guru99Reporter.java เป็นไฟล์ที่ใช้ปรับแต่งรายงาน

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 เป็นการสาธิตสำหรับการรายงานแบบกำหนดเอง

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);

    }

}

ผลลัพธ์จะเป็นเช่น-

อินเทอร์เฟซ IReporter

รายงาน PDF และอีเมล์

การใช้รายงานข้างต้นค่อนข้างง่ายและชัดเจนในการเริ่มต้นปรับแต่งรายงาน

แต่ในสภาพแวดล้อมขององค์กร คุณจะต้องสร้างรายงานที่ปรับแต่งได้สูง นี่คือสถานการณ์ที่เราจะเผชิญ

  1. สร้างรายงานที่กำหนดเองในรูปแบบ PDF
  2. จับภาพหน้าจอเฉพาะเมื่อมีข้อผิดพลาด ลิงก์ไปยังภาพหน้าจอในรูปแบบ PDF
  3. ส่งอีเมล์ของไฟล์ PDF

รายงาน PDF มีลักษณะเช่นนี้

รายงาน PDF และอีเมล์

ในการสร้างรายงาน PDF เราจำเป็นต้องมี Java API ไอเท็กซ์. ดาวน์โหลดได้ Good Farm Animal Welfare Awards - มีคลาส Listener แบบกำหนดเองอีกคลาสหนึ่งซึ่งใช้งาน IText jar นี้จริง ๆ และสร้างรายงาน PDF สำหรับเรา ดาวน์โหลดได้ Good Farm Animal Welfare Awards

รูปด้านบนแสดงรูปแบบเริ่มต้นของรายงาน PDF ที่สร้างขึ้น คุณสามารถปรับแต่งมันได้

นี่คือวิธีที่เราจะเข้าใกล้สิ่งนี้

ขั้นตอนที่ 1) สร้างคลาสพื้นฐาน

ขั้นตอนที่ 2) ปรับแต่ง JypersionListernerJava (รหัสสร้าง PDF)

ขั้นตอนที่ 3) สร้าง TestGuru99PDFEmail.java ซึ่งจะดำเนินการทดสอบกรณี สร้าง PDF

ขั้นตอนที่ 4) เพิ่มโค้ดลงใน TestGuru99PDFEmail.java เพื่อส่งรายงาน PDF ทางอีเมล

มาดูขั้นตอนเหล่านี้กันดีกว่า

ขั้นตอนที่ 1) สร้างคลาสพื้นฐาน

คลาสพื้นฐานนี้มีฟังก์ชันในการสร้าง WebDriver และถ่ายภาพหน้าจอ

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);

            

    }

}

ขั้นตอนที่ 2) ปรับแต่ง JypersionListener.java

เราจะใช้รูปแบบรายงานเริ่มต้นต่อไป แต่เราจะทำการปรับแต่ง 2 อย่าง

  • การเพิ่มโค้ดเพื่อสั่งให้ JypersionListener จับภาพหน้าจอเมื่อมีข้อผิดพลาด
  • การแนบลิงก์ของภาพหน้าจอจะนำไปใช้ในรายงาน PDF

รายงาน PDF และอีเมล์

เพิ่มโค้ดเพื่อแนบภาพหน้าจอลงในรายงาน PDF

รายงาน PDF และอีเมล์

ขั้นตอนที่ 3) สร้าง TestGuru99PDFEmail.java ซึ่งจะดำเนินการทดสอบกรณี สร้าง PDF

  • ที่นี่เราจะเพิ่ม JyperionListener.class เป็นผู้ฟัง
  • เราจะดำเนินการกรณีทดสอบ 3 กรณี
  • การใช้ Assert.assertTrue เราจะล้มเหลว 2 กรณีทดสอบในขณะที่ผ่านเพียงกรณีเดียว
  • ภาพหน้าจอจะถูกถ่ายสำหรับกรณีทดสอบที่ล้มเหลวตามการปรับแต่งของเราเท่านั้น
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("https://demo.guru99.com");

        Assert.assertTrue(true);

    }

ขั้นตอนที่ 4) เพิ่มโค้ดลงใน TestGuru99PDFEmail.java เพื่อส่งรายงาน PDF ทางอีเมล

  • เราจะใช้คำอธิบายประกอบ @AfterSuite เพื่อส่งรายงาน PDF ทางอีเมล
  • เราจะส่งอีเมลโดยใช้ Gmail
  • หากต้องการเปิดใช้งานอีเมล จำเป็นต้องนำเข้าไฟล์ไลบรารีจำนวนมาก เช่น mail.jar, pop3.jar, smptp.jar เป็นต้น
  • ก่อนที่คุณจะดำเนินการนี้ โปรดป้อนที่อยู่อีเมลจาก ถึง และรหัสผ่าน
 //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();

}

}

}

ดาวน์โหลดโครงการฉบับเต็มได้ที่นี่

หมายเหตุ: เมื่อเราคลิกลิงก์ภาพหน้าจอในรูปแบบ pdf มันจะแสดงกล่องโต้ตอบความปลอดภัย เราต้องอนุญาตให้กล่องโต้ตอบนี้เปิด pdf

รายงาน PDF และอีเมล์

อีเมลที่สร้างขึ้นจะมีลักษณะดังนี้

รายงาน PDF และอีเมล์

สรุป

  • TestNG มีความสามารถในการรายงานในตัว
  • หลังจากดำเนินการกรณีทดสอบเสร็จสมบูรณ์ TestNG สร้างโฟลเดอร์ทดสอบเอาต์พุตในรูทของโปรเจ็กต์
  • ในโฟลเดอร์ผลลัพธ์การทดสอบมีรายงานหลัก 2 รายงานคือ index.html และ emailable-report.html
  • เพื่อปรับแต่ง TestNG รายงาน เราจำเป็นต้องใช้สองอินเทอร์เฟซ ITestListener และ IReporter
  • หากเราต้องการรับรายงานระหว่างการดำเนินการ เราจำเป็นต้องมี ITestListener
  • สำหรับการสร้างรายงานขั้นสุดท้ายหลังจากดำเนินการเสร็จสิ้นแล้ว เราจำเป็นต้องใช้ IReporter
  • กำลังจับภาพหน้าจอ ใน Selenium WebDriver เราต้องพิมพ์ Cast WebDriver ไปยังอินเทอร์เฟซ TakesScreenShot
  • ในการสร้างรายงาน PDF เราจำเป็นต้องเพิ่ม IText jar ในโปรเจ็กต์

ดาวน์โหลด Selenium ไฟล์โครงการสำหรับการสาธิตในบทช่วยสอนนี้