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.
  • Sử dụng TestNG với Selenium

  • 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.
  • Sử dụng TestNG với Selenium

    Sử dụng TestNG với Selenium

  • 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 trong TestNG

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

Thiết lập mới TestNG 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.

Thiết lập mới TestNG Dự án

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…”

Thiết lập mới TestNG Dự á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.

Thiết lập mới TestNG Dự án

Bước 5: Nhấp vào Kết thúc.

Thiết lập mới TestNG Dự án

Bạn nên nhận thấy rằng TestNG được đưa vào danh sách Thư viện.

Thiết lập mới TestNG Dự á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.

Thiết lập mới TestNG Dự án

Sau đó, điều hướng đến nơi bạn đã đặt Selenium Các tệp JAR.

Thiết lập mới TestNG Dự án

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.

Thiết lập mới TestNG Dự án

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.

Thiết lập mới TestNG Dự án

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…

Tạo một cái mới TestNG Tệp thử nghiệm

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.

Tạo một cái mới TestNG Tệp thử nghiệm

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".

Tạo một cái mới TestNG Tệp thử nghiệm

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.

Tạo một cái mới TestNG Tệp thử nghiệm

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ả.

Chạy thử nghiệm

Chạy thử nghiệm

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.

Kiểm tra báo cáo được tạo bởi TestNG

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”.

Tạo báo cáo HTML

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.

Tạo báo cáo HTML

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.

Tạo báo cáo HTML

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ú thích được sử dụng trong TestNG

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”.

Chú thích được sử dụng trong TestNG

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.

Thông số Kỹ thuật

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.

Thông số Kỹ thuật

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.

Thông số Kỹ thuật

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)

Nhiều thông số

@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

Nhiều thông số

@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.

Nhiều thông số

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.

Nhiều thông số

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.