TestNG Người nghe ở Selenium

⚡ Tóm tắt thông minh

Người nghe ở Selenium WebDriver là TestNG Các giao diện chặn các sự kiện kiểm thử để tùy chỉnh nhật ký, báo cáo và các hành động sau khi xảy ra lỗi. Bài viết này giải thích các phương thức của ITestListener và hướng dẫn cách chạy một ví dụ có thể thực thi được. Java ví dụ, và làm rõ cách thức Selenium Phiên bản 4 đã thay thế WebDriverEventListener đã lỗi thời.

  • Người nghe thường làm gì: Họ đăng ký TestNG Các sự kiện như bắt đầu, đạt, thất bại và bỏ qua được sử dụng để ghi nhật ký hoặc báo cáo.
  • 🧩 Mười hai giao diện: TestNG Các giao diện của tàu như ITestListener, ISuiteListener, IReporter, IInvokedMethodListener và IAnnotationTransformer cho phép kiểm soát chi tiết hơn.
  • 🛠️ Hai chế độ đấu dây: Gắn trình lắng nghe bằng chú thích @Listeners vào một lớp duy nhất, hoặc đăng ký nó một lần trong testng.xml cho mỗi bộ kiểm thử.
  • 🚀 Selenium 4 Cập nhật: EventFiringWebDriver đã lỗi thời; giao diện WebDriverListener hiện đại cùng với EventFiringDecorator hiện đang hỗ trợ các hook sự kiện ở cấp độ WebDriver.
  • 🤖 Góc nhìn AI: Các trình lắng nghe hỗ trợ bởi AI có thể tự động phân loại lỗi, đính kèm ảnh chụp màn hình thông minh và gửi tín hiệu kiểm thử không ổn định trở lại bảng điều khiển CI trong thời gian thực.

TestNG Người nghe ở Selenium

Selenium Các tập lệnh WebDriver thường cần phản ứng với các sự kiện kiểm thử như xác nhận thành công, định vị thất bại hoặc bỏ qua một bước. Trình lắng nghe giúp điều đó trở nên khả thi. Nói chung, Selenium Các dự án dựa trên hai nhóm người nghe:

  1. Trình nghe WebDriver
  2. TestNG Người nghe

Trong hướng dẫn này, chúng tôi sẽ tập trung vào TestNG Các trình lắng nghe, kèm theo ghi chú về cách các trình lắng nghe cấp WebDriver đã thay đổi trong Selenium 4.x.

Người nghe là gì? TestNG?

Listener là một giao diện điều chỉnh hành vi mặc định của TestNGNhư tên gọi cho thấy, Người nghe “lắng nghe” các sự kiện được định nghĩa trong một Selenium Bạn sử dụng chúng bằng cách triển khai giao diện Listener tương ứng và đăng ký nó trong lớp hoặc bộ kiểm thử của mình. Listener cho phép bạn tùy chỉnh... TestNG báo cáo, đính kèm ảnh chụp màn hình và xuất nhật ký có cấu trúc.

Các loại người nghe trong TestNG

TestNG Nó cung cấp một loạt các giao diện lắng nghe, và mỗi giao diện nhắm đến một giai đoạn khác nhau của vòng đời kiểm thử.

Dưới đây là những từ ngữ thường được sử dụng. TestNG người nghe:

  1. IAnnotationTransformer
  2. IAnnotationTransformer2
  3. Có thể cấu hình được
  4. IConfigurationListener
  5. IExecutionListener
  6. IHookable
  7. IInvokedMethodListener
  8. IInvokedMethodListener2
  9. Phương thức chặn IMeod
  10. phóng viên
  11. ISuiteListener
  12. ITestListener

Các giao diện này được sử dụng trong Selenium để tạo nhật ký hoặc tùy chỉnh TestNG báo cáo. Trong hướng dẫn này, chúng ta sẽ triển khai ITestListener.

ITestListener Trình bày các phương thức sau:

  • onStart – được gọi khi bất kỳ bài kiểm tra nào bắt đầu.
  • onTestSuccess – Được gọi khi bài kiểm tra thành công.
  • khi kiểm thử thất bại – Hàm này được gọi khi quá trình kiểm tra thất bại.
  • onTestSkipped – Được gọi khi một bài kiểm tra bị bỏ qua.
  • onTestFailedButWithinSuccessPercentage – Hàm này được gọi khi một bài kiểm tra thất bại nhưng vẫn nằm trong phạm vi tỷ lệ thành công.
  • onFinish – Được gọi sau khi tất cả các bài kiểm tra trong lớp đã được thực thi.

Kịch bản thử nghiệm

Trong kịch bản thử nghiệm này, chúng ta sẽ tự động hóa quy trình đăng nhập và triển khai ITestListener chống lại nó

  1. Khởi động Firefox và mở trang web https://demo.guru99.com/V4/

Đăng nhập kịch bản kiểm thử URL

  1. Đăng nhập vào ứng dụng.

Biểu mẫu đăng nhập kịch bản kiểm thử

Các bước để tạo một TestNG Người nghe

Với kịch bản kiểm thử nêu trên, chúng ta sẽ triển khai Listener từng bước một.

Bước 1) Tạo một lớp có tên là ListenerTest mà thực hiện ITestListenerDi chuột qua phần gạch chân màu đỏ và Eclipse Tôi sẽ đề xuất hai giải pháp khắc phục nhanh chóng, như được trình bày bên dưới:

Eclipse Giải pháp nhanh chóng để thêm các phương thức chưa được triển khai

Nhấp vào “Thêm các phương thức chưa được triển khai”. Nhiều phương thức giả (không có phần thân) sẽ được thêm vào mã của bạn, tương tự như sau:

gói Listener_Demo;

nhập khẩu org.testng.ITestContext;
nhập khẩu org.testng.ITestListener;
nhập khẩu org.testng.ITestResult;

giai cấp công cộng ListenerTest thực hiện ITestListener {

@Ghi đè
khoảng trống công cộng khi hoàn thành (ITestContext arg0) {
// TODO - Tạo mẫu phương thức tự động
}

@Ghi đè
khoảng trống công cộng onStart(ITestContext arg0) {
// TODO - Tạo mẫu phương thức tự động
}

@Ghi đè
khoảng trống công cộng onTestFailedButWithinSuccessPercentage(Kết quả kiểm thử I arg0) {
// TODO - Tạo mẫu phương thức tự động
}

@Ghi đè
khoảng trống công cộng khi kiểm thử thất bại (Kết quả kiểm thử I arg0) {
// TODO - Tạo mẫu phương thức tự động
}

@Ghi đè
khoảng trống công cộng onTestSkipped(Kết quả kiểm thử I arg0) {
// TODO - Tạo mẫu phương thức tự động
}

@Ghi đè
khoảng trống công cộng onTestStart(Kết quả kiểm thử I arg0) {
// TODO - Tạo mẫu phương thức tự động
}

@Ghi đè
khoảng trống công cộng onTestSuccess(Kết quả kiểm thử I arg0) {
// TODO - Tạo mẫu phương thức tự động
}
}

Bây giờ chúng ta hãy chỉnh sửa ListenerTest lớp. Cụ thể, chúng ta sẽ điền vào các phương thức sau: khi kiểm thử thất bại, onTestSkipped, onTestStartonTestSuccess.

Thay đổi rất đơn giản: mỗi phương thức sẽ in tên của bài kiểm tra để bảng điều khiển hiển thị rõ ràng trạng thái đạt, không đạt và bỏ qua.

Sau khi chỉnh sửa, đoạn mã sẽ trông như thế này:

gói Listener_Demo;

nhập khẩu org.testng.ITestContext;
nhập khẩu org.testng.ITestListener;
nhập khẩu org.testng.ITestResult;

giai cấp công cộng ListenerTest thực hiện ITestListener {

@Ghi đè
khoảng trống công cộng khi hoàn thành (ITestContext Kết quả) {
}

@Ghi đè
khoảng trống công cộng onStart(ITestContext Kết quả) {
}

@Ghi đè
khoảng trống công cộng onTestFailedButWithinSuccessPercentage(Kết quả kiểm thử I Kết quả) {
}

// Khi một trường hợp kiểm thử thất bại, phương thức này sẽ được gọi.
@Ghi đè
khoảng trống công cộng khi kiểm thử thất bại (Kết quả kiểm thử I Kết quả) {
System.out.println(“Tên của trường hợp kiểm thử bị lỗi là: “ + Result.getName());
}

// Khi một trường hợp kiểm thử bị bỏ qua, phương thức này sẽ được gọi.
@Ghi đè
khoảng trống công cộng onTestSkipped(Kết quả kiểm thử I Kết quả) {
System.out.println(“Tên của trường hợp kiểm thử bị bỏ qua là: “ + Result.getName());
}

// Khi một trường hợp kiểm thử bắt đầu, phương thức này sẽ được gọi.
@Ghi đè
khoảng trống công cộng onTestStart(Kết quả kiểm thử I Kết quả) {
System.out.println(Result.getName() + “Trường hợp thử nghiệm đã bắt đầu”);
}

// Khi một trường hợp kiểm thử thành công, phương thức này sẽ được gọi.
@Ghi đè
khoảng trống công cộng onTestSuccess(Kết quả kiểm thử I Kết quả) {
System.out.println(“Tên của trường hợp kiểm thử đã vượt qua là: “ + Result.getName());
}
}

Bước 2) Tạo một lớp khác có tên là Các trường hợp thử nghiệm để tự động hóa quá trình đăng nhập. Selenium Lớp này sẽ được thực thi để đăng nhập vào trang web demo.

gói Listener_Demo;

nhập khẩu org.openqa.selenium.By;
nhập khẩu org.openqa.selenium.WebDriver;
nhập khẩu org.openqa.selenium.firefox.FirefoxTài xế;
nhập khẩu org.testng.Assert;
nhập khẩu org.testng.annotations.Listeners;
nhập khẩu org.testng.annotations.Test;

giai cấp công cộng Các trường hợp thử nghiệm {
webdriver người lái xe = người mới FirefoxNgười lái xe();

// Bài kiểm tra được thiết kế để vượt qua, nhằm xác minh trình lắng nghe sự kiện thành công.
@Thử nghiệm
khoảng trống công cộng Đăng nhập() {
trình điều khiển.get(“https://demo.guru99.com/V4/”);
trình điều khiển.findElement(By.name(“uid”)).sendKeys(“mngr34926”);
trình điều khiển.findElement(By.name("Mật khẩu")).sendKeys(“amUpenu”);
trình điều khiển.findElement(By.name(“btnLogin”)).click();
}

// Cố tình làm cho bài kiểm tra thất bại để xác minh trình lắng nghe lỗi.
@Thử nghiệm
khoảng trống công cộng TestToFail() {
System.out.println(“Phương pháp này dùng để kiểm tra lỗi”);
Assert.assertTrue(sai);
}
}

Bước 3) Tiếp theo, hãy gắn trình lắng nghe này vào lớp kiểm thử của chúng ta. Các trường hợp thử nghiệmCó hai cách để kết nối một lớp với giao diện trình lắng nghe.

Cách đầu tiên là sử dụng @Người nghe chú thích, như hiển thị bên dưới:

@Listeners(Listener_Demo.ListenerTest.class)

Chúng tôi thêm chú thích này ở phía trên Các trường hợp thử nghiệm lớp. Lớp đó sau đó sẽ trông như thế này:

gói Listener_Demo;

nhập khẩu org.openqa.selenium.By;
nhập khẩu org.openqa.selenium.WebDriver;
nhập khẩu org.openqa.selenium.firefox.FirefoxTài xế;
nhập khẩu org.testng.Assert;
nhập khẩu org.testng.annotations.Listeners;
nhập khẩu org.testng.annotations.Test;

@Listeners(Listener_Demo.ListenerTest.class)
giai cấp công cộng Các trường hợp thử nghiệm {
webdriver người lái xe = người mới FirefoxNgười lái xe();

// Kiểm tra xem quá trình có thành công hay không, để xác minh trình lắng nghe sự kiện thành công.
@Thử nghiệm
khoảng trống công cộng Đăng nhập() {
trình điều khiển.get(“https://demo.guru99.com/V4/”);
trình điều khiển.findElement(By.name(“uid”)).sendKeys(“mngr34926”);
trình điều khiển.findElement(By.name("Mật khẩu")).sendKeys(“amUpenu”);
trình điều khiển.findElement(By.name(“btnLogin”)).click();
}

// Cố tình làm cho bài kiểm tra thất bại để xác minh trình lắng nghe lỗi.
@Thử nghiệm
khoảng trống công cộng TestToFail() {
System.out.println(“Phương pháp này dùng để kiểm tra lỗi”);
Assert.assertTrue(sai);
}
}

Cấu trúc dự án trông giống như:

TestNG Cấu trúc dự án người nghe

Bước 4) Thực hiện Các trường hợp thử nghiệm lớp. Các phương thức bên trong ListenerTest được gọi tự động dựa trên hành vi của các phương thức được chú thích bằng @Thử nghiệm.

Bước 5) Kiểm tra lại thông tin hiển thị trên bảng điều khiển.

Đầu ra của Các trường hợp thử nghiệm giống như:

TestNG Đầu ra bảng điều khiển của người nghe

[TestNG] Đang chạy:
C:\Users\gauravn\AppData\Local\Temp\testng-eclipse–1058076918\testng-customsuite.xml

Trường hợp kiểm thử đăng nhập đã bắt đầu
Tên của trường hợp kiểm thử đã vượt qua là: Đăng nhập
Trường hợp kiểm thử TestToFail đã bắt đầu
Phương pháp này để kiểm tra lỗi
Tên của trường hợp kiểm thử thất bại là: TestToFail
ĐÃ THÀNH CÔNG: Đăng nhập
THẤT ​​BẠI: TestToFail
java.lang.AssertionError: expected [true] but found [false]

Sử dụng trình lắng nghe cho nhiều lớp

Nếu một dự án có nhiều lớp kiểm thử, việc thêm @Người nghe Việc chú thích cho từng mục sẽ trở nên rườm rà và dễ xảy ra lỗi.

Trong trường hợp đó, hãy tạo một testng.xml Lưu tệp và đăng ký trình lắng nghe ở đó một lần.

Thẻ listener trong testng.xml dành cho nhiều lớp.

Trình lắng nghe này sau đó được áp dụng cho toàn bộ bộ kiểm thử bất kể số lượng lớp. Khi bạn chạy tệp XML, trình lắng nghe sẽ được kích hoạt cho mọi lớp được khai báo trong bộ kiểm thử, và bạn có thể xích chuỗi bất kỳ số lượng lớp trình lắng nghe nào bên trong cùng một thẻ.

WebDriverListener trong Selenium 4 so với EventFiringWebDriver đã lỗi thời

Trong khi TestNG Các listener phản hồi các sự kiện vòng đời kiểm thử, trong khi các listener của WebDriver phản hồi các hành động của trình điều khiển trình duyệt như nhấp chuột, điều hướng hoặc gọi findElement. Selenium 3. Phương pháp điển hình là WebDriverEventListener giao diện được kết nối thông qua EventFiringWebDriverCả hai đều đã lỗi thời. Selenium 4.x.

Giải pháp thay thế hiện đại là... WebDriverListener giao diện kết hợp với EventFiringDecorator:

nhập khẩu org.openqa.selenium.WebDriver;
nhập khẩu org.openqa.selenium.chrome.ChromeDriver;
nhập khẩu org.openqa.selenium.support.events.EventFiringDecorator;
nhập khẩu org.openqa.selenium.support.events.WebDriverListener;

giai cấp công cộng Trình lắng nghe ghi nhật ký thực hiện WebDriverListener {
@Ghi đè
khoảng trống công cộng trước khi lấy (webdriver trình điều khiển, chuỗi URL) {
System.out.println(“Điều hướng đến” + URL);
}
}

webdriver nguyên liệu thô = người mới Trình điều khiển Chrome();
webdriver người lái xe = người mới EventFiringDecorator<>(người mới LoggingListener()).decorate(raw);

Trình trang trí có thể bao bọc bất kỳ WebDriver, WebElement hoặc Alert nào, linh hoạt hơn so với trình bao bọc kích hoạt sự kiện cũ. Sử dụng WebDriverListener để theo dõi phía trình duyệt và TestNG ITestListener để báo cáo ở cấp độ phòng ban.

Hệ thống lắng nghe được hỗ trợ bởi AI: Nhật ký thông minh hơn và phân loại lỗi hiệu quả hơn

hiện đại Selenium Các nhóm ngày càng tích hợp nhiều dịch vụ AI vào hệ thống thu thập tín hiệu của họ để biến các tín hiệu CI trở nên hữu ích hơn. Bên trong khi kiểm thử thất bạiMột trình lắng nghe được hỗ trợ bởi AI có thể chụp ảnh DOM cùng với ảnh chụp màn hình, gửi chúng đến một mô hình để trả về cụm nguyên nhân gốc có khả năng xảy ra, và ghi lại một thẻ vào đó. TestNG báo cáo hoặc một công cụ như ReportPortal.

Các mô hình phổ biến do AI điều khiển bao gồm:

  • Phát hiện kiểm thử không ổn định: Người nghe chuyển tiếp các mốc thời gian đạt/không đạt đến một mô hình để phân loại lỗi đó là do sự không ổn định, do môi trường hoặc do sự thoái triển thực sự.
  • Ảnh chụp màn hình thông minh: Các mô hình thị giác máy tính cắt, chú thích và so sánh ảnh chụp màn hình giao diện người dùng để người đánh giá có thể thấy vùng đã thay đổi thay vì toàn bộ trang.
  • Bộ định vị tự phục hồi: A WebDriverListener móc trước khi tìm phần tử và yêu cầu trợ lý AI đề xuất một vị trí thay thế khi vị trí chính báo lỗi. NoSuchElementException.
  • Tóm tắt bằng ngôn ngữ tự nhiên: An phóng viên Việc triển khai các nguồn cấp dữ liệu cho bộ kết quả sẽ tạo ra một LLM, từ đó tạo ra bản tóm tắt ngắn gọn chỉ gồm một đoạn văn.

Lớp lắng nghe là nơi tối ưu nhất để chèn các hook này vì nó không ảnh hưởng đến logic kiểm thử và được áp dụng đồng nhất trên toàn bộ bộ kiểm thử.

Tổng kết

Người nghe được yêu cầu tạo nhật ký hoặc tùy chỉnh TestNG báo cáo trong Selenium WebDriver.

  • TestNG Cung cấp nhiều giao diện lắng nghe khác nhau; hãy chọn giao diện phù hợp với sự kiện mà bạn quan tâm.
  • Trình nghe là các giao diện được sử dụng trong Selenium Các tập lệnh WebDriver để phản ứng với các sự kiện trong vòng đời kiểm thử.
  • Bài hướng dẫn đã minh họa ITestListener Với bài kiểm tra đạt và bài kiểm tra không đạt.
  • Bạn có thể gắn trình lắng nghe với @Người nghe hoặc đăng ký nó một lần testng.xml cho toàn bộ căn hộ.
  • Selenium 4.x thay thế EventFiringWebDriver với WebDriverListener + EventFiringDecorator dành cho các sự kiện cấp WebDriver.

Câu Hỏi Thường Gặp

Trình lắng nghe là một giao diện đăng ký nhận các sự kiện được tạo ra trong quá trình... Selenium chạy thử nghiệm. TestNG Các listener phản hồi các sự kiện trong vòng đời kiểm thử như bắt đầu, vượt qua, thất bại và bỏ qua. Các listener của WebDriver phản hồi các sự kiện của trình điều khiển trình duyệt như nhấp chuột, điều hướng và các lệnh gọi findElement.

ITestListener được kích hoạt cho từng phương thức @Test riêng lẻ và cung cấp các sự kiện onTestStart, onTestSuccess, onTestFailure, onTestSkipped và onFinish. ISuiteListener chỉ được kích hoạt hai lần cho mỗi bộ kiểm thử, với các sự kiện onStart và onFinish, lý tưởng cho việc thiết lập ở cấp độ bộ kiểm thử, chẳng hạn như mở một tệp báo cáo.

Bạn có thể đăng ký một TestNG Có hai cách để lắng nghe: thêm chú thích `@Listeners(MyListener.class)` phía trên lớp kiểm thử, hoặc khai báo một trình lắng nghe. Thẻ này nằm bên trong tệp testng.xml. Phương pháp sử dụng XML giúp áp dụng trình lắng nghe cho mọi lớp trong bộ kiểm thử mà không cần sửa đổi mã nguồn.

EventFiringWebDriver và WebDriverEventListener đã bị loại bỏ. Selenium 4.x. Phương án thay thế được khuyến nghị là giao diện WebDriverListener kết hợp với EventFiringDecorator, có thể bao bọc các thể hiện WebDriver, WebElement hoặc Alert và cung cấp các điểm kết nối gọn gàng hơn như beforeGet và afterClick.

Hãy sử dụng IReporter khi bạn muốn tạo báo cáo tùy chỉnh sau khi bộ kiểm thử kết thúc, chẳng hạn như bản tóm tắt HTML hoặc JSON. Hãy sử dụng IInvokedMethodListener khi bạn cần một hook trước và sau mỗi phương thức kiểm thử, bao gồm cả các phương thức cấu hình như @BeforeMethod và @AfterMethod.

Các mô hình AI có thể làm phong phú thêm đầu ra của trình lắng nghe bằng cách gắn thẻ mức độ nghiêm trọng cho mỗi mục nhật ký, tạo mô tả bước bằng ngôn ngữ tự nhiên và nhóm các lỗi liên quan. Bên trong onTestFailure, một dịch vụ AI có thể phân tích ảnh chụp màn hình và ngăn xếp. tracSau đó, hãy xác định nguyên nhân gốc rễ có khả năng xảy ra nhất. TestNG báo cáo.

Đúng vậy. Người nghe có thể truyền dữ liệu lịch sử đạt/không đạt đến một dịch vụ AI để phân loại lỗi là do sự cố không ổn định, do môi trường hoặc do lỗi hồi quy thực sự. Kết quả được ghi lại dưới dạng... TestNG thuộc tính đó, nhờ vậy các bảng điều khiển có thể cách ly các bài kiểm tra không ổn định mà không cần người kiểm tra từng bản dựng màu đỏ.

Tóm tắt bài viết này với: