TestNG là gì?
TestNG là một khuôn khổ thử nghiệm tự động hóa, trong đó NG là viết tắt của "Thế hệ tiếp theo". TestNG được lấy cảm hứng từ 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ế để giúp việc kiểm tra đầu cuối trở nên 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 có bao nhiêu trường hợp thử nghiệm được vượt qua, 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 không thành công 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 thức được viết cho mỗi trường hợp thử nghiệm (Giả sử rằng chương trình được viết bằng phương thức chính mà không sử dụng testNG). Khi bạn chạy chương trình này đầu tiên, ba phương thức được thực thi thành công và phương pháp thứ tư không thành công. Sau đó sửa các lỗi có trong phương thức thứ tư, bây giờ bạn chỉ muốn chạy phương thức thứ tư vì ba phương thức đầu tiên vẫn được thực thi thành công. Điều này là không thể nếu không sử dụng TestNG.
- TestNG trong Selenium cung cấp một tùy chọn, tức là tệp testng-fail.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 có 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 là gì, cách tạo phương pháp 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 thử và thực thi thông qua nhật thực cũng như từ dòng lệnh .
Trong hướng dẫn TestNG này, bạn sẽ học
- Tại sao sử dụng TestNG với Selenium?
- Ưu điểm của TestNG so với JUnit
- Tạo trường hợp thử nghiệm bằng cách sử dụng chú thích TestNG
- Cách tạo tệp kiểm tra TestNG mới
- Mã hóa Ví dụ về trường hợp thử nghiệm TestNG đầu tiên của chúng tôi
- Chạy thử nghiệm
- Kiểm tra các báo cáo được tạo bởi TestNG
- Các chú thích được sử dụng trong TestNG
- Nhiều trường hợp thử nghiệm
- Thông số
- Nhiều tham số
- Tóm tắt các chú thích của TestNG
Tại sao sử dụng TestNG với Selenium?
Các bài kiểm tra Selenium mặc định không tạo ra một định dạng thích hợp cho các kết quả kiểm tra. Sử dụng TestNG trong Selenium, chúng tôi có thể tạo kết quả kiểm tra.
Hầu hết người dùng Selenium sử dụng cái 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 tôi sẽ chỉ tập trung vào những tính năng quan trọng nhất mà chúng tôi 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 theo định dạng thích hợp bao gồm một số trường hợp chạy thử nghiệm, số trường hợp thử nghiệm đã vượt qua, số lượng trường hợp thử nghiệm không thành công và số lượng trường hợp 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 kiểm thử nào nên được thực thi trước.
- Cùng một trường hợp thử nghiệm có thể được thực thi nhiều lần mà không cần vòng lặp chỉ bằng cách sử dụng từ khóa có tên là 'số lượng lệnh gọi'.
- Sử dụng testng, bạn có thể thực thi nhiều trường hợp thử nghiệm trên nhiều trình duyệt, tức là thử nghiệm trình duyệt chéo.
- Khung TestNG 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ế riêng để tạo báo cáo. TestNG có thể tạo báo cáo ở định dạng có thể đọc được như hình 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 một phương thức chính tĩnh trong các thử nghiệm của chúng tôi. Chuỗi 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.
- TestNG tự động xử lý các trường hợp ngoại lệ mà không cần kết thúc quá trình kiểm tra sớm. Các 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 so với JUnit
Có ba ưu điểm chính của TestNG so với JUnit:
- Chú thích dễ hiểu hơn
- Các trường hợp kiểm thử có thể được nhóm lại dễ dàng hơn
- Có thể thử nghiệm song song
Chú thích trong TestNG là các dòng mã có thể kiểm soát cách phương thức bên dưới chúng sẽ được thực thi . Chúng luôn được đặt trước ký hiệu @. Ví dụ TestNG rất sớm và nhanh chóng là ví dụ được hiển thị bên dưới.
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 chưa hiểu Ví dụ TestNG ở trên. Điều quan trọng cần lưu ý là bây giờ các chú thích trong TestNG dễ viết và dễ 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 có trong JUnit, do đó, khung TestNG được những người thử nghiệm sử dụng Selenium Grid ưa thích hơn.
Tạo trường hợp thử nghiệm bằng cách sử dụng chú thích TestNG
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 của mình bằng cách sử dụng Chú thích TestNG 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 Dự án TestNG mới trong Eclipse và đặt tên là "FirstTestNGProject".
Thiết lập một Dự án TestNG mới
Bước 1: Nhấp vào Tệp> Mới> Dự án Java
Bước 2: Gõ "FirstTestNGProject" làm Tên dự án, sau đó nhấp vào Tiếp theo.
Bước 3: Bây giờ chúng ta sẽ bắt đầu nhập các Thư viện TestNG vào dự án của mình. Nhấp vào tab "Thư viện", sau đó 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 Hoàn tất.
Bạn nên nhận thấy rằng TestNG được bao gồm trong danh sách Thư viện.
Bước 6: Bây giờ chúng ta sẽ thêm các tệp JAR có chứa API Selenium. Các tệp này được tìm thấy trong trình điều khiển máy khách Java mà chúng tôi đã tải xuống từ http://docs.seleniumhq.org/download/ khi chúng tôi cài đặt Selenium và Eclipse trong các chương trước.
Sau đó, điều hướng đến nơi bạn đã đặt các tệp Selenium 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 Kết thúc và xác minh rằng FirstTestNGProject của chúng tôi hiển thị trên cửa sổ Package Explorer của Eclipse.
Cách tạo tệp kiểm tra TestNG mới
Bây giờ chúng ta đã hoàn tất việc thiết lập dự án của mình trong hướng dẫn TestNG này, hãy tạo một tệp TestNG mới.
Bước 1: 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: Nhấp vào thư mục TestNG và chọn tùy chọn "Lớp TestNG". Nhấn tiếp.
Bước 3: Nhập các giá trị được chỉ ra bên dưới vào các hộp nhập thích hợp và nhấp vào Kết thúc. Lưu ý rằng chúng tôi đã đặt tên tệp Java của mình là "FirstTestNGFile".
Eclipse sẽ tự động tạo mẫu cho tệp TestNG của chúng tôi được hiển thị bên dưới.
Mã hóa Ví dụ về trường hợp thử nghiệm TestNG đầu tiên của chúng tôi
Bây giờ chúng ta hãy tạo Test Case đầu tiên để kiểm tra xem trang chủ của Mercury Tours có chính xác không. Nhập mã của bạn như được hiển thị trong Ví dụ TestNG bên dưới:
gói firsttestngpackage;nhập org.openqa.selenium. *;nhập org.openqa.selenium.firefox.FirefoxDriver;nhập khẩu org.testng.Assert;nhập org.testng.annotations. *;public class firsttestngfile {public String baseUrl = "http://demo.guru99.com/test/newtours/";String driverPath = "C: \\ geckodriver.exe";trình điều khiển WebDriver công khai;@Kiểm trapublic void verifyHomepageTitle () {System.out.println ("khởi chạy trình duyệt firefox");System.setProperty ("webdriver.gecko.driver", driverPath);driver = new FirefoxDriver ();driver.get (baseUrl);StringainedTitle = "Chào mừng: Mercury Tours";String factTitle = driver.getTitle ();Assert.assertEquals (thực tếTitle, dự kiếnTitle);trình điều khiển.close ();}}
Chú ý những điều sau đây.
- 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 nó là một 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 chúng tôi, 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 để thực hiện 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 đó, nhiều chú thích @Test) trong một tệp TestNG duy nhất. Điều này sẽ được giải quyết chi tiết hơn ở phầ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 đầu ra - một trong cửa sổ Console và một trên cửa sổ TestNG Results.
Kiểm tra các báo cáo được tạo bởi TestNG
Cửa sổ Console trong Eclipse cung cấp 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 cửa sổ Kết quả TestNG cung cấp cho chúng tôi một báo cáo đồ 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 FirstTestNGFile mà chúng ta đã tạo trong phần trước, nhấp chuột phải vào tên dự án (FirstTestNGProject) trong cửa sổ Project Explorer rồi nhấp vào tùy chọn "Làm mới".
Bước 2: Lưu ý rằng một thư mục "test-output" đã được tạo. Mở rộng nó và tìm kiếm tệp index.html. Tệp HTML này là báo cáo kết quả của lần chạy thử nghiệm gần đây nhất.
Bước 3: Nhấp đúp vào tệp index.html đó để mở tệp trong trình duyệt web được tích hợp sẵn của Eclipse. 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 chỉ cần nhấn F5 giống như trong các trình duyệt web thông thường.
Các chú thích được sử dụng trong TestNG
Ở phần trước, bạn đã được làm quen với chú thích @Test. Bây giờ, chúng tôi sẽ nghiên cứu các chú thích nâng cao hơn và cách sử dụng của chúng.
Nhiều trường hợp thử nghiệm
Chúng tôi có thể sử dụng nhiều chú thích @Test trong một tệp TestNG. 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ã, chúng sẽ được thực thi như vậy.
Chạy mã này và trên trang index.html đã tạo, hãy nhấp vào "Chế độ xem theo trình tự thời gian".
Thông số
Nếu bạn muốn các phương thức được thực thi theo một thứ tự khác, hãy sử dụng tham số "ưu tiên". Tham số là các 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 một 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 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 cho đế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.
Báo cáo TestNG HTML sẽ xác nhận rằng các phương pháp đã được thực thi dựa trên giá trị tăng dần của mức độ ưu tiên.
Nhiều tham số
Ngoài "ưu tiên", @Test có một tham số khác đượ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ư tham số được hiển thị bên dưới.
@Test (ưu tiên = 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 tệp TestNG . |
@AfterTest |
các phương thức dưới chú thích này sẽ được thực thi sau khi tất cả các trường hợp thử nghiệm trong tệp TestNG được thực thi . |
Hãy xem xét đoạn mã dưới đây.
gói firsttestngpackage;nhập org.openqa.selenium. *;nhập org.openqa.selenium.firefox.FirefoxDriver;nhập khẩu org.testng.Assert;nhập org.testng.annotations. *;public class firsttestngfile {public String baseUrl = "http://demo.guru99.com/test/newtours/";String driverPath = "C: \\ geckodriver.exe";trình điều khiển WebDriver công khai;@Trước khi kiểm trapublic void launcBrowser () {System.out.println ("khởi chạy trình duyệt firefox");System.setProperty ("webdriver.gecko.driver", driverPath);driver = new FirefoxDriver ();driver.get (baseUrl);}@Kiểm trapublic void verifyHomepageTitle () {StringainedTitle = "Chào mừng: Mercury Tours";String factTitle = driver.getTitle ();Assert.assertEquals (thực tếTitle, dự kiếnTitle);}@AfterTestpublic void terBrowser () {trình điều khiển.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ự mà các phương thức sẽ được thực thi là:
- 1 st - launchBrowser ()
- 2 nd - verifyHomepageTitle ()
- 3 rd - terBrowser ()
Vị trí của các khối chú thích có thể được hoán đổi cho nhau mà không ảnh hưởng đến thứ tự thời gian mà chúng sẽ được thực thi . Hãy cùng tìm hiểu với Ví dụ về TestNG 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 với mã bên dưới.
gói firsttestngpackage;nhập org.openqa.selenium. *;nhập org.openqa.selenium.firefox.FirefoxDriver;nhập khẩu org.testng.Assert;nhập org.testng.annotations. *;public class firsttestngfile {public String baseUrl = "http://demo.guru99.com/test/newtours/";String driverPath = "C: \\ geckodriver.exe";trình điều khiển WebDriver công khai;@AfterTest // Bị lộn xộnpublic void terBrowser () {trình điều khiển.close ();}@BeforeTest // Bị lộn xộnpublic void launcBrowser () {System.out.println ("khởi chạy trình duyệt firefox");System.setProperty ("webdriver.gecko.driver", driverPath);driver = new FirefoxDriver ();driver.get (baseUrl);}@Test // Bị lộn xộnpublic void verifyHomepageTitle () {StringainedTitle = "Chào mừng: Mercury Tours";String factTitle = driver.getTitle ();Assert.assertEquals (thực tếTitle, dự kiếnTitle);}}
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 thức trong mỗi trường hợp thử nghiệm . |
@AfterMethod |
các phương thức dưới chú thích này sẽ được thực thi sau mỗi phương thức trong mỗi trường hợp thử nghiệm. |
Trong Mercury Tours, giả sử chúng tôi muốn xác minh tiêu đề của các trang mục tiêu của hai liên kết bên dưới.
Quy trình kiểm tra của chúng tôi sẽ là:
- Đi đến 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 đề hay 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 đề hay không.
Đoạn mã dưới đây minh họa cách sử dụng @BeforeMethod và @AfterMethod để thực thi hiệu quả tình huống được đề cập ở trên.
gói firsttestngpackage;nhập org.openqa.selenium. *;nhập org.openqa.selenium.firefox.FirefoxDriver;nhập khẩu org.testng.Assert;nhập org.testng.annotations. *;@Kiểm trapublic class firsttestngfile {public String baseUrl = "http://demo.guru99.com/test/newtours/";String driverPath = "C: \\ geckodriver.exe";trình điều khiển WebDriver công khai;công khai Chuỗi dự kiến = null;public String thực = null;@Trước khi kiểm trapublic void launcBrowser () {System.out.println ("khởi chạy trình duyệt firefox");System.setProperty ("webdriver.gecko.driver", driverPath);driver = new FirefoxDriver ();driver.get (baseUrl);}@BeforeMethodpublic void verifyHomepageTitle () {StringainedTitle = "Chào mừng: Mercury Tours";String factTitle = driver.getTitle ();Assert.assertEquals (thực tếTitle, dự kiếnTitle);}@Test (ưu tiên = 0)public void register () {driver.findElement (By.linkText ("ĐĂNG KÝ")). click ();dự kiến = "Đăng ký: Mercury Tours";thực tế = driver.getTitle ();Assert.assertEquals (thực tế, dự kiến);}@Test (ưu tiên = 1)hỗ trợ vô hiệu công khai () {driver.findElement (By.linkText ("HỖ TRỢ")). click ();dự kiến = "Đang xây dựng: Mercury Tours";thực tế = driver.getTitle ();Assert.assertEquals (thực tế, dự kiến);}@AfterMethodpublic void goBackToHomepage () {driver.findElement (By.linkText ("Trang chủ")). click ();}@AfterTestpublic void terBrowser () {trình điều khiển.close ();}}
Sau khi thực hiện kiểm tra này, TestNG của bạn sẽ 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 mỗi trường hợp thử nghiệm.
Tóm tắt các chú thích của TestNG
@BeforeSuite : Phương thứ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.
@AfterSuite : Phương thứ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.
@BeforeTest : Phương thứ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ẻ.
@AfterTest : Phương thức chú thích sẽ được chạy sau khi tất cả các phương thức thử nghiệm thuộc các lớp bên trong thẻ đã chạy.
@BeforeGroups : Danh sách các nhóm mà phương pháp cấu hình này sẽ chạy trước đó. Phương pháp này được đảm bảo sẽ chạy trong thời gian ngắn trước khi phương pháp 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 pháp này được đảm bảo sẽ chạy ngay sau khi phương pháp 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.
@AfterClass : 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 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.
@AfterMethod : Phương thức có chú thích sẽ được chạy sau mỗi phương thức thử nghiệm.
@Test : Phương thức chú thích là một phần của test case
Phần kết luận
- TestNG là một khung thử nghiệm có khả năng làm cho các bài kiểm tra Selenium 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 so với JUnit là sau đây.
- Chú thích dễ sử dụng và dễ hiểu hơn.
- Các trường hợp kiểm thử có thể được nhóm lại dễ dàng hơn.
- TestNG cho phép chúng tôi tạo các bài kiểm tra song song.
- Cửa sổ Console trong Eclipse tạo ra kết quả dựa trên văn bản trong khi cửa sổ TestNG 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 của mỗi phương pháp.
- Thứ tự thời gian mà các phương thức được thực thi
- 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ư các phương pháp Java TestNG thông thường.
- TestNG Dataprovider là một cách để truyền các tham số vào hàm thử nghiệm để truyền các giá trị khác nhau trong các trường hợp thử nghiệm trong một lần thực thi.