TestNG là một khung công tác Thử nghiệm, 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 đầu 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 mã Testng của mình.
Nếu mức độ ưu tiên thử nghiệm không được xác định trong khi chạy nhiều trường hợp thử nghiệm, TestNG sẽ chỉ định tất cả @Test một mức độ ưu tiên là không (0).
Bây giờ, trong khi chạy; các ưu tiên thấp hơn sẽ được lên lịch trước.
Trong hướng dẫn này, bạn sẽ học -
- Demo mã TestNG không có ưu tiên
- Demo mã TestNG không có ưu tiên theo thứ tự bảng chữ cái
- Cách đặt Mức độ ưu tiên trong TestNG
- Các phương pháp có cùng mức độ ưu tiên
- Kết hợp cả hai phương pháp được ưu tiên (có cùng mức độ ưu tiên) và không được ưu tiên
Demo mã TestNG không có ưu tiên
Hãy xem một tình huống mà trình tự sẽ được yêu cầu để vượt qua tất cả các trường hợp thử nghiệm:
Tình huống: Tạo mã mà bạn được yêu cầu thực hiện tìm kiếm trên Google với một 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 Tìm kiếm".
Lưu ý: Mỗi bước mà bạn viết mã phải theo các phương pháp riêng biệt
Phương pháp 1 : Mở Trình duyệt nói Firefox (openBrowser ())
Phương pháp 2 : Khởi chạy Google.com (khởi chạyGoogle ())
Phương pháp 3 : Thực hiện tìm kiếm bằng "Facebook" (performanceSearchAndClick1stLink ())
Phương pháp 4 : Xác minh tiêu đề trang tìm kiếm của Google (FaceBookPageTitleVerification ())
Mã cho kịch bản của chúng tôi :
nhập org.openqa.selenium.By;nhập org.openqa.selenium.WebDriver;nhập org.openqa.selenium.firefox.FirefoxDriver;nhập khẩu org.testng.Assert;nhập org.testng.annotations.Test;lớp công khai Priority_In_testNG {Trình điều khiển WebDriver;// Phương pháp 1: Mở Brower nói Firefox@Kiểm trapublic void openBrowser () {driver = new FirefoxDriver ();}// Phương pháp 2: Khởi chạy Google.com@Kiểm trapublic void khởi chạyGoogle () {driver.get ("http://www.google.co.in");}// Phương pháp 3: Thực hiện tìm kiếm bằng "Facebook"@Kiểm trapublic void peformSeachAndClick1stLink () {driver.findElement (By.xpath (".//*[@ title = 'Search']")). sendKeys ("Facebook");}// Phương pháp 4: Xác minh tiêu đề trang tìm kiếm của Google.@Kiểm trapublic void FaceBookPageTitleVerification () ném Exception {driver.findElement (By.xpath (".//*[@ value = 'Search']")). click ();Thread.sleep (3000);Assert.assertEquals (driver.getTitle (). Chứa ("Facebook - Google Tìm kiếm"), 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 trong một phương thức độc lập.
- Phương thức đầu tiên (openBrowser) trạng thái để khởi tạo trình duyệt Firefox.
- Phương pháp thứ hai (khởi chạyGoogle) tuyên bố rằng khởi chạy Google.com nằm trong trình duyệt được khởi tạo.
- Phương thức thứ ba (peformSeachAndClick1stLink) cho biết 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 là Facebook và
- Phương pháp thứ tư và cuối cùng (FaceBookPageTitleVerification) nói 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 đổi thành Facebook - Google Tìm kiếm.
Bây giờ hãy chạy mã này bằng testNG như trong video, bạn sẽ thấy tất cả các Test Case đều không thành công. Lý do thất bại: vì có một sự phụ thuộc của trường hợp thử nghiệm trước đó vượt qua, chỉ trường hợp thử nghiệm đang chạy hiện tại mới được thông qua.
Trong trường hợp này,
- Phương thức đầu tiên được thực thi là openBrowser (). Nó đã được thông qua bởi vì nó không có bất kỳ sự phụ thuộc nào.
- Phương thức thứ hai được thực thi là FaceBookPageTitleVerification (); nó không thành công vì chúng tôi đang cố gắng 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 phải là quá trình thì bất kỳ bước nào khác cũng có thể được thực hiện. Do đó, đây là lý do các trường hợp thử nghiệm của tôi không thành công.
ĐÃ PASSED: openBrowserTHẤT BẠI: FaceBookPageTitleVerificationTHẤT BẠI: khởi chạyGoogleTHẤT BẠI: peformSeachAndClick1stLink
Demo mã TestNG không 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ã.
gói com.guru.testngannotations;nhập org.testng.annotations.Test;lớp công khai TestNG_Posystem_Annotations {@Kiểm trapublic void c_method () {System.out.println ("Tôi đang ở phương pháp C");}@Kiểm trapublic void b_method () {System.out.println ("Tôi đang ở phương pháp B");}@Kiểm trapublic void a_method () {System.out.println ("Tôi đang ở phương pháp A");}@Kiểm trapublic void e_method () {System.out.println ("Tôi đang ở phương thức E");}@Kiểm trapublic void d_method () {System.out.println ("Tôi đang ở phương pháp D");}}
Đầu ra
Tôi đang ở phương pháp ATôi đang ở phương pháp BTôi đang ở phương pháp CTôi đang ở phương pháp DTôi đang ở phương pháp 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 đầu ra.
Cách đặt Mức độ ưu tiên trong TestNG
Như bạn đã thấy trong ví dụ trước, yêu cầu trình tự để vượt qua tình huống này, vì vậy chúng tôi sẽ sửa đổi đoạn mã trước đó với Thông số ưu tiên để mỗi bài kiểm tra sẽ chạy ngược lại với 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 mỗi trường hợp thử nghiệm có nghĩa là trường hợp thử nghiệm giá trị ưu tiên thấp hơn sẽ được thực thi trước.
Ưu tiên trong testNG đang hoạt động
nhập org.openqa.selenium.By;nhập org.openqa.selenium.WebDriver;nhập org.openqa.selenium.firefox.FirefoxDriver;nhập khẩu org.testng.Assert;nhập org.testng.annotations.Test;lớp công khai Priority_In_testNG {Trình điều khiển WebDriver;// Phương pháp 1: Mở Trình duyệt nói Firefox@Test (ưu tiên = 1)public void openBrowser () {driver = new FirefoxDriver ();}// Phương pháp 2: Khởi chạy Google.com@Test (ưu tiên = 2)public void khởi chạyGoogle () {driver.get ("http://www.google.co.in");}// Phương pháp 3: Thực hiện tìm kiếm bằng "Facebook"@Test (ưu tiên = 3)public void peformSeachAndClick1stLink () {driver.findElement (By.xpath (".//*[@ title = 'Search']")). sendKeys ("Facebook");}// Phương pháp 4: Xác minh tiêu đề trang tìm kiếm của Google.@Test (ưu tiên = 4)public void FaceBookPageTitleVerification () ném Exception {driver.findElement (By.xpath (".//*[@ value = 'Search']")). click ();Thread.sleep (3000);Assert.assertEquals (driver.getTitle (). Chứa ("Facebook - Google Tìm kiếm"), true);}}
Giải thích mã
Sau khi chỉ định mức độ ưu tiên cho từng tủ thử nghiệm, hãy chạy mã trên bằng testNG như được hiển thị trong Video-2 được đề cập bên dưới.
Ở đây, bạn có thể thấy rằng các trường hợp thử nghiệm được ưu tiên. Trường hợp kiểm thử có mức độ ưu tiên thấp hơn được thực hiện trước tiên tức là bây giờ có một thực thi tuần tự theo mức độ ưu tiên trong các trường hợp kiểm thử. Do đó, tất cả các trường hợp thử nghiệm hiện đang vượt qua.
Lưu ý giao diện điều khiển của nhật thực:
Đầu ra :
ĐÃ PASSED: openBrowserĐÃ PASSED: khởi chạyGoogleĐÃ ĐÓNG: peformSearchAndClick1stLinkĐÃ ĐÓNG: FaceBookPageTitleVerification
Số 0 có mức độ ưu tiên cao nhất (nó sẽ được thực hiện đầu tiên) và mức độ ưu tiên được dựa trên số đã cho, tức là, số 0 có mức độ ưu tiên cao nhất so với số 1. 1 có mức độ ưu tiên cao nhất hơn 2, v.v.
gói com.guru.testngannotations;nhập org.testng.annotations.Test;lớp công khai TestNG_Posystem_Annotations {@Test (ưu tiên = 6)public void c_method () {System.out.println ("Tôi đang ở phương pháp C");}@Test (ưu tiên = 9)public void b_method () {System.out.println ("Tôi đang ở phương pháp B");}@Test (ưu tiên = 1)public void a_method () {System.out.println ("Tôi đang ở phương pháp A");}@Test (ưu tiên = 0)public void e_method () {System.out.println ("Tôi đang ở phương thức E");}@Test (ưu tiên = 3)public void d_method () {System.out.println ("Tôi đang ở phương pháp D");}}
Đầu ra
Tôi đang ở phương pháp ETôi đang ở phương pháp ATôi đang ở phương pháp DTôi đang ở phương pháp CTôi đang ở phương pháp B
Ở đây chúng tôi đã cung cấp các mức độ ưu tiên là 0,1,3,6,9. Vì vậy, phương thức có 0 làm mức độ ưu tiên được thực hiện đầu tiên 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 coi là do chúng tôi đã cung cấp các mức độ ưu tiên
Các phương pháp có cùng mức độ ưu tiên:
Có thể có một cơ hội mà các phương thức có thể có cùng một mức độ ưu tiên. Trong những trường hợp đó, testng sẽ xem xét thứ tự bảng chữ cái của các tên phương thức có mức độ ưu tiên giống nhau.
gói com.guru.testngannotations;nhập org.testng.annotations.Test;lớp công khai TestNG_Posystem_Annotations {@Test (ưu tiên = 6)public void c_method () {System.out.println ("Tôi đang ở phương pháp C");}@Test (ưu tiên = 9)public void b_method () {System.out.println ("Tôi đang ở phương pháp B");}@Test (ưu tiên = 6)public void a_method () {System.out.println ("Tôi đang ở phương pháp A");}@Test (ưu tiên = 0)public void e_method () {System.out.println ("Tôi đang ở phương thức E");}@Test (ưu tiên = 3)public void d_method () {System.out.println ("Tôi đang ở phương pháp D");}}
Đầu ra
Tôi đang ở phương pháp ETôi đang ở phương pháp DTôi đang ở phương pháp ATôi đang ở phương pháp CTôi đang ở phương pháp 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' có cùng 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 được ưu tiên (có cùng mức độ ưu tiên) và không được ư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 testng.
- 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.
gói com.guru.testngannotations;nhập org.testng.annotations.Test;lớp công khai TestNG_Posystem_Annotations {@Kiểm tra()public void c_method () {System.out.println ("Tôi đang ở phương pháp C");}@Kiểm tra()public void b_method () {System.out.println ("Tôi đang ở phương pháp B");}@Test (ưu tiên = 6)public void a_method () {System.out.println ("Tôi đang ở phương pháp A");}@Test (ưu tiên = 0)public void e_method () {System.out.println ("Tôi đang ở phương thức E");}@Test (ưu tiên = 6)public void d_method () {System.out.println ("Tôi đang ở phương pháp D");}}
Đầu ra:
Tôi đang ở phương pháp BTôi đang ở phương pháp CTôi đang ở phương pháp ETôi đang ở phương pháp ATôi đang ở phương pháp D
ĐÃ XÓA: b_methodĐÃ ĐẨY: c_methodĐÃ XÓA: e_methodĐÃ ĐẨY: a_methodĐÃ XÓA: d_method
Giải trình:
Ưu tiên đầu tiên: Phương thức không ưu tiên: 'c' và 'b': Dựa trên thứ tự bảng chữ cái 'b' được thực hiện trước rồi đến 'c'.
Tùy chọn thứ hai: Các phương thức được ưu tiên: 'a', 'e' và 'd': 'e' được thực hiện đầ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, testng đã xem xét thứ tự bảng chữ cái của tên các phương thức của chúng. Vì vậy, giữa chúng, 'a' được thực hiện đầu tiên và sau đó là 'd'.
Phân biệt chữ hoa chữ thường trong TestNG
Chỉ đối với 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 (priority = 4) , giả sử bạn đang xác định nó theo một số cú pháp khác như @Test (PRIORITY = 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 bên dưới:
Phần 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 các trường hợp thử nghiệm 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 như một 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