TestNG - Kiểm tra tham số hóa

Một tính năng thú vị khác có trong TestNG là parametric testing. Trong hầu hết các trường hợp, bạn sẽ gặp một tình huống trong đó logic nghiệp vụ yêu cầu một số lượng thử nghiệm rất khác nhau.Parameterized tests cho phép các nhà phát triển chạy đi chạy lại cùng một thử nghiệm bằng cách sử dụng các giá trị khác nhau.

TestNG cho phép bạn chuyển các tham số trực tiếp đến các phương pháp thử nghiệm của mình theo hai cách khác nhau -

  • Với testng.xml
  • Với nhà cung cấp dữ liệu

Truyền thông số với testng.xml

Với kỹ thuật này, bạn xác định các tham số đơn giản trong tệp testng.xml và sau đó tham chiếu các tham số đó trong tệp nguồn. Hãy để chúng tôi có một ví dụ để chứng minh cách sử dụng kỹ thuật này để truyền các tham số.

Tạo lớp trường hợp thử nghiệm

  • Tạo một lớp thử nghiệm java, chẳng hạn, ParameterizedTest1.java.

  • Thêm phương thức thử nghiệm tham sốTest () vào lớp thử nghiệm của bạn. Phương thức này nhận một chuỗi làm tham số đầu vào.

  • Thêm chú thích @Parameters ("myName") vào phương thức này. Tham số sẽ được chuyển một giá trị từ testng.xml, chúng ta sẽ thấy trong bước tiếp theo.

Tạo tệp lớp java có tên ParameterizedTest1.java trong C:\>TestNG_WORKSPACE.

import org.testng.annotations.Parameters;
import org.testng.annotations.Test;

public class ParameterizedTest1 {
   @Test
   @Parameters("myName")
   public void parameterTest(String myName) {
      System.out.println("Parameterized value is : " + myName);
   }
}

Tạo testng.xml

Tạo testng.xml trong C:\>TestNG_WORKSPACE để thực thi (các) trường hợp thử nghiệm.

<?xml version = "1.0" encoding = "UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >

<suite name = "Suite1">
   <test name = "test1">
   
      <parameter name = "myName" value="manisha"/> 
      
      <classes>
         <class name = "ParameterizedTest1" />
      </classes>
      
   </test>
</suite>

Chúng ta cũng có thể xác định các tham số ở cấp <suite>. Giả sử chúng ta đã xác định myName ở cả cấp độ <suite> và <test>. Trong những trường hợp như vậy, các quy tắc xác định phạm vi thông thường được áp dụng. Có nghĩa là bất kỳ lớp nào bên trong thẻ <test> sẽ thấy giá trị của tham số được xác định trong <test>, trong khi các lớp trong phần còn lại của tệp testng.xml sẽ thấy giá trị được xác định trong <suite>.

Biên dịch lớp test case bằng javac.

C:\TestNG_WORKSPACE>javac ParameterizedTest1.java

Bây giờ, chạy testng.xml, phương thức này sẽ chạy phương thức parameterTest . TestNG sẽ cố gắng tìm một tham số có tên myName trước trong thẻ <test>, sau đó, nếu không thể tìm thấy, nó sẽ tìm kiếm trong thẻ <suit> kèm theo nó.

C:\TestNG_WORKSPACE>java -cp "C:\TestNG_WORKSPACE" org.testng.TestNG testng.xml

Xác minh kết quả đầu ra.

Parameterized value is : manisha

===============================================
Suite1
Total tests run: 1, Failures: 0, Skips: 0
===============================================

TestNG sẽ tự động cố gắng chuyển đổi giá trị được chỉ định trong testng.xml thành loại tham số của bạn. Dưới đây là các loại được hỗ trợ -

  • String
  • int/Integer
  • boolean/Boolean
  • byte/Byte
  • char/Character
  • double/Double
  • float/Float
  • long/Long
  • short/Short

Truyền thông số với Dataproviders

Khi bạn cần truyền các tham số phức tạp hoặc tham số cần được tạo từ Java (đối tượng phức tạp, đối tượng đọc từ tệp thuộc tính hoặc cơ sở dữ liệu, v.v.), các tham số có thể được truyền bằng Dataproviders.

Nhà cung cấp dữ liệu là một phương thức được chú thích bằng @DataProvider. Chú thích này chỉ có một thuộc tính chuỗi: tên của nó. Nếu tên không được cung cấp, tên của nhà cung cấp dữ liệu sẽ tự động mặc định thành tên của phương thức. Một nhà cung cấp dữ liệu trả về một mảng các đối tượng.

Các ví dụ sau đây trình bày cách sử dụng các nhà cung cấp dữ liệu. Ví dụ đầu tiên là về @DataProvider sử dụng Vector, Chuỗi hoặc Số nguyên làm tham số và ví dụ thứ hai là về @DataProvider sử dụng đối tượng làm tham số.

ví dụ 1

Ở đây, @DataProvider chuyển Integer và Boolean làm tham số.

Create Java class

Tạo một lớp java có tên là PrimeNumberChecker.java. Lớp này kiểm tra xem số có phải là số nguyên tố hay không. Tạo lớp học này trongC:\>TestNG_WORKSPACE.

public class PrimeNumberChecker {
   public Boolean validate(final Integer primeNumber) {
   
      for (int i = 2; i < (primeNumber / 2); i++) {
         if (primeNumber % i == 0) {
            return false;
         }
      }
      return true;
   }
}

Create Test Case Class

  • Tạo một lớp thử nghiệm java, chẳng hạn, ParamTestWithDataProvider1.java.

  • Xác định phương thức primeNumbers (), được định nghĩa là nhà cung cấp dữ liệu bằng cách sử dụng chú thích. Phương thức này trả về một mảng các đối tượng.

  • Thêm phương thức thử nghiệm testPrimeNumberChecker () vào lớp thử nghiệm của bạn. Phương thức này lấy Integer và Boolean làm tham số đầu vào. Phương thức này xác thực nếu tham số được truyền là một số nguyên tố.

  • Thêm chú thích @Test (dataProvider = "test1") vào phương pháp này. Thuộc tính dataProvider được ánh xạ tới "test1".

Tạo tệp lớp java có tên ParamTestWithDataProvider1.java trong C:\>TestNG_WORKSPACE.

import org.testng.Assert;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;

public class ParamTestWithDataProvider1 {
   private PrimeNumberChecker primeNumberChecker;

   @BeforeMethod
   public void initialize() {
      primeNumberChecker = new PrimeNumberChecker();
   }

   @DataProvider(name = "test1")
   public static Object[][] primeNumbers() {
      return new Object[][] {{2, true}, {6, false}, {19, true}, {22, false}, {23, true}};
   }

   // This test will run 4 times since we have 5 parameters defined
   @Test(dataProvider = "test1")
   public void testPrimeNumberChecker(Integer inputNumber, Boolean expectedResult) {
      System.out.println(inputNumber + " " + expectedResult);
      Assert.assertEquals(expectedResult, primeNumberChecker.validate(inputNumber));
   }
}

Create testng.xml

Tạo testng.xml C:\>TestNG_WORKSPACE để thực thi (các) trường hợp Kiểm thử.

<?xml version = "1.0" encoding = "UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >

<suite name = "Suite1">
   <test name = "test1">
      <classes>
         <class name = "ParamTestWithDataProvider1" />
      </classes>
   </test>
</suite>

Biên dịch lớp Test case bằng javac.

C:\TestNG_WORKSPACE>.javac ParamTestWithDataProvider1.java PrimeNumberChecker.java

Bây giờ, hãy chạy testng.xml.

C:\TestNG_WORKSPACE>java -cp "C:\TestNG_WORKSPACE" org.testng.TestNG testng.xml

Xác minh kết quả đầu ra.

2 true
   6 false
   19 true
   22 false
   23 true

===============================================
   Suite1
   Total tests run: 5, Failures: 0, Skips: 0
===============================================

Ví dụ 2

Ở đây, @DataProvider chuyển Object dưới dạng tham số.

Create Java class

Tạo một lớp java Bean.java, là một đối tượng đơn giản với các phương thức get / set, trong C:\>TestNG_WORKSPACE.

public class Bean {
   private String val;
   private int i;
   
   public Bean(String val, int i) {
      this.val = val;
      this.i = i;
   }
   
   public String getVal() {
      return val;
   }
   
   public void setVal(String val) {
      this.val = val;
   }
   
   public int getI() {
      return i;
   }
   
   public void setI(int i) {
      this.i = i;
   }
}

Create Test Case Class

  • Tạo một lớp thử nghiệm java, chẳng hạn, ParamTestWithDataProvider2.java.

  • Xác định phương thức primeNumbers (), được định nghĩa như một trình cung cấp dữ liệu bằng cách sử dụng chú thích. Phương thức này trả về một mảng đối tượng.

  • Thêm phương pháp thử testMethod () vào lớp thử nghiệm của bạn. Phương thức này nhận một đối tượng bean làm tham số.

  • Thêm chú thích @Test (dataProvider = "test1") vào phương pháp này. Thuộc tính dataProvider được ánh xạ tới "test1".

Tạo tệp lớp java có tên ParamTestWithDataProvider2.java trong C:\>TestNG_WORKSPACE.

import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;

public class ParamTestWithDataProvider2 {
   @DataProvider(name = "test1")
   public static Object[][] primeNumbers() {
      return new Object[][] { { new Bean("hi I am the bean", 111) } };
   }

   @Test(dataProvider = "test1")
   public void testMethod(Bean myBean) {
      System.out.println(myBean.getVal() + " " + myBean.getI());
   }
}

Create testng.xml

Tạo testng.xml trong C:\>TestNG_WORKSPACE để thực thi (các) trường hợp thử nghiệm.

<?xml version = "1.0" encoding = "UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >

<suite name = "Suite1">
   <test name = "test1">
      <classes>
         <class name = "ParamTestWithDataProvider2" />
      </classes>
   </test>
</suite>

Biên dịch lớp test case bằng javac.

C:\TestNG_WORKSPACE>javac ParamTestWithDataProvider2.java Bean.java

Bây giờ, hãy chạy testng.xml.

C:\TestNG_WORKSPACE>java -cp "C:\TestNG_WORKSPACE" org.testng.TestNG testng.xml

Xác minh kết quả đầu ra.

hi I am the bean 111

===============================================
   Suite1
   Total tests run: 1, Failures: 0, Skips: 0
===============================================