Các nhóm trong TestNG
⚡ Tóm tắt thông minh
Các nhóm trong TestNG Cho phép bạn gắn thẻ các phương thức kiểm thử bằng các nhãn logic, sau đó bao gồm hoặc loại trừ chúng thông qua một bộ kiểm thử XML. Cách tiếp cận này đơn giản hóa việc chạy thử nghiệm nhanh, kiểm thử hồi quy và kiểm thử dựa trên sự phụ thuộc mà không cần viết lại mã. Java Mã.

TestNG là một khung kiểm thử bao gồm các loại kiểm thử đơn vị, chức năng, đầu cuối, giao diện người dùng và tích hợp cho Java dự án.
Bạn có thể chạy một gói duy nhất hoặc nhiều gói (một gói bao gồm các lớp liên quan trong một cấu trúc thư mục được xác định) bằng cách tạo một bộ XML và kích hoạt nó thông qua Maven.
TestNG Nhóm có ví dụ
Bạn sử dụng các nhóm trong TestNG khi nào:
- Bạn không nên phân tán các phương thức kiểm thử trên nhiều lớp chỉ dựa trên lĩnh vực chức năng, và
- Bạn muốn bỏ qua (không thực thi) các trường hợp kiểm thử đã chọn như thể chúng không tồn tại trong mã nguồn.
- Để đạt được cả hai mục tiêu đó, bạn cần phân loại các phương pháp thành các nhóm hợp lý. TestNG Sau đó, hệ thống sẽ tuân thủ các bộ lọc “bao gồm” và “loại trừ” được khai báo trong bộ XML.
Đoạn mã bên dưới hiển thị cú pháp gắn thẻ nhóm được sử dụng trong một phương thức kiểm thử.
Ở đây sử dụng hai tên nhóm, cụ thể là: bonding và strong_tiesĐây là các nhãn logic mà bạn có thể đổi tên cho phù hợp với dự án của mình.
<groups> Thẻ này đánh dấu sự bắt đầu của các bộ lọc nhóm bên trong bộ lọc XML.
Sau đó, bạn tùy chỉnh XML để chọn một nhóm đã được gắn thẻ. Ví dụ bên dưới hiển thị cú pháp khai báo nhóm.
<chạy>
<bao gồm tên=“gắn kết” />
</chạy>
</các nhóm>
Giả sử một lớp duy nhất chứa 10 phương thức kiểm thử.
Trong số các phương pháp đó:
- 6 phương pháp mang
bondingnhóm và - 4 phương pháp mang
strong_tiesnhóm.
Tiếp theo, bạn thiết lập Maven và Java các đường đi và sử dụng Eclipse Môi trường phát triển tích hợp (IDE) để minh họa việc sử dụng nhóm thông qua các tệp XML bên trong một JavaDự án Maven dựa trên nền tảng này.
Tạo XML cho TestNG có thẻ
- Tệp XML (Ngôn ngữ đánh dấu mở rộng) trong khung Maven lưu trữ cấu hình cho một hoặc nhiều bài kiểm tra, được khai báo bên trong. tag.
- Mỗi mục kiểm thử được bao bọc trong một thẻ và có thể chứa một hoặc nhiều TestNG các lớp học.
- A Java lớp học với một hoặc nhiều @Thử nghiệm các chú thích trên các phương thức của nó được coi là TestNG lớp học.
Nhiều thẻ xuất hiện theo trình tự để tạo thành một tệp testng.xml hoạt động, cụ thể là: , , Và .
- Thẻ này chứa tên cấp phòng được sử dụng trong TestNG báo cáo tóm tắt quá trình thực hiện.
- <test name=”Guru Bản demo thử nghiệm khói 99”> Thẻ này chứa tên kiểm tra logic; báo cáo sử dụng nó để đếm số lần đạt, không đạt và bỏ qua, cùng với tổng thời gian thực thi và siêu dữ liệu nhóm.
- thẻ trỏ đến lớp kiểm thử, trong đó
com.group.guru99là gói vàTC_Class1là tên lớp.
<!DOCTYPE bộ WELFARE “http://testng.org/testng-1.0.dtd”>
<bộ tên=“Phòng suite”>
<thử nghiệm tên="Guru "Bản demo thử nghiệm khói 99">
<các nhóm>
<chạy>
<bao gồm tên=“mối quan hệ bền chặt” />
</chạy>
</các nhóm>
<các lớp học>
<tốt nghiệp lớp XNUMX tên=“com.group.guru99.TC_Class1” />
</các lớp học>
</thử nghiệm>
</bộ>
Cấu hình XML này được đề cập trong các video hướng dẫn ở các phần tiếp theo.
“loại trừ” hoặc “bao gồm” trong XML thử nghiệm
Nếu cơ chế nhóm có vẻ phức tạp đối với một bộ lọc nhỏ, bộ công cụ testng.xml cũng cho phép bạn loại trừ hoặc bao gồm các phương thức kiểm thử riêng lẻ theo tên.
Bao gồm thẻCú pháp cho thẻ includebao gồm tên=“${TEST_CASE_NAME}” />
Lưu ý: Bạn có thể bao gồm hoặc loại trừ nhiều trường hợp kiểm thử trong một lần chạy duy nhất, và cú pháp tương tự cũng áp dụng cho các bộ lọc nhóm.
Sử dụng dependsOnGroups để thực thi theo thứ tự
Ngoài việc chỉ đơn thuần bao gồm, TestNG cho phép một nhóm phụ thuộc vào nhóm khác bằng cách sử dụng dependsOnGroups thuộc tính. Trình chạy đảm bảo mọi phương thức trong nhóm cha đều hoàn thành trước khi bất kỳ phương thức phụ thuộc nào bắt đầu, điều này giúp duy trì tính đáng tin cậy của các điều kiện tiên quyết.
- Đăng nhập trước, sau đó mới thực hiện giao dịch: Gắn thẻ các phương thức đăng nhập bằng
group = "auth"và các bài kiểm tra chuyển thẻ vớidependsOnGroups = {"auth"}Các bài kiểm tra chuyển giao chỉ được thực hiện sau khi đăng nhập thành công. - Hãy tránh thất bại: Nếu một phương thức trong nhóm cha bị lỗi, TestNG Thay vì báo lỗi hoàn toàn, hệ thống sẽ đánh dấu các phương thức phụ thuộc là bị bỏ qua, điều này giúp báo cáo chính xác hơn.
- Kết hợp với alwaysRun: Các phương pháp làm sạch nên thiết lập
alwaysRun = trueVì vậy, quá trình gỡ bỏ vẫn tiếp tục diễn ra ngay cả khi một nhóm thượng nguồn gặp sự cố.
Mô hình này thường thấy ở các bộ ứng dụng hoàn chỉnh, nơi việc thiết lập API phải hoàn tất trước khi các xác nhận giao diện người dùng được thực thi.
chạy TestNG Nhóm, bao gồm, loại trừ mã (video demo)
Dưới đây là hướng dẫn từng bước Java mã và bộ XML điều khiển nhóm, loại trừ và bao gồm hành vi.
Kịch bản thử nghiệm: Khởi động GuruTrang web ngân hàng demo 99, xác minh một vài yếu tố trên trang đăng nhập, nhập thông tin đăng nhập và xác minh lại một vài mục trên bảng điều khiển sau khi đăng nhập.
Lưu ý: Mỗi bước được thực hiện trong một phương thức riêng biệt, nhưng thứ tự thực thi phụ thuộc vào các mục trong bộ XML.
- Phương pháp 1: Khởi tạo trình duyệt và mở ứng dụng. URL (
tc01LaunchURL()). - Phương pháp 2: Kiểm tra tiêu đề trang đăng nhập (
tc02VerifyLaunchPage()). - Phương pháp 3: Nhập tên người dùng và mật khẩu vào biểu mẫu đăng nhập (
tc03EnterCredentials()). - Phương pháp 4: Xác minh sự hiện diện của ID Quản lý trên bảng điều khiển người dùng (
tc04VerifyLoggedInPage()). - Phương pháp 5: Xác minh các liên kết bổ sung trên bảng điều khiển người dùng (
tc05VerifyHyperlinks()).
Code cho trường hợp này:
nhập khẩu java.util.concurrent.TimeUnit;
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.Test;
giai cấp công cộng TC_Class1 {
công khai tĩnh cuối cùng webdriver webDriver = người mới FirefoxNgười lái xe();
Chuỗi launchPageHeading = “//h3[text()='Guru99 Bank']”;
cuối cùng Chuỗi userName_element = “//input[@name='uid']”, password_element = “//input[@name='password']”,
signIn_element = “//input[@name='btnLogin']”;
cuối cùng Chuỗi userName_value = “mngr28642”, giá trị_mật_thẻ = “ydAnate”;
cuối cùng Chuỗi ID người quản lý = “//td[contains(text(),'Manger Id')]”;
cuối cùng Chuỗi Khách hàng mới = “//a[@href='addcustomerpage.php']”, chuyển tiền = “//a[@href='FundTransInput.php']”;
/** Trường hợp kiểm thử này khởi tạo webDriver */
@Thử nghiệm(các nhóm = { “gắn kết”, “mối quan hệ bền chặt” })
khoảng trống công cộng tc01LaunchURL() {
webDriver.manage().window().maximize();
webDriver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
webDriver.get(“https://www.demo.guru99.com/V4/”);
}
/** Kiểm tra sự hiện diện của tiêu đề trên trang đăng nhập */
@Thử nghiệm(các nhóm = { “gắn kết” })
khoảng trống công cộng tc02VerifyLaunchPage() {
Assert.assertTrue(webDriver.findElement(By.xpath(launchPageHeading)).isDisplayed(),
“Tiêu đề trang chủ không hiển thị”);
System.out.println(“Tiêu đề trang chủ đang được hiển thị”);
}
/** Nhập tên người dùng, mật khẩu, sau đó nhấp vào Đăng nhập */
@Thử nghiệm(các nhóm = { “gắn kết”, “mối quan hệ bền chặt” })
khoảng trống công cộng tc03EnterCredentials() {
webDriver.findElement(By.xpath(userName_element)).sendKeys(userName_value);
webDriver.findElement(By.xpath(password_element)).sendKeys(password_value);
webDriver.findElement(By.xpath(signIn_element)).click();
}
/** Xác minh ID người quản lý trên bảng điều khiển */
@Thử nghiệm(các nhóm = { “mối quan hệ bền chặt” })
khoảng trống công cộng tc04VerifyLoggedInPage() {
Assert.assertTrue(webDriver.findElement(By.xpath(managerID)).isDisplayed(),
“Nhãn ID người quản lý không được hiển thị”);
System.out.println(“Nhãn ID người quản lý được hiển thị”);
}
/** Kiểm tra liên kết Khách hàng mới và liên kết Chuyển tiền trên bảng điều khiển */
@Thử nghiệm(các nhóm = { “gắn kết” })
khoảng trống công cộng tc05VerifyHyperlinks() {
Assert.assertTrue(webDriver.findElement(By.xpath(newCustomer)).isEnabled(),
“Liên kết dành cho khách hàng mới không hiển thị”);
System.out.println(“Liên kết dành cho khách hàng mới đã được hiển thị”);
Assert.assertTrue(webDriver.findElement(By.xpath(fundTransfer)).isEnabled(),
“Liên kết chuyển tiền không hiển thị”);
System.out.println(“Liên kết chuyển tiền đã được hiển thị”);
}
}
Xin lưu ý: thông tin đăng nhập ngân hàng demo chỉ có hiệu lực trong khoảng 20 ngày, vì vậy khi chạy thử nghiệm cục bộ, bạn có thể gặp lỗi thông tin đăng nhập không hợp lệ sau khi thời gian đó hết hạn.
Giải thích mã:
Năm phương pháp thử nghiệm, mỗi phương pháp dành cho một hành động, mỗi phương pháp đều có một đặc điểm riêng. groups thuộc tính trên @Test chú thích.
Hai nhãn nhóm logic là strong_ties và bonding.
- Phương pháp thứ nhất và thứ ba đều mang cả hai
bondingvàstrong_tiesVì vậy, chúng sẽ chạy bất cứ khi nào một trong hai nhóm được bao gồm trong bộ kiểm thử. Đây là một mô hình phổ biến cho các tác vụ dùng chung. trường hợp thử nghiệm các bước. - Phương pháp thứ hai chỉ được gắn thẻ với
bondingVì vậy, nó chỉ hoạt động khibondingNhóm này được bao gồm. - Phương pháp thứ tư chỉ được gắn thẻ với
strong_tiesVì vậy, chương trình chỉ chạy khi nhóm đó được bao gồm. - Phương pháp thứ năm chỉ được gắn thẻ với
bondingVì vậy, nó chỉ hoạt động khibondingNhóm này được bao gồm.
Sau đây là bốn kịch bản thực thi:
Kịch bản 1: Thực hiện mọi phương pháp kiểm thử bất kể nhóm nào. Loại bỏ <groups> khối từ XML đang chạy.
Kịch bản 2: Chỉ chạy các phương thức được liên kết với một nhóm đã chọn, cụ thể là... strong_ties or bondingVui lòng xem video bên dưới.
- Trong phần đầu của video,
<groups>Khối mã đó đã được chú thích vô hiệu hóa, do đó mọi phương thức kiểm thử đều được chạy. - Ở phần thứ hai, bộ lọc nhóm được khôi phục và chỉ các phương thức khớp mới được thực thi.
Kịch bản 3: Áp dụng bộ lọc loại trừ để bỏ qua các trường hợp kiểm thử đã chọn. Vui lòng xem video hướng dẫn.
- Bản demo không bao gồm
tc02theo tên trong XML đang chạy, và báo cáo kết quả xác nhận rằng phương thức bị loại trừ không được thực thi.
Kịch bản 4: Áp dụng bộ lọc include để chỉ chạy tc01LaunchURL, tc03EnterCredentialsvà tc05VerifyHyperlinksVui lòng xem video.
Trong lần chạy này, chỉ các phương thức được liệt kê trong bộ lọc include mới được thực thi, đúng như đã cấu hình.
Tải xuống dự án mẫu từ liên kết bên dưới.
Kết luận
Các nhóm trong TestNG mang lại cấu trúc cho quy mô lớn Selenium và các bộ đơn vị bằng cách thay thế việc phân chia lớp riêng lẻ bằng các bộ lọc XML khai báo.
Gắn thẻ các phương pháp của bạn bằng @Test(groups = {...}), sau đó sử dụng <include>, <exclude>và dependsOnGroups để chạy kiểm thử khói, kiểm thử hồi quy và kiểm thử đầu cuối từ cùng một dự án Maven. TestNG 7.x.

