Tùy chỉnh, PDF & Kiểm tra email Báo cáoNG trong Selenium WebDriver

Trước khi xem xét bất kỳ điều gì khác, trước tiên chúng ta hãy hiểu -

Tại sao chúng ta cần báo cáo?

Khi chúng tôi đang sử dụng Selenium hoặc bất kỳ công cụ tự động hóa nào khác, chúng tôi đang thực hiện các hoạt động trên ứng dụng web. Nhưng mục đích tự động hóa của chúng tôi không chỉ để thực hiện Ứng dụng Đang được Thử nghiệm. Chúng tôi, với tư cách là người kiểm tra tự động hóa có nhiệm vụ kiểm tra ứng dụng, tìm lỗi và báo cáo nó cho nhóm phát triển hoặc cấp quản lý cao hơn. Ở đây, báo cáo có tầm quan trọng đối với quy trình Kiểm thử phần mềm

Báo cáo TestNG

Thư viện TestNG cung cấp một tính năng báo cáo rất tiện dụng. Sau khi thực thi, Testng sẽ tạo một thư mục đầu ra thử nghiệm ở thư mục gốc của dự án. Thư mục này chứa hai loại Báo cáo-

Index.html: Đây là báo cáo hoàn chỉnh về quá trình thực thi hiện tại chứa thông tin như lỗi, nhóm, thời gian, nhật ký báo cáo, tệp XML testng.

em sẵn sàng-report.html: Đây là báo cáo tóm tắt về quá trình thực thi thử nghiệm hiện tại chứa thông báo Test Case màu xanh lá cây (đối với các trường hợp thử nghiệm đạt) và đánh dấu màu đỏ (đối với các trường hợp thử nghiệm không thành công).

Cách tùy chỉnh Báo cáo TestNG

Báo cáo TestNG khá tiện dụng nhưng đôi khi chúng ta cần ít dữ liệu hơn trong báo cáo hoặc muốn hiển thị báo cáo ở một số định dạng khác như pdf, excel, v.v. hoặc muốn thay đổi bố cục của báo cáo.

Có hai cách để chúng tôi có thể tùy chỉnh báo cáo TestNG

  • Sử dụng Giao diện ITestListener:
  • Sử dụng Giao diện IReporter:

Giao diện ITestListener

Chúng tôi sử dụng giao diện này khi chúng tôi cần tùy chỉnh báo cáo thời gian thực. Nói cách khác, nếu chúng ta đang thực hiện một loạt các trường hợp thử nghiệm trong một bộ TetNG và chúng tôi muốn nhận báo cáo của từng trường hợp thử nghiệm, thì sau mỗi trường hợp thử nghiệm, chúng ta cần triển khai giao diện ITestListener. Giao diện này sẽ ghi đè phương thức onTestFailure, onTestStart, onTestSkipped để gửi trạng thái chính xác của trường hợp thử nghiệm hiện tại.

Dưới đây là các bước chúng tôi sẽ làm theo

  • Tạo một lớp nói rằng RealGuru99Report và triển khai iTestListener trong đó.
  • Triển khai các phương thức của iTestListener
  • Tạo phương thức kiểm tra và thêm lớp RealGuru99Report làm trình nghe trong lớp Phương pháp kiểm tra.

Ví dụ về mã

RealGuru99TimeReport.java là lớp báo cáo thời gian thực. Nó sẽ triển khai giao diện ITestListener để báo cáo

gói testNGReport.realTimeReport;nhập org.testng.ITestContext;nhập org.testng.ITestListener;nhập org.testng.ITestResult;public class RealGuru99TimeReport triển khai ITestListener {@Ghi đèpublic void onStart (ITestContext arg0) {System.out.println ("Bắt đầu Thực hiện (KIỂM TRA) ->" + arg0.getName ());}@Ghi đèpublic void onTestStart (ITestResult arg0) {System.out.println ("Đã bắt đầu kiểm tra ->" + arg0.getName ());}@Ghi đèpublic void onTestSuccess (ITestResult arg0) {System.out.println ("Test Pass ->" + arg0.getName ());}@Ghi đèpublic void onTestFailure (ITestResult arg0) {System.out.println ("Kiểm tra Không thành công ->" + arg0.getName ());}@Ghi đèpublic void onTestSkipped (ITestResult arg0) {System.out.println ("Đã bỏ qua thử nghiệm ->" + arg0.getName ());}@Ghi đèpublic void onFinish (ITestContext arg0) {System.out.println ("KẾT THÚC THỰC HIỆN (KIỂM TRA) ->" + arg0.getName ());}@Ghi đèpublic void onTestFailedButWithinSuccessPercentage (ITestResult arg0) {// VIỆC CẦN LÀM Sơ khai phương thức được tạo tự động}}

TestGuru99RealReport.java là trường hợp thử nghiệm cho báo cáo thực

gói testNGReport.realTimeReport;nhập khẩu org.testng.Assert;nhập org.testng.annotations.Listists;nhập org.testng.annotations.Test;@Listists (RealGuru99TimeReport.class)lớp công khai TestGuru99RealReport {@Kiểm trapublic void testRealReportOne () {Assert.assertTrue (true);}@Kiểm trapublic void testRealReportTwo () {Assert.assertTrue (sai);}// Trường hợp thử nghiệm phụ thuộc vào testcase không thành công = testRealReportTwo@Test (dependOnMethods = "testRealReportTwo")public void testRealReportThree () {}}

Đầu ra sẽ giống như-

Giao diện IReporter

Nếu chúng tôi muốn tùy chỉnh báo cáo kiểm tra cuối cùng được tạo bởi TestNG, chúng tôi cần triển khai giao diện IReporter. Giao diện này chỉ có một phương thức để triển khai createReport. Phương pháp này có tất cả thông tin của một quá trình thực thi thử nghiệm hoàn chỉnh trong Danh sách và chúng tôi có thể tạo báo cáo bằng cách sử dụng nó.

Ví dụ về mã

Guru99Reporter.java là tệp được sử dụng để tùy chỉnh báo cáo

gói testNGReport.iReporterReport;nhập java.util.Collection;nhập java.util.Date;nhập java.util.List;nhập java.util.Map;nhập java.util.Set;nhập khẩu org.testng.IReporter;nhập org.testng.IResultMap;nhập org.testng.ISuite;nhập org.testng.ISuiteResult;nhập org.testng.ITestContext;nhập org.testng.ITestNGMethod;nhập org.testng.xml.XmlSuite;public class Guru99Reporter triển khai IReporter {@Ghi đèpublic void createReport (List  arg0, List  arg1,Chuỗi đầu raDirectory) {// Tham số thứ hai của phương thức này ISuite sẽ chứa tất cả các bộ được thực thi.cho (ISuite iSuite: arg1) {// Nhận bản đồ kết quả của một bộ duy nhất tại một thời điểmBản đồ  results = iSuite.getResults ();// Lấy khóa của bản đồ kết quảĐặt các khóa  = results.keySet ();// Đi đến từng giá trị bản đồ mộtfor (Khóa chuỗi: các phím) {// Đối tượng ngữ cảnh của kết quả hiện tạiITestContext context = results.get (key) .getTestContext ();// In chi tiết Suite trong Bảng điều khiểnSystem.out.println ("Tên Suite ->" + context.getName ()+ ":: Kết quả báo cáo Ditectory ->" + context.getOutputDirectory ()+ ":: Tên bộ ->" + context.getSuite (). GetName ()+ ":: Ngày bắt đầu Giờ thực thi ->" + context.getStartDate ()+ ":: Ngày kết thúc Thời gian thực hiện ->" + context.getEndDate ());// Nhận Bản đồ chỉ cho các trường hợp thử nghiệm không thành côngIResultMap resultMap = context.getFailedTests ();// Lấy chi tiết phương thức của các trường hợp thử nghiệm không thành côngBộ sưu tập  failMethods = resultMap.getAllMethods ();// Lặp lại từng cái một trong tất cả các phương thức không thành côngSystem.out.println ("-------- TRƯỜNG HỢP KIỂM TRA THẤT BẠI ---------");cho (ITestNGMethod iTestNGMethod: failMethods) {// In chi tiết các trường hợp thử nghiệm không thành côngSystem.out.println ("TÊN TESTCASE ->" + iTestNGMethod.getMethodName ()+ "\ nDescription ->" + iTestNGMethod.getDescription ()+ "\ nPosystem ->" + iTestNGMethod.getPinent ()+ "\ n: Ngày ->" + Ngày mới (iTestNGMethod.getDate ()));}}}}}

TestGuru99ForReporter.java là một bản demo cho Báo cáo tùy chỉnh

gói testNGReport.iReporterReport;nhập khẩu org.testng.Assert;nhập org.testng.annotations.Listists;nhập org.testng.annotations.Test;// Thêm người nghe để nghe báo cáo và viết nó khi testcas kết thúc@Listists (value = Guru99Reporter.class)lớp công khai TestGuru99ForReporter {@Test (ưu tiên = 0, mô tả = "testReporterOne")public void testReporterOne () {// Vượt qua trường hợp kiểm traAssert.assertTrue (true);}@Test (ưu tiên = 1, mô tả = "testReporterTwo")public void testReporterTwo () {// Trường hợp kiểm tra thất bạiAssert.assertTrue (sai);}}

Đầu ra sẽ như-

PDF và Email của Báo cáo

Việc triển khai báo cáo ở trên khá đơn giản và rõ ràng để giúp bạn bắt đầu với việc tùy chỉnh báo cáo.

Nhưng trong môi trường doanh nghiệp, bạn sẽ cần tạo các báo cáo có tính tùy chỉnh cao. Đây là tình huống chúng ta sẽ giải quyết

  1. Tạo báo cáo tùy chỉnh ở dạng PDF
  2. CHỈ Chụp ảnh màn hình khi có lỗi. Liên kết đến ảnh chụp màn hình trong PDF
  3. Gửi email của PDF

Báo cáo PDF trông như thế này

Để tạo báo cáo pdf chúng ta cần một Java API iText . Tải về tại đây . Có một lớp trình nghe tùy chỉnh khác đang thực sự triển khai jar IText này và tạo báo cáo pdf cho chúng tôi. Tải về tại đây

Hình trên cho thấy định dạng mặc định của báo cáo PDF được tạo. Bạn có thể tùy chỉnh nó

Đây là cách chúng tôi sẽ tiếp cận vấn đề này

Bước 1) Tạo một lớp cơ sở

Bước 2) Tùy chỉnh JypersionListerner.Java (mã tạo PDF)

Bước 3) Tạo TestGuru99PDFEmail.java sẽ thực thi các trường hợp thử nghiệm, tạo PDF

Bước 4) Nối mã vào TestGuru99PDFEmail.java để gửi báo cáo PDF qua email

Hãy xem xét các bước này

Bước 1) Tạo lớp cơ sở

Lớp cơ sở này có các chức năng tạo WebDriver và Chụp ảnh màn hình

gói PDFEmail;nhập java.io.File;nhập org.apache.commons.io.FileUtils;nhập org.openqa.selenium.OutputType;nhập org.openqa.selenium.TakesScreenshot;nhập org.openqa.selenium.WebDriver;nhập org.openqa.selenium.firefox.FirefoxDriver;lớp công khai BaseClass {trình điều khiển WebDriver tĩnh;public static WebDriver getDriver () {if (driver == null) {Trình điều khiển WebDriver;System.setProperty ("webdriver.gecko.driver", "C: \\ geckodriver.exe");driver = new FirefoxDriver ();}lái xe trả lại;}/ *** Chức năng này sẽ chụp ảnh màn hình* @param webdriver* @param fileWithPath* Ngoại lệ @throws* /public static void takeSnapShot (WebDriver webdriver, String fileWithPath) ném Exception {// Chuyển đổi đối tượng trình điều khiển web thành TakeScreenshotTakesScreenshot scrShot = ((TakesScreenshot) webdriver);// Gọi phương thức getScreenshotAs để tạo tệp hình ảnhTệp SrcFile = scrShot.getScreenshotAs (OutputType.FILE);// Di chuyển tệp hình ảnh đến đích mớiFile DestFile = new File (fileWithPath);// Sao chép tệp tại điểm đếnFileUtils.copyFile (SrcFile, DestFile);}}

Bước 2) Tùy chỉnh JypersionListener.java

Chúng tôi sẽ gắn bó với định dạng báo cáo mặc định. Nhưng chúng tôi sẽ thực hiện 2 tùy chỉnh

  • Thêm mã để hướng dẫn JypersionListener chụp ảnh màn hình trên Lỗi
  • Đính kèm liên kết của ảnh chụp màn hình trong báo cáo PDF

Thêm mã để đính kèm ảnh chụp màn hình vào báo cáo PDF

Bước 3) Tạo TestGuru99PDFEmail.java sẽ thực thi các trường hợp thử nghiệm, tạo PDF

  • Ở đây chúng tôi sẽ thêm JyperionListener.class làm trình nghe
  • Chúng tôi sẽ thực hiện 3 trường hợp thử nghiệm.
  • Sử dụng Assert.assertTrue, chúng ta sẽ thất bại 2 trường hợp thử nghiệm trong khi chỉ vượt qua một trường hợp.
  • Ảnh chụp màn hình sẽ chỉ được thực hiện cho các trường hợp thử nghiệm không thành công theo các tùy chỉnh của chúng tôi
gói PDFEmail;nhập java.util.Properties;nhập javax.activation.DataHandler;nhập javax.activation.DataSource;nhập javax.activation.FileDataSource;nhập javax.mail.BodyPart;nhập javax.mail.Message;nhập javax.mail.MessagingException;nhập javax.mail.Multipart;nhập javax.mail.Session;nhập javax.mail.Transport;nhập javax.mail.internet.AddressException;nhập javax.mail.internet.InternetAddress;nhập javax.mail.internet.MimeBodyPart;nhập javax.mail.internet.MimeMessage;nhập javax.mail.internet.MimeMultipart;nhập org.openqa.selenium.WebDriver;nhập khẩu org.testng.Assert;nhập org.testng.annotations.AfterSuite;nhập org.testng.annotations.Listists;nhập org.testng.annotations.Test;báo cáo nhập khẩu.JyperionListener;// Thêm trình nghe để tạo báo cáo pdf@Listists (JyperionListener.class)public class TestGuru99PDFReport mở rộng BaseClass {Trình điều khiển WebDriver;// Testcase không thành công nên tạo ảnh chụp màn hình@Kiểm trapublic void testPDFReportOne () {trình điều khiển = BaseClass.getDriver ();driver.get ("http://google.com");Assert.assertTrue (sai);}// Testcase không thành công nên tạo ảnh chụp màn hình@Kiểm trapublic void testPDFReporTwo () {trình điều khiển = BaseClass.getDriver ();driver.get ("http: /guru99.com");Assert.assertTrue (sai);}// Trường hợp kiểm tra thử nghiệm sẽ được thông qua, vì vậy không có ảnh chụp màn hình trên đó@Kiểm trapublic void testPDFReportThree () {trình điều khiển = BaseClass.getDriver ();driver.get ("http://demo.guru99.com");Assert.assertTrue (true);}

Bước 4) Nối mã vào TestGuru99PDFEmail.java để gửi báo cáo PDF qua email

  • Chúng tôi sẽ sử dụng chú thích @AfterSuite để gửi email báo cáo PDF
  • Chúng tôi sẽ gửi email bằng Gmail
  • Để bật Email, cần nhập nhiều tệp thư viện như mail.jar, pop3.jar, smptp.jar, v.v.
  • Trước khi bạn thực hiện điều này, hãy nhập địa chỉ email và mật khẩu từ, tới
 // Sau khi thực hiện xong, gửi báo cáo pdf qua email@AfterSuitekhoảng trống công cộng ráchDown () {sendPDFReportByGMail (" Địa chỉ email này đang được bảo vệ khỏi spam bots. Bạn cần bật Javascript để xem nó.", "password", "Địa chỉ email này đã được bảo vệ từ spam bots. Bạn cần bật Javascript để xem nó. "," Báo cáo PDF "," ");} / ** * Gửi email bằng java * @param từ * @param pass * @param tới * @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 "); Phiên phiên = Session.getDefaultInstance (đạo cụ); MimeMessage message = new MimeMessage (phiên);try {// Đặt từ địa chỉ message.setFrom (new InternetAddress (from)); message.addRecipient (Message.RecipientType.TO, InternetAddress mới (to)); // Đặt chủ đề message.setSubject (chủ đề); message.setText (body); BodyPart objMessageBodyPart = new MimeBodyPart (); objMessageBodyPart.setText ("Vui lòng Tìm Tệp Báo cáo Đính kèm!"); Multipart Multiart = new MimeMultipart (); multiart.addBodyPart (objMessageBodyPart); objMessageBodyPart = new MimeBodyPart (); // Đặt đường dẫn đến tệp báo cáo pdf String filename = System.getProperty ("user.dir") + "\\ Default test.pdf"; // Tạo nguồn dữ liệu để đính kèm tệp trong mail DataSource source = new FileDataSource (filename); objMessageBodyPart.setDataHandler (DataHandler mới (nguồn)); objMessageBodyPart.setFileName (tên tệp); multiart.addBodyPart (objMessageBodyPart); thông điệp.setContent (nhiều phần); Giao thông vận tải = session.getTransport ("smtp"); Transport.connect (host, from, pass); transport.sendMessage (tin nhắn, message.getAllRecipient ()); vận tải.close (); } catch (AddressException ae) {ae.printStackTrace (); } catch (MessagingException me) {me.printStackTrace (); }}}

Tải toàn bộ dự án tại đây

Lưu ý: Khi chúng ta nhấp vào liên kết ảnh chụp màn hình trong pdf, nó sẽ hiển thị hộp thoại bảo mật. Chúng tôi phải cho phép hộp thoại này mở pdf.

Email được tạo sẽ trông như thế này

Tóm lược:

  • TestNG có khả năng báo cáo sẵn có trong đó.
  • Sau khi thực hiện đầy đủ các trường hợp thử nghiệm, TestNG tạo một thư mục đầu ra thử nghiệm trong thư mục gốc của dự án.
  • Trong thư mục đầu ra thử nghiệm, có hai báo cáo chính, index.html và em sẵn sàng-report.html.
  • Để tùy chỉnh báo cáo TestNG, chúng tôi cần triển khai hai giao diện, ITestListener và IReporter.
  • Nếu chúng ta cần nhận một báo cáo giữa quá trình thực thi, chúng ta cần ITestListener.
  • Để tạo báo cáo cuối cùng sau khi thực hiện hoàn tất, chúng ta cần triển khai IReporter.
  • Chụp ảnh màn hình, trong Selenium WebDriver, chúng ta cần gõ truyền WebDriver sang giao diện TakesScreenShot.
  • Để tạo báo cáo pdf, chúng tôi cần thêm jar IText trong dự án.

Tải xuống Tệp dự án Selenium cho Demo trong Hướng dẫn này

thú vị bài viết...