TestNG Hướng dẫn: Chú thích & Khung trong Selenium
Là gì TestNG?
TestNG là một khung thử nghiệm tự động hóa trong đó NG là viết tắt của “Thế hệ tiếp theo”. TestNG được truyền cảm hứng bởi JUnit sử dụng các chú thích (@). TestNG khắc phục những nhược điểm của JUnit và được thiết kế để làm kiểm tra end-to-end dễ dàng.
Sử dụng TestNG, bạn có thể tạo một báo cáo thích hợp và bạn có thể dễ dàng biết có bao nhiêu trường hợp kiểm thử đạt, không thành công và bị bỏ qua. Bạn có thể thực hiện các trường hợp thử nghiệm thất bại một cách riêng biệt.
Ví dụ:
- Giả sử, bạn có năm trường hợp thử nghiệm, một phương pháp được viết cho mỗi trường hợp thử nghiệm (Giả sử chương trình được viết bằng phương pháp chính mà không sử dụng testNG). Khi bạn chạy chương trình này trước, ba phương pháp được thực hiện thành công và phương pháp thứ tư bị lỗi. Sau đó, hãy sửa các lỗi có trong phương pháp thứ tư, bây giờ bạn chỉ muốn chạy phương pháp thứ tư vì ba phương pháp đầu tiên dù sao cũng được thực hiện thành công. Điều này không thể thực hiện được nếu không sử dụng TestNG.
- TestNG in Selenium cung cấp một tùy chọn, tức là tệp testng-failed.xml trong thư mục test-output. Nếu bạn chỉ muốn chạy các trường hợp thử nghiệm không thành công nghĩa là bạn chạy tệp XML này. Nó sẽ chỉ thực thi các trường hợp thử nghiệm không thành công.
Ngoài khái niệm trên, bạn sẽ tìm hiểu thêm về TestNG, như Ưu điểm của TestNG, cách tạo phương thức kiểm tra bằng cách sử dụng chú thích @test, cách chuyển đổi các lớp này thành tệp bộ kiểm tra và thực thi thông qua Eclipse cũng như từ dòng lệnh.
Tại sao sử dụng TestNG với Selenium?
Mặc định Selenium các bài kiểm tra không tạo ra định dạng phù hợp cho kết quả kiểm tra. sử dụng TestNG in Selenium, chúng tôi có thể tạo ra kết quả kiểm tra.
Hầu hết Selenium người dùng sử dụng điều này nhiều hơn Junit vì những ưu điểm của nó. Có rất nhiều tính năng của TestNG, nhưng chúng ta sẽ chỉ tập trung vào những cái quan trọng nhất mà chúng ta có thể sử dụng trong Selenium. Sau đây là các tính năng chính của Selenium TestNG:
- Tạo báo cáo ở định dạng phù hợp bao gồm số lần chạy thử nghiệm, số lượng thử nghiệm đạt, số lượng thử nghiệm không thành công và số lượng thử nghiệm bị bỏ qua.
- Nhiều trường hợp thử nghiệm có thể được nhóm dễ dàng hơn bằng cách chuyển đổi chúng thành tệp testng.xml. Trong đó bạn có thể ưu tiên trường hợp thử nghiệm nào sẽ được thực hiện trước.
- Trường hợp kiểm thử tương tự có thể được thực thi nhiều lần mà không cần lặp lại chỉ bằng cách sử dụng từ khóa có tên 'số lần gọi'.
- Sử dụng testng, bạn có thể thực thi nhiều trường hợp kiểm thử trên nhiều trình duyệt, tức là chéo kiểm tra trình duyệt.
- TestNG framework có thể được tích hợp dễ dàng với các công cụ như TestNG Maven, Jenkins, v.v.
- Các chú thích được sử dụng trong thử nghiệm rất dễ hiểu, ví dụ: @BeforeMethod, @AfterMethod, @BeforeTest, @AfterTest
- WebDriver không có cơ chế gốc để tạo báo cáo. TestNG có thể tạo báo cáo ở định dạng có thể đọc được như báo cáo được hiển thị bên dưới.
- TestNG đơn giản hóa cách mã hóa các bài kiểm tra. Không cần thêm phương thức static main trong các thử nghiệm của chúng tôi. Trình tự các hành động được quy định bởi các chú thích dễ hiểu, không yêu cầu các phương thức phải tĩnh.
- Các ngoại lệ chưa được phát hiện được tự động xử lý bởi TestNG không kết thúc cuộc thi sớm. Những trường hợp ngoại lệ này được báo cáo là các bước không thành công trong báo cáo.
Ưu điểm của TestNG kết thúc JUnit
Có ba ưu điểm chính của TestNG kết thúc JUnit:
- Chú thích dễ hiểu hơn
- Các trường hợp thử nghiệm có thể được nhóm lại dễ dàng hơn
- Có thể thử nghiệm song song
Chú thích trong là gì TestNG?
Chú thích trong TestNG là những dòng mã có thể kiểm soát cách thực thi phương thức bên dưới chúng. Chúng luôn được đặt trước ký hiệu @. Rất sớm và nhanh chóng TestNG Ví dụ như hình dưới đây.
Chú thích sẽ được thảo luận sau trong phần có tên “Chú thích được sử dụng trong TestNG,”vì vậy sẽ hoàn toàn ổn nếu bạn không hiểu những điều trên TestNG Ví dụ vừa rồi. Điều quan trọng cần lưu ý bây giờ là các chú thích trong TestNG dễ viết mã và hiểu hơn trong JUnit.
Khả năng chạy thử nghiệm song song có sẵn trong TestNG nhưng không phải trong JUnit, Do đó TestNG framework được ưa thích hơn đối với người thử nghiệm sử dụng Selenium Lưới.
Cách viết test case trong TestNG?
Bước 1) Viết logic kinh doanh của bạn và chèn TestNG chú thích trong mã của bạn.
Bước 2) Thêm thông tin khác như tên lớp, tên nhóm, tên gói, v.v.
Bước 3) Chạy TestNG.
Tạo trường hợp thử nghiệm bằng cách sử dụng TestNG Chú thích
Bây giờ, chúng ta sẽ tìm hiểu cách tạo trường hợp thử nghiệm đầu tiên bằng cách sử dụng TestNG Chú thích trong Selenium:
Trước khi tạo một trường hợp thử nghiệm, trước tiên chúng ta nên thiết lập một trường hợp thử nghiệm mới TestNG Dự án ở Eclipse và đặt tên nó là “Đầu tiênTestNGDự án".
Thiết lập mới TestNG Dự án
Bước 1: Bấm Tệp > Mới > Java Dự án
Bước 2: Nhập “Đầu tiênTestNGProject” làm Tên dự án rồi nhấp vào Tiếp theo.
Bước 3: Bây giờ chúng ta sẽ bắt đầu nhập TestNG Thư viện vào dự án của chúng tôi. Nhấp vào tab “Thư viện” rồi nhấp vào “Thêm thư viện…”
Bước 4: Trên hộp thoại Thêm thư viện, chọn “TestNG”Và nhấp vào Tiếp theo.
Bước 5: Nhấp vào Kết thúc.
Bạn nên nhận thấy rằng TestNG được đưa vào danh sách Thư viện.
Bước 6: Bây giờ chúng ta sẽ thêm các tệp JAR chứa Selenium API. Những tập tin này được tìm thấy trong Java trình điều khiển máy khách mà chúng tôi đã tải xuống từ https://www.selenium.dev/downloads/ khi chúng tôi đang cài đặt Selenium và Eclipse trong các chương trước.
Sau đó, điều hướng đến nơi bạn đã đặt Selenium Các tệp JAR.
Sau khi thêm các JAR bên ngoài, màn hình của bạn sẽ trông như thế này.
Bước 7: Nhấp vào Hoàn tất và xác minh rằng Đầu tiên của chúng tôiTestNGDự án được hiển thị trên Eclipsecủa cửa sổ Package Explorer.
Cách tạo mới TestNG Tệp thử nghiệm
Bây giờ chúng ta đã hoàn tất việc thiết lập dự án của mình trong này TestNG hướng dẫn, chúng ta hãy tạo một cái mới TestNG tập tin.
Bước 1: Nhấp vào 'src' và chọn khác.
Nhấp chuột phải vào thư mục gói “src” rồi chọn Mới > Khác…
Bước 2: Chọn TestNG lớp học.
Click vào TestNG thư mục và chọn “TestNG tùy chọn lớp”. Bấm tiếp.
Bước 3: Nhập các giá trị.
Nhập các giá trị được chỉ ra bên dưới vào các hộp nhập liệu thích hợp và nhấp vào Kết thúc. Lưu ý rằng chúng tôi đã đặt tên Java tập tin dưới dạng “Đầu tiênTestNGTài liệu".
Bước 4: Mẫu đã được tạo.
Eclipse sẽ tự động tạo mẫu cho TestNG tập tin hiển thị dưới đây.
Mã hóa đầu tiên của chúng tôi TestNG Ví dụ trường hợp kiểm thử
Bây giờ chúng ta hãy tạo đầu tiên Trường hợp thử nghiệm điều đó sẽ kiểm tra xem Mercury Trang chủ của Tours là chính xác. Nhập mã của bạn như hiển thị bên dưới TestNG Ví dụ:
package firsttestngpackage; import org.openqa.selenium.*; import org.openqa.selenium.firefox.FirefoxDriver; import org.testng.Assert; import org.testng.annotations.*; public class firsttestngfile { public String baseUrl = "https://demo.guru99.com/test/newtours/"; String driverPath = "C:\\geckodriver.exe"; public WebDriver driver ; @Test public void verifyHomepageTitle() { System.out.println("launching firefox browser"); System.setProperty("webdriver.gecko.driver", driverPath); driver = new FirefoxDriver(); driver.get(baseUrl); String expectedTitle = "Welcome: Mercury Tours"; String actualTitle = driver.getTitle(); Assert.assertEquals(actualTitle, expectedTitle); driver.close(); } }
Lưu ý những điều sau.
- TestNG không yêu cầu bạn phải có phương thức main().
- Các phương thức không cần phải tĩnh.
- Chúng tôi đã sử dụng chú thích @Test. @Test được sử dụng để cho biết rằng phương thức bên dưới là trường hợp thử nghiệm. Trong trường hợp này, chúng tôi đã đặt phương thức verifyHomepageTitle() làm trường hợp thử nghiệm của mình, vì vậy chúng tôi đã đặt chú thích '@Test' phía trên nó.
- Vì chúng tôi sử dụng chú thích trong TestNG, chúng tôi cần nhập gói org.testng.annotations.*.
- Chúng tôi đã sử dụng lớp Assert. Lớp Assert được sử dụng để tiến hành các hoạt động xác minh trong TestNG. Để sử dụng nó, chúng ta cần nhập gói org.testng.Assert.
Bạn có thể có nhiều trường hợp thử nghiệm (do đó có nhiều chú thích @Test) trong một TestNG tập tin. Điều này sẽ được giải quyết chi tiết hơn sau trong phần “Chú thích được sử dụng trong TestNG".
Chạy thử nghiệm
Để chạy thử nghiệm, chỉ cần chạy tệp trong Eclipse như bạn thường làm. Eclipse sẽ cung cấp hai kết quả đầu ra – một trong cửa sổ Console và một trên cửa sổ Console. TestNG Cửa sổ kết quả.
Kiểm tra các báo cáo được tạo bởi TestNG
Cửa sổ Console ở Eclipse đưa ra một báo cáo dựa trên văn bản về kết quả trường hợp thử nghiệm của chúng tôi trong khi TestNG Cửa sổ kết quả cung cấp cho chúng ta một cửa sổ đồ họa.
Tạo báo cáo HTML
TestNG có khả năng tạo báo cáo ở định dạng HTML.
Bước 1: Sau khi chạy Đầu tiên của chúng tôiTestNGTệp mà chúng tôi đã tạo ở phần trước, nhấp chuột phải vào tên dự án (Đầu tiênTestNGProject) trong cửa sổ Project Explorer, sau đó nhấp vào tùy chọn “Refresh”.
Bước 2: Lưu ý rằng thư mục “test-output” đã được tạo. Mở rộng nó và tìm tệp index.html. Tệp HTML này là báo cáo về kết quả của lần chạy thử nghiệm gần đây nhất.
Bước 3: Double-nhấp vào tệp index.html đó để mở nó bên trong Eclipsetrình duyệt web tích hợp sẵn. Bạn có thể làm mới trang này bất kỳ lúc nào sau khi chạy lại bài kiểm tra của mình bằng cách nhấn F5 giống như trong các trình duyệt web thông thường.
Chú thích được sử dụng trong TestNG
Ở phần trước, bạn đã được giới thiệu về chú thích @Test. Bây giờ, chúng ta sẽ nghiên cứu các chú thích nâng cao hơn và cách sử dụng chúng.
Nhiều trường hợp thử nghiệm
Chúng ta có thể sử dụng nhiều chú thích @Test trong một TestNG tài liệu. Theo mặc định, các phương thức được chú thích bởi @Test được thực thi theo thứ tự bảng chữ cái. Xem mã bên dưới. Mặc dù các phương thức c_test, a_test và b_test không được sắp xếp theo thứ tự bảng chữ cái trong mã nhưng chúng sẽ được thực thi như vậy.
Chạy mã này và trên trang index.html được tạo, hãy nhấp vào “Chế độ xem theo thời gian”.
Thông số Kỹ thuật
Nếu bạn muốn các phương thức được thực thi theo thứ tự khác, hãy sử dụng tham số “ưu tiên”. Tham số là từ khóa sửa đổi chức năng của chú thích.
- Các tham số yêu cầu bạn gán giá trị cho chúng. Bạn thực hiện điều này bằng cách đặt dấu “=” bên cạnh chúng, sau đó là giá trị.
- Các tham số được đặt trong một cặp dấu ngoặc đơn được đặt ngay sau chú thích giống như đoạn mã được hiển thị bên dưới.
TestNG sẽ thực thi chú thích @Test với giá trị ưu tiên thấp nhất đến lớn nhất. Không cần các giá trị ưu tiên của bạn phải liên tiếp.
TestNG Báo cáo HTML sẽ xác nhận rằng các phương thức đã được thực thi dựa trên giá trị ưu tiên tăng dần.
Nhiều thông số
Ngoài “ưu tiên”, @Test còn có một tham số khác gọi là “alwaysRun”, chỉ có thể được đặt thành “true” hoặc “false”. Để sử dụng hai hoặc nhiều tham số trong một chú thích, hãy phân tách chúng bằng dấu phẩy chẳng hạn như cái được hiển thị bên dưới.
@Test(priority = 0, alwaysRun = true)
@BeforeTest và @AfterTest
@Trước khi kiểm tra | các phương thức dưới chú thích này sẽ được thực thi trước trường hợp thử nghiệm đầu tiên trong TestNG hồ sơ. |
@SauTest | các phương thức dưới chú thích này sẽ được thực thi sau tất cả các trường hợp thử nghiệm trong TestNG tập tin được thực thi. |
Hãy xem xét đoạn mã dưới đây.
package firsttestngpackage; import org.openqa.selenium.*; import org.openqa.selenium.firefox.FirefoxDriver; import org.testng.Assert; import org.testng.annotations.*; public class firsttestngfile { public String baseUrl = "https://demo.guru99.com/test/newtours/"; String driverPath = "C:\\geckodriver.exe"; public WebDriver driver ; @BeforeTest public void launchBrowser() { System.out.println("launching firefox browser"); System.setProperty("webdriver.gecko.driver", driverPath); driver = new FirefoxDriver(); driver.get(baseUrl); } @Test public void verifyHomepageTitle() { String expectedTitle = "Welcome: Mercury Tours"; String actualTitle = driver.getTitle(); Assert.assertEquals(actualTitle, expectedTitle); } @AfterTest public void terminateBrowser(){ driver.close(); } }
Áp dụng logic được trình bày trong bảng và đoạn mã ở trên, chúng ta có thể dự đoán rằng trình tự các phương thức sẽ được thực thi là:
- 1st – launchBrowser()
- 2nd – verifyHomepageTitle()
- 3rd – chấm dứtBrowser()
Vị trí của các khối chú thích có thể được hoán đổi mà không ảnh hưởng đến thứ tự thời gian mà chúng sẽ được thực hiện. Hãy hiểu với một TestNG Ví dụ và cố gắng sắp xếp lại các khối chú thích sao cho mã của bạn trông giống như mã bên dưới.
package firsttestngpackage; import org.openqa.selenium.*; import org.openqa.selenium.firefox.FirefoxDriver; import org.testng.Assert; import org.testng.annotations.*; public class firsttestngfile { public String baseUrl = "https://demo.guru99.com/test/newtours/"; String driverPath = "C:\\geckodriver.exe"; public WebDriver driver ; @AfterTest //Jumbled public void terminateBrowser(){ driver.close(); } @BeforeTest //Jumbled public void launchBrowser() { System.out.println("launching firefox browser"); System.setProperty("webdriver.gecko.driver", driverPath); driver = new FirefoxDriver(); driver.get(baseUrl); } @Test //Jumbled public void verifyHomepageTitle() { String expectedTitle = "Welcome: Mercury Tours"; String actualTitle = driver.getTitle(); Assert.assertEquals(actualTitle, expectedTitle); } }
Chạy đoạn mã trên và nhận thấy rằng
@BeforeMethod và @AfterMethod
@BeforeMethod | các phương thức dưới chú thích này sẽ được thực thi trước mỗi phương pháp trong mỗi trường hợp thử nghiệm. |
@AfterPhương thức | các phương thức dưới chú thích này sẽ được thực thi sau mỗi phương pháp trong mỗi trường hợp thử nghiệm. |
In Mercury Các chuyến tham quan, giả sử chúng ta muốn xác minh tiêu đề của các trang đích trong hai liên kết bên dưới.
Quy trình thử nghiệm của chúng tôi sẽ là:
- Đi tới trang chủ và xác minh tiêu đề của nó.
- Nhấp vào ĐĂNG KÝ và xác minh tiêu đề của trang mục tiêu.
- Quay lại trang chủ và xác minh xem nó có còn đúng tiêu đề không.
- Nhấp vào HỖ TRỢ và xác minh tiêu đề của trang mục tiêu.
- Quay lại trang chủ và xác minh xem nó có còn đúng tiêu đề không.
Mã bên dưới minh họa cách sử dụng @BeforeMethod và @AfterMethod để thực thi hiệu quả kịch bản được đề cập ở trên.
package firsttestngpackage; import org.openqa.selenium.*; import org.openqa.selenium.firefox.FirefoxDriver; import org.testng.Assert; import org.testng.annotations.*; @Test public class firsttestngfile { public String baseUrl = "https://demo.guru99.com/test/newtours/"; String driverPath = "C:\\geckodriver.exe"; public WebDriver driver; public String expected = null; public String actual = null; @BeforeTest public void launchBrowser() { System.out.println("launching firefox browser"); System.setProperty("webdriver.gecko.driver", driverPath); driver= new FirefoxDriver(); driver.get(baseUrl); } @BeforeMethod public void verifyHomepageTitle() { String expectedTitle = "Welcome: Mercury Tours"; String actualTitle = driver.getTitle(); Assert.assertEquals(actualTitle, expectedTitle); } @Test(priority = 0) public void register(){ driver.findElement(By.linkText("REGISTER")).click() ; expected = "Register: Mercury Tours"; actual = driver.getTitle(); Assert.assertEquals(actual, expected); } @Test(priority = 1) public void support() { driver.findElement(By.linkText("SUPPORT")).click() ; expected = "Under Construction: Mercury Tours"; actual = driver.getTitle(); Assert.assertEquals(actual, expected); } @AfterMethod public void goBackToHomepage ( ) { driver.findElement(By.linkText("Home")).click() ; } @AfterTest public void terminateBrowser(){ driver.close(); } }
Sau khi thực hiện bài kiểm tra này, bạn TestNG phải báo cáo trình tự sau.
Nói một cách đơn giản, @BeforeMethod phải chứa các phương thức mà bạn cần chạy trước mỗi trường hợp thử nghiệm trong khi @AfterMethod phải chứa các phương thức mà bạn cần chạy sau khi từng trường hợp thử nghiệm.
Tóm tắt TestNG Chú thích
@BeforeSuite: Phương thức được chú thích sẽ được chạy trước khi tất cả các thử nghiệm trong bộ phần mềm này chạy xong.
@AfterSuite: Phương thức được chú thích sẽ được chạy sau khi tất cả các thử nghiệm trong bộ phần mềm này đã chạy.
@Trước khi kiểm tra: Phương thức được chú thích sẽ được chạy trước khi chạy bất kỳ phương thức kiểm tra nào thuộc các lớp bên trong thẻ.
@SauTest: Phương thức được chú thích sẽ được chạy sau khi tất cả các phương thức kiểm tra thuộc các lớp bên trong thẻ đã chạy.
@BeforeGroups: Danh sách các nhóm mà phương thức cấu hình này sẽ chạy trước đó. Phương pháp này được đảm bảo chạy ngay trước khi phương thức thử nghiệm đầu tiên thuộc bất kỳ nhóm nào trong số này được gọi.
@AfterGroups: Danh sách các nhóm mà phương thức cấu hình này sẽ chạy sau. Phương thức này được đảm bảo sẽ chạy ngay sau khi phương thức thử nghiệm cuối cùng thuộc bất kỳ nhóm nào trong số này được gọi.
@BeforeClass: Phương thức được chú thích sẽ được chạy trước khi phương thức thử nghiệm đầu tiên trong lớp hiện tại được gọi.
@Sau giờ học: Phương thức được chú thích sẽ được chạy sau khi tất cả các phương thức thử nghiệm trong lớp hiện tại đã được chạy.
@BeforeMethod: Phương thức được chú thích sẽ được chạy trước mỗi phương thức thử nghiệm.
@AfterPhương thức: Phương thức được chú thích sẽ được chạy sau mỗi phương thức thử nghiệm.
@Thử nghiệm: Phương thức được chú thích là một phần của trường hợp thử nghiệm
Kết luận
- TestNG là một thử nghiệm khuôn khổ có khả năng thực hiện Selenium kiểm tra dễ hiểu hơn và tạo ra các báo cáo dễ hiểu.
- Những ưu điểm chính của TestNG kết thúc JUnit là những thứ sau đây.
- Chú thích dễ sử dụng và dễ hiểu hơn.
- Các trường hợp thử nghiệm có thể được nhóm lại dễ dàng hơn.
- TestNG cho phép chúng ta tạo ra kiểm tra song song.
- Cửa sổ Console ở Eclipse tạo ra kết quả dựa trên văn bản trong khi TestNG cửa sổ hữu ích hơn vì nó cung cấp cho chúng ta kết quả đồ họa của kết quả thử nghiệm cùng với các chi tiết có ý nghĩa khác như:
- Thời gian chạy của từng phương pháp.
- Thứ tự thời gian mà các phương pháp được thực hiện
- TestNG có khả năng tạo các báo cáo dựa trên HTML.
- Chú thích có thể sử dụng các tham số giống như thông thường Java TestNG phương pháp.
- TestNG Dataprovider là một cách để truyền các tham số vào hàm kiểm tra, chức năng này chuyển các giá trị khác nhau trong các trường hợp kiểm thử trong một lần thực thi.