Tech

Hướng dẫn TestNG: Annotations và Framework trong Selenium là gì

TestNG là gì?

TestNG là một framework kiểm tra tự động, trong đó TestNG là viết tắt của “Next Generation”. 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  end-to-end 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 kiểm tra đượ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 kiểm tra 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 kiểm tra, một phương thức được viết cho mỗi trường hợp kiểm tra (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 thức 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 kiểm tra 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 kiểm tra không thành công.

Bên cạnh 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 .

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 kiểm tra, số trường hợp kiểm tra đã vượt qua, số lượng trường hợp kiểm tra không thành công và số lượng trường hợp kiểm tra bị bỏ qua.
  • Nhiều trường hợp kiểm tra 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 kiểm tra 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 kiểm tra trên nhiều trình duyệt, tức là kiểm tra 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 kiểm tra 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 kiểm tra 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 mà 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 tra có thể được nhóm lại dễ dàng hơn
  • Có thể kiểm tra 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 đứng trước biểu tượng @. 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 kiểm tra song song có sẵn trong TestNG nhưng không có trong JUnit, do đó, khung TestNG được những người kiểm tra sử dụng Selenium Grid ưa thích hơn.

Tạo trường hợp kiểm tra 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 kiểm tra đầ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 kiểm tra, 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, chúng ta 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 kiểm tra 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:

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 = “http://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();

  }

}

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 kiểm tra . Trong trường hợp này, chúng tôi đã đặt phương thức verifyHomepageTitle () làm trường hợp kiểm tra 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 kiểm tra (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 kiểm tra

Để chạy kiểm tra, 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 kiểm tra 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 kiểm tra 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 kiểm tra

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 thức đã đượ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

@BeforeTestcác phương thức dưới chú thích này sẽ được thực thi trước trường hợp kiểm tra đầu tiên trong tệp TestNG .
@AfterTestcá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 kiểm tra trong tệp TestNG đượ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 = “http://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ự mà các phương thức sẽ được thực thi là:

  • 1 st – launcherBrowser ()
  • 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 hiểu với Ví dụ 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.

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 = “http://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

@BeforeMethodcá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 kiểm tra .
@AfterMethodcá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 kiểm tra.

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.

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 = “http://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 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 kiểm tra 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 kiểm tra.

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 kiểm tra 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 kiểm tra 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 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 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 ngay trước khi phương pháp kiểm tra đầ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 pháp 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 kiểm tra 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 kiểm tra đầ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 chú thích sẽ được chạy trước mỗi phương thức kiểm tra.

@AfterMethod : Phương thức được chú thích sẽ được chạy sau mỗi phương thức kiểm tra.

@Test : Phương thức chú thích là một phần của test case

Sự kết luận

  • TestNG là một khung kiểm tra 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ả kiểm tra 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 kiểm tra, chức năng này sẽ truyền các giá trị khác nhau trong các trường hợp kiểm tra trong một lần thực thi.

Blog Tiền Điện Tử

Blog tiền điện tử công thông tin tổng hợp uy tín nhất tất cả các mảng xã hội, giáo dục , công nghệ số. Với khả năng số hóa mạnh mẽ hy vọng sẽ mang lại cho quý bạn đọc những thông tin chính xác nhất 24/24
Back to top button