TestNG @Test Ưu tiên trong Selenium
TestNG là một Kiểm tra framework, bao gồm các loại thiết kế thử nghiệm khác nhau như thử nghiệm đơn vị, thử nghiệm chức năng, thử nghiệm từ đầu đến cuối, thử nghiệm giao diện người dùng và thử nghiệm tích hợp.
Bạn có thể chạy một hoặc nhiều trường hợp thử nghiệm trong Kiểm tra Mã.
Nếu mức độ ưu tiên kiểm thử không được xác định trong khi chạy nhiều trường hợp kiểm thử, TestNG gán tất cả @Test mức độ ưu tiên bằng 0 (XNUMX).
Bây giờ, trong khi đang chạy; mức độ ưu tiên thấp hơn sẽ được lên lịch trước.
Bản demo của TestNG mã không có mức độ ưu tiên
Hãy xem xét một tình huống trong đó cần phải sắp xếp trình tự để vượt qua tất cả các trường hợp thử nghiệm:
kịch bản: Tạo mã trong đó bạn được yêu cầu thực hiện tìm kiếm trên Google với từ khóa cụ thể là “Facebook”. Bây giờ, hãy xác minh rằng tiêu đề Trình duyệt đã được thay đổi thành “Facebook – Google Search”.
Lưu ý: Mỗi bước bạn viết mã phải theo các phương thức riêng biệt
Phương pháp 1: Mở trình duyệt nói Firefox (mở trình duyệt())
Phương pháp 2: Khởi chạy Google.com (launchGoogle())
Phương pháp 3: Thực hiện tìm kiếm bằng cách sử dụng “Facebook” (performSearchAndClick1stLink())
Phương pháp 4: Xác minh tiêu đề trang tìm kiếm Google (FaceBookPageTitleVerification())
Mã cho kịch bản của chúng tôi:
import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.firefox.FirefoxDriver; import org.testng.Assert; import org.testng.annotations.Test; public class Priority_In_testNG { WebDriver driver; // Method 1: Open Brower say Firefox @Test public void openBrowser() { driver = new FirefoxDriver(); } // Method 2: Launch Google.com @Test public void launchGoogle() { driver.get("http://www.google.co.in"); } // Method 3: Perform a search using "Facebook" @Test public void peformSeachAndClick1stLink() { driver.findElement(By.xpath(".//*[@title='Search']")).sendKeys("Facebook"); } // Method 4: Verify Google search page title. @Test public void FaceBookPageTitleVerification() throws Exception { driver.findElement(By.xpath(".//*[@value='Search']")).click(); Thread.sleep(3000); Assert.assertEquals(driver.getTitle().contains("Facebook - Google Search"), true); } }
Giải thích mã
Như đã đề cập ở trên, chúng tôi đã tạo 4 trường hợp thử nghiệm để thực hiện từng hành động theo các phương pháp độc lập.
- Phương pháp đầu tiên (mở trình duyệt) trạng thái khởi tạo Firefox trình duyệt.
- Phương pháp thứ hai (khởi chạy Google) tuyên bố rằng việc khởi chạy Google.com nằm trong trình duyệt được khởi tạo.
- Phương pháp thứ ba (peformSeachAndClick1stLink)các trạng thái thực hiện tìm kiếm trong hộp tìm kiếm (với xpath (“.//*[@title='Search']”) với cụm từ tìm kiếm như Facebook và
- Phương pháp thứ tư và cuối cùng (Xác minh FaceBookPageTitle) tuyên bố rằng nhấp vào biểu tượng tìm kiếm của Google và xác minh rằng tiêu đề trình duyệt đã được thay đổi thành Facebook – Tìm kiếm của Google.
Bây giờ hãy chạy mã này bằng testNG như trong video, bạn sẽ tìm thấy tất cả Trường hợp thử nghiệm đang thất bại. Lý do thất bại: vì có sự phụ thuộc của trường hợp kiểm thử trước đó phải vượt qua, nên chỉ trường hợp kiểm thử đang chạy hiện tại mới được vượt qua.
Trong trường hợp này,
- Phương thức đầu tiên được thực thi là mở trình duyệt(). Nó đã được thông qua vì nó không có bất kỳ sự phụ thuộc nào.
- Phương pháp thứ hai được thực hiện là FaceBookPageTitleVerification(); không thành công vì chúng tôi đang cố nhấp vào nút tìm kiếm và xác minh tiêu đề trình duyệt.
- Bạn có thể thấy rằng nếu hoạt động tìm kiếm không được xử lý thì làm sao có thể vượt qua bất kỳ bước nào khác. Do đó, đây là lý do khiến các trường hợp thử nghiệm của tôi thất bại.
PASSED: openBrowser FAILED: FaceBookPageTitleVerification FAILED: launchGoogle FAILED: peformSeachAndClick1stLink
Bản demo của TestNG mã không có mức độ ưu tiên theo thứ tự bảng chữ cái
Nếu chúng tôi không đề cập đến bất kỳ mức độ ưu tiên nào, testng sẽ thực thi các phương thức @Test dựa trên thứ tự bảng chữ cái của tên phương thức của chúng bất kể vị trí triển khai của chúng trong mã.
package com.guru.testngannotations; import org.testng.annotations.Test; public class TestNG_Priority_Annotations { @Test public void c_method(){ System.out.println("I'm in method C"); } @Test public void b_method(){ System.out.println("I'm in method B"); } @Test public void a_method(){ System.out.println("I'm in method A"); } @Test public void e_method(){ System.out.println("I'm in method E"); } @Test public void d_method(){ System.out.println("I'm in method D"); } }
Đầu ra
I'm in method A I'm in method B I'm in method C I'm in method D I'm in method E
Mặc dù chúng tôi đã xác định các phương thức theo cách ngẫu nhiên (c, b, a, e, d), testng đã thực thi các phương thức dựa trên tên phương thức của chúng bằng cách xem xét thứ tự bảng chữ cái và điều tương tự cũng được phản ánh trong kết quả đầu ra.
Cách đặt mức độ ưu tiên trong TestNG
Như bạn đã thấy trong ví dụ trước, cần phải có trình tự để vượt qua kịch bản này, vì vậy chúng ta sẽ sửa đổi đoạn mã trước đó bằng Thông số ưu tiên để mỗi bài kiểm tra phải chạy theo mức độ ưu tiên được chỉ định cho chúng.
Bây giờ như bạn có thể thấy, chúng tôi đã chỉ định Mức độ ưu tiên cho từng trường hợp thử nghiệm, nghĩa là trường hợp thử nghiệm sẽ có giá trị ưu tiên thấp hơn sẽ được thực thi trước tiên.
Ưu tiên trong testNG đang hoạt động
import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.firefox.FirefoxDriver; import org.testng.Assert; import org.testng.annotations.Test; public class Priority_In_testNG { WebDriver driver; // Method 1: Open Browser say Firefox @Test (priority=1) public void openBrowser() { driver = new FirefoxDriver(); } // Method 2: Launch Google.com @Test (priority=2) public void launchGoogle() { driver.get("http://www.google.co.in"); } // Method 3: Perform a search using "Facebook" @Test (priority=3) public void peformSeachAndClick1stLink() { driver.findElement(By.xpath(".//*[@title='Search']")).sendKeys("Facebook"); } // Method 4: Verify Google search page title. @Test (priority=4) public void FaceBookPageTitleVerification() throws Exception { driver.findElement(By.xpath(".//*[@value='Search']")).click(); Thread.sleep(3000); Assert.assertEquals(driver.getTitle().contains("Facebook - Google Search"), true); } }
Giải thích mã
Sau khi chỉ định mức độ ưu tiên cho từng trường hợp thử nghiệm, hãy chạy mã trên bằng testNG như trong Video-2 được đề cập bên dưới.
Tại đây, bạn có thể thấy các trường hợp thử nghiệm được ưu tiên. Trường hợp thử nghiệm có mức độ ưu tiên thấp hơn sẽ được thực thi trước, tức là bây giờ có sự thực thi tuần tự theo mức độ ưu tiên trong các trường hợp thử nghiệm. Do đó, hiện tại tất cả các trường hợp thử nghiệm đều đã thành công.
Lưu ý bảng điều khiển của Eclipse:
Đầu ra :
PASSED: openBrowser PASSED: launchGoogle PASSED: peformSearchAndClick1stLink PASSED: FaceBookPageTitleVerification
Số 0 có mức độ ưu tiên cao nhất (nó sẽ được thực thi trước) và mức độ ưu tiên sẽ tiếp tục dựa trên số đã cho, tức là 0 có mức độ ưu tiên cao nhất hơn 1. Số 1 có mức độ ưu tiên cao nhất hơn 2, v.v.
package com.guru.testngannotations; import org.testng.annotations.Test; public class TestNG_Priority_Annotations { @Test(priority=6) public void c_method(){ System.out.println("I'm in method C"); } @Test(priority=9) public void b_method(){ System.out.println("I'm in method B"); } @Test(priority=1) public void a_method(){ System.out.println("I'm in method A"); } @Test(priority=0) public void e_method(){ System.out.println("I'm in method E"); } @Test(priority=3) public void d_method(){ System.out.println("I'm in method D"); } }
Đầu ra
I'm in method E I'm in method A I'm in method D I'm in method C I'm in method B
Ở đây chúng tôi đã cung cấp mức độ ưu tiên là 0,1,3,6,9. Vì vậy, phương thức có mức ưu tiên 0 được thực thi trước và sau đó phương thức có mức ưu tiên-1, v.v. Ở đây, tên phương thức theo thứ tự bảng chữ cái sẽ không được xem xét vì chúng tôi đã cung cấp mức độ ưu tiên
Các phương thức có cùng mức độ ưu tiên
Có thể có khả năng các phương thức có thể có cùng mức độ ưu tiên. Trong những trường hợp đó, testng xem xét thứ tự bảng chữ cái của tên phương thức có mức độ ưu tiên như nhau.
package com.guru.testngannotations; import org.testng.annotations.Test; public class TestNG_Priority_Annotations { @Test(priority=6) public void c_method(){ System.out.println("I'm in method C"); } @Test(priority=9) public void b_method(){ System.out.println("I'm in method B"); } @Test(priority=6) public void a_method(){ System.out.println("I'm in method A"); } @Test(priority=0) public void e_method(){ System.out.println("I'm in method E"); } @Test(priority=3) public void d_method(){ System.out.println("I'm in method D"); } }
Đầu ra
I'm in method E I'm in method D I'm in method A I'm in method C I'm in method B
Ở đây 'e' và 'd' được thực thi dựa trên các giá trị ưu tiên của chúng. Nhưng các phương thức 'a' và 'c' chứa cùng một giá trị ưu tiên(6). Vì vậy, ở đây testng xem xét thứ tự bảng chữ cái của 'a' và 'c' và thực hiện chúng cho phù hợp.
Kết hợp cả hai phương pháp ưu tiên (có cùng mức độ ưu tiên) và không ưu tiên
Trong trường hợp này, chúng tôi sẽ đề cập đến hai trường hợp trong một lớp thử nghiệm.
- Các phương thức có cùng giá trị ưu tiên.
- Nhiều hơn một phương pháp không được ưu tiên.
package com.guru.testngannotations; import org.testng.annotations.Test; public class TestNG_Priority_Annotations { @Test() public void c_method(){ System.out.println("I'm in method C"); } @Test() public void b_method(){ System.out.println("I'm in method B"); } @Test(priority=6) public void a_method(){ System.out.println("I'm in method A"); } @Test(priority=0) public void e_method(){ System.out.println("I'm in method E"); } @Test(priority=6) public void d_method(){ System.out.println("I'm in method D"); } }
Đầu ra:
I'm in method B I'm in method C I'm in method E I'm in method A I'm in method D
PASSED: b_method PASSED: c_method PASSED: e_method PASSED: a_method PASSED: d_method
Giải thích:
Ưu tiên đầu tiên: Các phương thức không được ưu tiên: 'c' và 'b': Dựa trên thứ tự bảng chữ cái 'b' được thực thi trước rồi đến 'c'.
Ưu tiên thứ hai: Các phương thức được ưu tiên: 'a', 'e' và 'd': 'e' được thực thi đầu tiên vì nó có mức độ ưu tiên cao nhất(0). Vì mức độ ưu tiên của các phương thức 'a' và 'd' là như nhau nên testng đã xem xét thứ tự bảng chữ cái của tên phương thức của chúng. Vì vậy, giữa chúng, 'a' được thực thi trước và sau đó là 'd'.
Phân biệt chữ hoa chữ thường trong TestNG
Chỉ dành cho thông tin của bạn, có một cú pháp tiêu chuẩn để xác định mức độ ưu tiên trong testNG tức là @Test (ưu tiên=4), giả sử bạn đang định nghĩa nó theo một số cú pháp khác @Test (ƯU TIÊN=1) thì IDE của bạn sẽ hiển thị nó dưới dạng lỗi biên dịch. Tham khảo hình ảnh dưới đây:
Kết luận
Như bạn đã thấy rằng nếu có yêu cầu chạy một tập hợp ca kiểm thử theo trình tự cụ thể thì có thể dễ dàng thực hiện bằng cách sử dụng Ưu tiên sử dụng testNG làm công cụ chạy.
Hướng dẫn này được thực hiện nhờ sự đóng góp của Ramandeep Singh và Rama Krishna gadde